Giới thiệu SQL là một ngôn ngữ khai báo theo nghĩa là chỉ mô tả dữ liệu quan trọng trong chương trình, không mô tả thuật toán để thu thập dữ liệu. Vì vậy, thường có nhiều cách để đáp ứng một câu lệnh SQL cụ thể. Những cách khác nhau này được gọi là các đường dẫn truy cập hoặc các kế hoạch truy cập. Để đơn giản, bài này đề cập đến một cách cụ thể để đáp ứng một câu lệnh SQL như là đường dẫn truy cập. Mặc dù các đường dẫn truy cập khác nhau...
Điều chỉnh SQL với Optim Query Tuner, Phần 1: Tìm hiểu đường dẫn truy cập Giới thiệu SQL ngôn ngữ khai báo theo nghĩa mơ tả liệu quan trọng chương trình, khơng mơ tả thuật tốn để thu thập liệu Vì vậy, thường có nhiều cách để đáp ứng câu lệnh SQL cụ thể Những cách khác gọi đường dẫn truy cập kế hoạch truy cập Để đơn giản, đề cập đến cách cụ thể để đáp ứng câu lệnh SQL đường dẫn truy cập Mặc dù đường dẫn truy cập khác cho câu lệnh SQL tạo tập kết nhau, chúng khơng thể thực nhiệm vụ với mức hiệu Trình biên dịch SQL sử dụng tối ưu hóa truy vấn để chọn đường dẫn truy cập thực tốt cho câu lệnh SQL cụ thể (tất nhiên khoảng thời gian hợp lý) Nếu bạn người phát triển, người quản trị sở liệu (DBA), chuyên gia điều chỉnh truy vấn, điều quan trọng bạn hiểu điều đường dẫn truy cập đến mức bạn điều chỉnh truy vấn tải truy vấn trước chúng gây vấn đề môi trường sản xuất bạn Sự hiểu biết này, với hiển thị trực quan lời khuyên điều chỉnh giải pháp điều chỉnh truy vấn Optim IBM cung cấp, giúp cho bạn hiệu với nhiệm vụ Sau giới thiệu đường dẫn truy cập thực truy vấn, mô tả phương thức truy cập phổ biến phương thức nối DB2® cho z/OS hỗ trợ Tiếp theo, mơ tả đường dẫn truy cập trình tối ưu hóa DB2 cho z/OS chọn duyệt qua biểu đồ đường dẫn truy cập để giải thích thơng tin quan trọng liên quan đến việc chọn lựa đường dẫn truy cập Bài kết thúc với kịch mẫu diễn tả cách sử dụng thích truy vấn, tính Optim Query Tuner giúp bạn phân tích truy vấn cách cung cấp thơng tin thống kê quan trọng trực tiếp câu lệnh SQL Nếu bạn muốn có hội tự tương tác với biểu đồ đường dẫn truy cập, chứa tệp dự án mẫu mà bạn thu từ phần tải Bạn nhập tệp dự án vào Data Studio (gói độc lập với Fix Pack hơn) sản phẩm Optim Query Tuner Bạn khơng cần có kết nối với sở liệu để tương tác với kết phân tích, gắn nhãn tương ứng với số hình vẽ Để nhập dự án mẫu, làm sau: Mở Data Perspective (Phối cảnh liệu) sản phẩm độc lập Data Studio Optim Query Tuner bạn Chọn File > Import Trong Import Wizard (Trình hướng dẫn nhập khẩu), chuyển hướng đến Query Tuner > Projects, sau nhấn Next Nhấn Browse (Duyệt) chọn thư mục chứa tệp zip tải Điều làm xuất danh sách dự án cửa sổ Projects (Các dự án) 5 Chọn sampleaccesspathproject nhấn Finish (Kết thúc) Bây dự án mẫu xuất Project Explorer (Trình thám hiểm dự án) bạn Nếu bạn không thấy Project Explorer Window, đảm bảo bạn Data Perspective chọn Window > Reset Perspective Ngồi ra, bạn chọn Window > Show View > Project Explorer Về giải pháp điều chỉnh truy vấn Optim Các giải pháp điều chỉnh truy vấn Optim cung cấp môi trường để nhận biết điều chỉnh việc thực câu lệnh SQL không chạy với lời khuyên công cụ trợ giúp hướng dẫn bạn đến giải pháp Các khả điều chỉnh truy vấn cung cấp sản phẩm sau: Các khả định dạng truy vấn điều chỉnh truy vấn đơn lẻ, có sẵn Data Studio 2.2.1 (cả độc lập lẫn IDE) Sản phẩm có sẵn miễn phí cho hai DB2 cho z/OS DB2 cho Linux®, UNIX® Windows® Cần hiểu rõ thông tin loạt giải thích cách bạn sử dụng Data Studio để giải thích giản đồ đường dẫn truy cập, khơng phải tất khả mơ tả có sẵn Data Studio Định dạng truy vấn điều chỉnh truy vấn đơn lẻ, tập trình tư vấn lớn hơn, có sẵn Optim Query Tuner Sản phẩm có sẵn cho hai DB2 cho z/OS DB2 cho Linux, UNIX, Windows Điều chỉnh tải truy vấn, điều chỉnh truy vấn đơn lẻ, tồn tập trình tư vấn có sẵn Optim Query Workload Tuner (Trình điều chỉnh tải truy vấn Optim) Sản phẩm có sẵn cho DB2 cho z/OS (tại thời điểm viết này) Tóm lại, loạt sử dụng tên Optim Query Tuner (Trình điều chỉnh truy vấn Optim) để nói đến tập trình tư vấn cơng cụ mà giải pháp điều chỉnh truy vấn Optim cung cấp Ở tên sản phẩm cụ thể, thích hợp cung cấp mô tả khả khơng có sẵn tất sản phẩm liệt kê Về đầu trang Cách đọc biểu đồ đường dẫn truy cập Một biểu đồ đường dẫn truy cập không mô tả "các thông tin chi tiết hoạt động" thực truy vấn, mà cịn mơ tả cách liệu di chuyển Một nút biểu đồ đường dẫn truy cập nút bảng, nút tệp công việc (workfile), nút mục biểu diễn nguồn liệu kế hoạch thực truy vấn (Hình cho thấy ví dụ kiểu nút này) Dữ liệu di chuyển từ lên (như hiển thị biểu đồ) nút hoạt động biểu đồ đường dẫn truy cập xử lý Bảng mô tả đầu vào, đầu ra, chức nút hoạt động thường xuất biểu đồ đường dẫn truy cập Optim Query Tuner Bảng Các hoạt động tiêu biểu hiển thị Optim Query Tuner Nút hoạt Đầu vào Đầu vào Đầu Mô tả chức động thứ hai Một tập mã Quét mục để lấy mã định danh định danh Khơng có đủ điều kiện vùng khóa mục cụ ghi đủ điều kiện thể (các RID) Tìm nạp ghi liệu trang Một tập Một tập FETCH Table node liệu tương ứng dựa RID Áp dụng RID ghi đủ điều kiện biến vị ngữ có Qt vùng bảng đích để tìm nạp Một tập TBSCAN Nút bảng Không có trang liệu áp dụng biến vị ngữ cho ghi đủ điều kiện ghi có Một tập Một tập Sắp xếp đầu vào theo thứ tự số trang (cho các SORT Khơng có ghi xếp RID) xếp thứ tự khóa (với ghi hoặc RID ghi) RID Quét tệp công việc Quét vùng bảng tệp công Nút tệp Một tập việc đích cách để tìm nạp WFSCAN Khơng có cơng việc ghi trang liệu áp dụng biến vị ngữ cho ghi có Phép nối vịng lặp lồng Với Một tập ghi đủ điều kiện từ đầu vào (bên Một tập Một tập NLJOIN ngoài), quét đầu vào thứ hai (bên trong) để ghi ghi ghi tìm ghi phù hợp trả ghi nối Một tập Một tập Phép nối vòng lặp kết hợp Quét hai đầu Một tập MSJOIN ghi vào để tìm ghi phù hợp trả ghi ghi xếp ghi nối xếp Nút IXSCAN mục Về đầu trang Các đường dẫn truy cập thực truy vấn Cách dễ để mô tả đường dẫn truy cập dùng ví dụ Câu lệnh SQL Liệt kê nối ba bảng để tạo báo cáo bán hàng Số tiền bán hàng tổng hợp dựa trạng thái giới tính tình trạng nhân khách hàng Liệt kê phép nối ba hướng mẫu sử dụng để minh họa biểu đồ đường dẫn truy cập hiển thị Hình select c.gender_code, c.marital_status_code, sum(od.unit_cost * cust_quantity) from cust_customer c, cust_order_header oh, cust_order_detail od where c.cust_code = oh.cust_code and oh.cust_order_number = od.cust_order_number and c.cust_prov_state_code = 'CA' and od.product_number in (154110, 129170, 129150, 129110, 129140, 130130) group by c.gender_code, c.marital_status_code Theo trực giác, đường dẫn truy cập mô tả thủ tục việc thực truy vấn có ba thành phần: Chuỗi nối bảng Thuật toán để quét bảng (phương thức truy cập) Thuật toán để thực hoạt động nối (phương thức nối) Hình biểu đồ đường dẫn truy cập tạo Optim Query Tuner cho truy vấn hiển thị Liệt kê Hình Biểu đồ đường dẫn truy cập mẫu với Liệt kê (phép nối ba hướng) (Xem ảnh lớn Hình 1.) Mỗi ba bảng tham khảo truy vấn thể biểu đồ nút bảng với tên bảng tương ứng chúngs Bảng chuỗi nối bảng CUST_ORDER_DETAIL, quét thông qua mục định nghĩa cột PRODUCT_NUMBER Chỉ mục thể biểu đồ nút mục gắn nhãn với tên mục SQT01_CUST_ORDER_DETAIL Trực tiếp nút mục SQT01_CUST_ORDER_DETAIL nút IXSCAN Điều có nghĩa mục duyệt qua để lấy mã định danh ghi đủ điều kiện (các RID) Sau nút FETCH lấy RID đủ điều kiện để tìm nạp ghi trang liệu tương ứng từ vùng bảng nhóm đệm DB2 Bảng thứ hai chuỗi nối bảng CUST_ORDER_HEADER, quét thông qua mục cột nối có tên CUST_ORDER_NUMBER Phương thức truy cập với CUST_ORDER_HEADER, quét mục, biểu diễn theo cách bảng CUST_ORDER_DETAIL Bảng cuối chuỗi nối bảng CUST_CUSTOMER, quét thông qua mục định nghĩa cột CUST_CODE Bây bạn có nhìn tổng quan bảng cách truy cập thông tin (trong trường hợp thông qua mục), bạn sẵn sàng xem xét kỹ phương thức nối sử dụng Nút nối biểu đồ cho thấy trình tối ưu hóa DB2 chọn phép nối vòng lặp lồng (NLJOIN) cho hoạt động nối CUST_ORDER_DETAIL CUST_ORDER_HEADER Phép nối lấy tập kết bảng (CUST_ORDER_DETAIL) kết bảng thứ hai (CUST_ORDER_HEADER) làm đầu vào Sau kết hoạt động nối trở thành đầu vào cho hoạt động nối thứ hai (cũng phép nối vòng lặp lồng nhau) Nó nối tới tập kết bảng cuối chuỗi nối, CUST_CUSTOMER Sự hiểu biết dịng chảy liệu quan trọng yếu tố có ảnh hưởng khía cạnh hiệu truy vấn việc thực truy vấn Phần lại phần hướng dẫn bạn thông qua biểu đồ đường dẫn truy cập thêm lần từ quan điểm dòng chảy liệu bạn đạt hiểu biết đầy đủ khía cạnh hiệu việc thực truy vấn Số hiển thị nút đánh giá trình tối ưu hóa giá trị cardinality (số yếu tố tập hợp) nguồn liệu nút hoạt động Ví dụ, số 273 nút mục với SQT01_CUST_ORDER_DETAIL cho biết có 273 khóa mục riêng biệt CUST_ORDER_HEADER_PK mục nhất; đó, số lượng khóa mục phù hợp xác với số lượng ghi (539.526) bảng tương ứng Điều cho mục IDX_CUST_CUSTOMER bảng CUST_CUSTOMER, tương ứng, với 31.284 khóa mục ghi Đối với mục không nhất, số lượng khóa mục số lượng ghi Hơn nữa, tỷ lệ số lượng ghi số lượng khóa mục cho biết, theo trung bình, số lượng RID (các tập ghi có đủ điều kiện) có liên kết với khóa mục Các số xuất ba nút bảng biểu đồ cho biết kích thước bảng theo số lượng ghi Dưới xảy thời gian thực cho nhánh phép nối vòng lặp lồng nhau: Hoạt động quét mục (IXSCAN) mục BQT01_CUST_ORDER_DETAIL diễn đầu tiên, hoạt động cho bảng chuỗi nối Dựa đánh giá trình tối ưu hóa, có tám RID đủ điều kiện vùng khóa mục đích Nút tìm nạp sử dụng tám RID đủ điều kiện để xác định vị trí ghi trang tương ứng vùng bảng, có chứa 560273 ghi Vì có khơng có biến vị ngữ bổ sung hoạt động nạp áp dụng, nên giá trị cardinality đầu nút tìm nạp tám Điều có nghĩa có tám ghi đủ điều kiện hoạt động tìm nạp tạo Sau lấy tám ghi đủ điều kiện làm đầu vào cho nút NLJOIN nút FETCH Do cách phép nối vòng lặp lồng hoạt động, nên nhánh thứ hai (có bốn nút) thực cho ghi bảng bên ngồi Có nghĩa là, bảng bên hoạt động nối quét tám lần, lần cho tám ghi đủ điều kiện từ đầu vào bên Nhánh thứ hai nút NLJOIN giống nhánh thứ bảng đầu tiên: Trình tối ưu hóa chọn mục (CUST_ORDER_HEADER_PK) để truy cập ghi bảng CUST_ORDER_HEADER Như số lượng nút IXSCAN nút FETCH ra, ghi tìm thấy CUST_ORDER_HEADER lần thực quét mục Do đó, nút NLJOIN tạo tổng cộng tám ghi Tương tự vậy, nhánh cuối biểu đồ đường dẫn truy cập đánh giá tám lần, lần cho ghi nút NLJOIN tạo Vì chọn mục cho nút IXSCAN (IDX_CUST_CUSTOMER), nên có ghi phù hợp lần quét bảng CUST_CUSTOMER Vì vậy, tổng cộng tám ghi tạo tập kết cuối Theo quan điểm hiệu năng, đường dẫn truy cập thực tốt nên dùng đến số lượng liệu với tập kết cuối Trong ví dụ trên, số lượng ghi tìm nạp từ bảng giữ mức tối thiểu Đối với bảng CUST_ORDER_DETAIL, có tám ghi tìm nạp từ vùng bảng cách sử dụng quét mục Ngoài ra, đầu dò đầu vào bên hai hoạt động NLJOIN phù hợp với ghi Do đó, đánh giá trình tối ưu hóa xác, đường dẫn truy cập đường dẫn truy cập hiệu (Phần Một nghiên cứu sâu sử dụng thích truy vấn mơ tả cách bạn xác định xem đánh giá có khơng) Về đầu trang Các phương thức truy cập phương thức nối khác Trong phần trước, bạn tìm hiểu kiểu phương thức truy cập, quét mục (IXSCAN), kiểu phương thức nối, phép nối vịng lặp lồng (NLJOIN) Phần trình bày thêm vài phương thức truy cập, phương thức nối, hoạt động xếp Việc mô tả hoạt động bao gồm biểu đồ đường dẫn Query Tuner để giải thích ngữ nghĩa hoạt động Quét vùng bảng (TBSCAN) với biến vị ngữ giai đoạn-1 giai đoạn-2 Câu lệnh SQL Liệt kê tạo biểu đồ đường dẫn truy cập hiển thị bên phải ảnh chụp hình Optim Query Tuner Hình Liệt kê Truy vấn mẫu để minh họa quét bảng Hình select count(*) from cust_order_header where cust_total_quantity > and cust_sales_tax > cust_total * 0.03 Hình Biểu đồ đường dẫn truy cập để quét bảng (TBSCAN) với biến vị ngữ giai đoạn1 giai đoạn-2 (Xem ảnh lớn Hình 2.) Các biến vị ngữ giai đoạn-1 giai đoạn-2 (SARGable số dư) Các biến vị ngữ giai đoạn-1 áp dụng cột cột, mà phụ thuộc, nằm nhóm đệm Các biến vị ngữ giai đoạn-2 áp dụng cột cột, mà phụ thuộc, chép từ nhóm đệm đến nhóm nhớ riêng Phần Tài nguyên có liên kết đến chủ đề trung tâm thông tin DB2 cho z/OS nơi bạn tìm thêm thơng tin chủ đề Với DB2 cho Linux, UNIX, Windows, khái niệm tương tự biết đến biến vị ngữ tương ứng SARGable số dư Hình cho thấy ví dụ cách bạn hiển thị mơ tả chi tiết hai nút (bảng CUST_ORDER_HEADER hoạt động quét bảng (TBSCAN)) từ biểu đồ đường dẫn truy cập Bạn nhận mô tả chi tiết từ nút biểu đồ cách nhấn chuột phải vào nút chọn Show Description (Hiển thị mơ tả) từ trình đơn ngữ cảnh Trong Hình 2, mô tả cho nút bảng mô tả cho nút TBSCAN hiển thị bên trái biểu đồ đường dẫn truy cập Câu lệnh SQL hiển thị biểu đồ Đường dẫn truy cập cho thấy hoạt động TBSCAN thực bảng CUST_ORDER_HEADER Điều có nghĩa DB2 tìm nạp trang liệu vùng bảng cách vào nhóm đệm Sau quét ghi nhóm đệm để áp dụng biến vị ngữ giai đoạn-1 Các ghi đủ điều kiện (chỉ cột thích hợp) chép vào nhóm nhớ riêng biến vị ngữ giai đoạn-2 lọc Hàm tổng hợp, COUNT, áp dụng cho ghi lại sau biến vị ngữ giai đoạn-2 lọc Có thể tìm thấy chi tiết dòng chảy liệu phần thuộc tính mơ tả TBSCAN Có 539.526 ghi DB2 quét nhóm đệm (giá trị (Input Cardinality mơ tả TBSCAN) Trình tối ưu hóa DB2 đánh giá 473.785,44 ghi lại sau biến vị ngữ giai đoạn-1 (xem thuộc tính Stage Returned Rows (Các hàng trả giai đoạn-1) mô tả) 4.737,9688 ghi lại sau biến vị ngữ giai đoạn-2 (xem thuộc tính Stage Returned Rows mơ tả) Chỉ có ghi tạo ra, hàm COUNT Thuộc tính Prefetch mơ tả chứa giá trị 'S', cho biết việc tìm nạp trước bắt đầu thời gian thực để cải thiện hiệu vào/ra (I/O) cho việc tìm nạp trang liệu từ vùng bảng Quét bảng (TBSCAN) với việc lược bớt phân vùng Câu lệnh SQL Liệt kê tạo biểu đồ đường dẫn truy cập hiển thị Hình Liệt kê Truy vấn mẫu để minh họa quét bảng với việc lược bớt phân vùng Hình select count(*) from cust_order_header where cust_total_quantity > and cust_sales_tax > cust_total * 0.03 and cust_order_number between 100000 and 580000 Hình Biểu đồ đường dẫn truy cập để quét bảng (TBSCAN) với việc lược bớt phân vùng (Xem ảnh lớn Hình 3.) Các khóa hạn chế Các bảng, phân vùng khóa, sử dụng khóa giới hạn để đường ranh giới phân vùng; khóa giới hạn cho phân vùng Như hiển thị mô tả nút bảng, có 10 phân vùng vùng bảng, khóa giới hạn cho phân vùng thứ chín 625.000 Vì có biến vị ngữ cust_order_number between 100000 and 580000, cột phân vùng, nên trình tối ưu hóa giới hạn TBSCAN đến chín phân vùng Sự tối ưu hóa mơ tả mơ tả TBSCAN Thuộc tính Page_Ranges chứa vùng, vùng 1, bao trùm phân vùng đến phân vùng Trong lúc thực hiện, phân vùng 10 hoàn toàn bị bỏ qua để có hiệu tốt Quét mục (IXSCAN) với biến vị ngữ phù hợp Câu lệnh SQL Liệt kê tạo biểu đồ đường dẫn truy cập hiển thị Hình Liệt kê Truy vấn mẫu để minh họa quét mục phù hợp Hình select crdt_method_code, cust_total_quantity, count(*) from cust_order_header where cust_total_quantity - > and crdt_method_code > 20 and cust_order_date > '2007-01-01-01.24.58.017000' group by crdt_method_code, cust_total_quantity (Lưu ý ví dụ trên, cột cust_order_date định nghĩa với kiểu TIMESTAMP.) Hình Biểu đồ đường dẫn truy cập để quét mục (IXSCAN) với biến vị ngữ phù hợp (Xem ảnh lớn Hình 4.) Quét mục thường thể Query Tuner nhóm có bốn nút biểu đồ đường dẫn truy cập Như thể Hình 4, CUST_ORDER_HEADER truy cập thông qua việc quét mục phù hợp với mục BQT01_CUST_ORDER_HEADER, định nghĩa cột CRDT_METHOD_CODE (bạn thấy cột cách mở rộng mô tả IXSCAN thêm chút so với hiển thị Hình 4) Các chi tiết mơ tả IXSCAN cho thấy có biến vị ngữ phù hợp với hệ số lọc 7,32% dẫn đến đánh giá 114 trang mục 3.9471 RID đủ điều kiện tổng số, tương ứng, 1.558 trang mục 539.526 RID Nút FETCH sử dụng RID để bố trí trang liệu tương ứng vùng bảng Một tìm nạp vào nhóm đệm DB2, ghi trang quét biến vị ngữ giai đoạn-1 áp dụng Mô tả chi tiết nút FETCH cho thấy 18.515,602 ghi đánh giá lại sau biến vị ngữ giai đoạn-1 Biến vị ngữ giai đoạn-2 áp dụng sau cột có liên quan ghi chép vào đệm riêng DB2 Cuối cùng, có 6.172,508 ghi nút FETCH trả Quét mục không phù hợp (IXSCAN) Câu lệnh SQL Liệt kê tạo biểu đồ đường dẫn truy cập thể Hình Liệt kê Truy vấn mẫu để minh họa quét mục không phù hợp Hình select count(*) as count from cust_order_header Hình Biểu đồ đường dẫn truy cập để quét mục không phù hợp (IXSCAN) (Xem ảnh lớn Hình 5.) Việc qt mục khơng phù hợp, có nghĩa khơng có hạn chế việc quét mục Đó là, DB2 quét tất trang đơn Thông thường, trình tối ưu hóa chọn qt mục khơng phù hợp mục cung cấp lợi ích truy cập theo mục, tránh xếp, số lợi ích tương tự Trong ví dụ Hình 5, trình tối ưu hóa chọn khai thác qt mục khơng phù hợp hàm tổng hợp, count(*), đánh giá cách quét mục Ngoài ra, mục thường nhỏ so với bảng đó, quét hiệu Việc mô tả chi tiết nút IXSCAN cho thấy tất 1.680 trang quét thiếu biến vị ngữ phù hợp Không có nút FETCH nút bảng hiển thị biểu đồ đường dẫn truy cập quét theo mục Phép nối vòng lặp lồng (NLJOIN) Câu lệnh SQL Liệt kê tạo biểu đồ đường dẫn truy cập hiển thị Hình Liệt kê Truy vấn mẫu để minh họa phép nối vịng lặp lồng Hình select oh.cust_code, sum(od.cust_quantity * od.cust_unit_price) from cust_order_header oh, cust_order_detail od where oh.cust_order_number = od.cust_order_number and od.product_number in (154110, 129170, 129150, 129110, 129140, 130130) group by oh.cust_code Hình Biểu đồ đường dẫn truy cập với phép nối vòng lặp lồng (NLJOIN) (Xem ảnh lớn Hình 6.) Các phép nối vòng lặp lồng (NLJOIN) lấy hai nguồn liệu làm đầu vào, nối ghi từ bên ngồi (phía bên trái) với các ghi phù hợp bên (phía bên phải), để giúp biến vị ngữ nối đủ điều kiện, sau trả ghi nối làm đầu Để biết thêm thông tin phép nối vòng lặp lồng nhau, tham khảo liên kết trung tâm thơng tin thích hợp phần Tài ngun để biết tảng DB2 bạn Như thể biểu đồ đường dẫn truy cập truy vấn mẫu Hình 6, ghi đủ điều kiện từ bảng bên (CUST_ORDER_DETAIL) nối tới ghi đủ điều kiện bảng bên (CUST_ORDER_HEADER) cách sử dụng NLJOIN biến vị ngữ nối EQUAL Trong lúc thực hiện, ghi di chuyển từ nút FETCH phía bên ngồi phép nối, bảng bên quét cách sử dụng quét mục (IXSCAN) theo mục CUST_ORDER_HEADER_PK Thông tin chi tiết mô tả NLJOIN (cũng hiển thị Hình 6) cho thấy theo đánh giá trình tối ưu hóa: Có tám ghi đủ điều kiện sau áp dụng biến vị ngữ cục (giá trị Cardinality đầu vào 8) Một ghi bảng bên phù hợp với ghi đủ điều kiện từ bảng bên (giá trị Cardinality đầu vào bên 1) Nút NLJOIN cuối tạo tám ghi nối làm đầu (giá trị Cardinality đầu 8) Từ góc độ hiệu năng, điều coi hoạt động phép nối hiệu quả, chi phí cho việc quét bảng bên tối ưu qua việc truy cập thông qua mục Phép nối vòng lặp lồng (NLJOIN) với hợp tử xếp Lưu ý câu lệnh SQL Liệt kê giống với câu lệnh Liệt kê phần trước Tuy nhiên, với ví dụ lại chọn đường dẫn truy cập khác, hiển thị Hình Liệt kê Truy vấn mẫu để minh họa phép nối vòng lặp lồng với hợp tử xếp Hình select oh.cust_code, sum(od.cust_quantity * od.cust_unit_price) from cust_order_header oh, cust_order_detail od where oh.cust_order_number = od.cust_order_number and od.product_number in (154110, 129170, 129150, 129110, 129140, 130130) group by oh.cust_code Hình Biểu đồ đường dẫn truy cập cho phép nối vòng lặp lồng (NLJOIN) với hợp tử xếp (Xem ảnh lớn Hình 7.) Sự khác biệt Hình Hình Hình có thêm vào nút SORT phía bên ngồi phép nối Kiểu đường dẫn truy cập gọi phép nối vòng lặp lồng (NLJOIN) với hợp tử xếp Phần sau giải thích trình tối ưu hóa lại thêm nút SORT Lưu ý có khác biệt đáng kể giá trị cardinality hiển thị nút fetch phía bên ngồi phép nối Hình Ví dụ Hình có tám ghi, Hình 7, trình tối ưu đánh giá số lượng các ghi đủ điều kiện 8.708,988 Giá trị cardinality cao hơn, có nhiều đầu dị vào bảng bên hơn, đầu dị cho ghi (bên ngồi) đủ điều kiện Chỉ mục khai thác cho bảng bên ngẫu nhiên mục phân cụm Do đó, thứ tự đầu dị liên tiếp vào bảng bên ảnh hưởng đáng kể đến hiệu vào/ra (I/O) bảng bên Chính xác hơn, đầu dò liên tiếp bảng bên theo thứ tự CUST_ORDER_NUMBER, mục bên quét qua đầu dò khác nhau, lần lượt, đầu dị đáp ứng quét liên tiếp bảng bên Lợi ích thu từ I/O hiệu có tác động nhiều đến chi phí cho việc xếp khoảng 8.708 ghi Vì vậy, Hình trình tối ưu hóa chọn xếp hợp tử cho phép nối vịng lặp lồng Nói chung, trình tối ưu hóa tạo thuận lợi cho phép nối vòng lặp lồng với hợp tử xếp mục bên phân cụm đầy đủ hy vọng bảng bên thăm dò nhiều lần Phép nối quét kết hợp (MSJOIN) có xếp với bên ngồi bên Câu lệnh SQL Liệt kê tạo biểu đồ đường dẫn truy cập hiển thị Hình Liệt kê Truy vấn mẫu để minh họa phép nối quét kết hợp Hình select * from cust_order_header oh, cust_order_detail od where oh.cust_total_quantity = od.cust_quantity and oh.cust_total = od.cust_unit_price and oh.cust_order_date > '2009-01-16-01.00.00.000000' and od.product_number > 150000 (Lưu ý ví dụ trên, cột cust_order_date định nghĩa với kiểu TIMESTAMP.) Hình Biểu đồ đường dẫn truy cập cho phép nối quét kết hợp (MSJOIN) có xếp với bên ngồi bên (Xem ảnh lớn Hình 8.) Phép nối quét kết hợp biết đến phép nối kết hợp có xếp Từ viết tắt MSJOIN sử dụng Optim Query Tuner để rõ thuật tốn nối Để biết thêm thơng tin phép nối quét kết hợp, tham khảo liên kết trung tâm thơng tin thích hợp phần Tài nguyên cho tảng DB2 bạn Một phép nối quét kết hợp liên quan đến nhiều biến vị ngữ Equal (bằng nhau) Hình cho biết có hai biến vị ngữ nối Equal khai thác với phép nối quét kết hợp truy vấn mẫu Đối với phép nối quét kết hợp để thực đúng, hy vọng hai đầu vào theo thứ tự cột nối Chính xác hơn, với bảng bên phép nối (CUST_ORDER_DETAIL), ghi đủ điều kiện phải theo thứ tự cột CUST_QUANTITY CUST_UNIT_PRICE Tương tự vậy, ghi đủ điều kiện bảng bên phải theo thứ tự CUST_TOTAL_QUANTITY CUST_TOTAL Vì bảng bên quét TBSCAN, không đảm bảo thứ tự dự kiến với MSJOIN, nên thêm vào nút SORT để bắt tuân theo thứ tự Như cho thấy mô tả IXSCAN Hình 8, cột hàng đầu mục trình tối ưu hóa khai thác PRODUCT_NUMBER, khơng cung cấp thứ tự cần thiết cho phép nối quét kết hợp Do đó, nút SORT thêm vào bên phép nối để bắt tuân theo thứ tự Như nói trên, đầu vào có thứ tự cần thiết cho phép nối quét kết hợp, lại không cần thiết cho phép nối vịng lặp lồng Vì vậy, so sánh với phép nối vòng lặp lồng nhau, phép nối qt kết hợp phải chịu chi phí xếp đầu vào Tuy nhiên, lợi ích phép nối quét kết hợp bảng bên bị quét nhiều lần bị quét với phép nối vịng lặp lồng Vì vậy, định chọn phương thức nối nào, trình tối ưu hóa cân đối chi phí xếp lợi ích hiệu cho việc quét bảng bên để điều chỉnh định Một điều đáng ý phép nối qt kết hợp trình tối ưu hóa tránh SORT cách theo dõi "đặc tính thứ tự" liệu Ví dụ, tránh SORT bảng bên bảng bên quét thông qua mục với CUST_TOTAL CUST_TOTAL_QUANTITY làm cột hàng đầu Thơng thường, trình tối ưu hóa chọn phép nối quét kết hợp giá trị cardinality đầu vào bên ngồi rõ ràng khơng nhỏ khơng có phương thức truy cập hiệu cho bảng Về đầu trang Một nghiên cứu sâu sử dụng thích truy vấn Phần minh họa cách thích truy vấn Query Tuner biểu đồ đường dẫn truy cập giúp bạn phân tích đường dẫn truy cập hiệu SQL Liệt kê có chứa câu lệnh SQL phép nối ba hướng giống sử dụng Liệt kê để giới thiệu khái niệm đường dẫn truy cập thực truy vấn Liệt kê Truy vấn mẫu để minh họa khả thích truy vấn hiển thị Hình select c.gender_code, c.marital_status_code, sum(od.unit_cost * cust_quantity) from cust_customer c, cust_order_header oh, cust_order_detail od where c.cust_code = oh.cust_code and oh.cust_order_number = od.cust_order_number and c.cust_prov_state_code = 'CA' and od.product_number in (154110, 129170, 129150, 129110, 129140, 130130) group by c.gender_code, c.marital_status_code Hình minh họa hàm thích truy vấn Optim Query Tuner, định dạng câu lệnh SQL cho tham khảo bảng mệnh đề FROM biến vị ngữ mệnh đề WHERE lấy dòng Các biến vị ngữ xếp lại tạo lại nhóm dựa loại biến vị ngữ (cục phép nối) tham khảo bảng Hình Ví dụ định dạng truy vấn thích (Xem ảnh lớn Hình 9.) Hình thể cách hàm định dạng thích tạo cho câu lệnh dễ hiểu Ba bảng tham khảo (CUST_ORDER_DETAIL, CUST_CUSTOMER, CUST_ORDER_HEADER) hiển thị ba dòng khác Mỗi bốn biến vị ngữ hiển thị dòng khác nhau, với hai biến vị ngữ cục hiển thị trước hai biến vị ngữ nối Ngoài định dạng dễ đọc, bạn truy cập vào thích nhằm cung cấp thơng tin thống kê quan trọng để làm cho việc phân tích hiệu SQL bạn dễ dàng Giá trị cardinality bảng (về số ghi lẫn số trang) số đánh giá hàng đủ điều kiện theo quyền tham khảo bảng Số có liên quan đến QUALIFIED_ROWS biểu diễn số đánh giá ghi giúp tất biến vị ngữ cục tham khảo bảng đủ điều kiện Ví dụ, bảng CUST_ORDER_DETAIL đánh giá để trả 8,000001 số 560.273 ghi sau áp dụng biến vị ngữ cục Tương tự vậy, có 729,99976 số 31.284 ghi giúp biến vị ngữ cục cho bảng CUST_CUSTOMER đủ điều kiện Vì khơng có biến vị ngữ cục cho CUST_ORDER_HEADER, nên tất 539.526 hàng tồn Thơng tin dẫn đến hiểu biết cách chọn bảng hàng đầu chuỗi nối — số hàng đủ điều kiện nhỏ, có nhiều khả trình tối ưu hóa chọn bảng làm bảng hàng đầu chuỗi nối Như Hình 1, trình tối ưu chọn bảng CUST_ORDER_DETAIL làm bảng hàng đầu chuỗi nối phải tạo tám ghi sau áp dụng biến vị ngữ cục Trong đường dẫn truy cập, tham khảo bảng thứ hai (CUST_ORDER_HEADER) tham khảo bảng thứ ba (CUST_CUSTOMER) chuỗi nối truy cập thông qua mục phù hợp hồn tồn Đó là, đầu dị tham khảo bảng thứ hai tham khảo bảng thứ ba định vị có hiệu ghi phù hợp với điều kiện nối Vì vậy, đường dẫn truy cập thực đường dẫn thực tốt miễn đánh giá với QUALIFIED_ROWS tham khảo bảng (CUST_ORDER_DETAIL) xác Để hiểu vấn đề cách trình tối ưu hóa tính tốn QUALIFIED_ROWS xác nào, xem lại Hình Lưu ý có biến vị ngữ cục cho CUST_ORDER_DETAIL, biến vị ngữ danh sách IN cột PRODUCT_NUMBER, có sáu phần tử danh sách (od.product_number (154110, 129170, 129150, 129110, 129140, 130130)) Chú thích truy vấn cho biến vị ngữ cho thấy hệ số lọc biến vị ngữ (FF) 0,000014, 0,0014% Đó là, tỷ lệ phần trăm hàng đánh giá giúp biến vị ngữ đủ điều kiện 0,0014% Đánh giá với QUALIFIED_ROWS thu cách nhân giá trị cardinality bảng (560.273 ghi) với hệ số lọc biến vị ngữ (0,0014%) Để hiểu cách trình tối ưu hóa kết thúc với hệ số lọc 0,0014%, trước tiên nhìn vào sáu phần tử biến vị ngữ danh sách IN Chú thích truy vấn cho biến vị ngữ cho thấy có 273 giá trị khác cột PRODUCT_NUMBER Giả sử phân bố đồng đều, trình tối ưu hóa thơng thường kết luận 2,197% (6/273 = 0,02197) ghi giúp biến vị ngữ đủ điều kiện Nhưng thay vào đó, sử dụng 0,0014% Điều xảy với độ chọn lọc biến vị ngữ tốt nhiều so với giá trị có nó! Để hiểu điều này, xem MAXFREQ thích truy vấn cho biến vị ngữ Khi thu thập số liệu thống kê cần thiết có sẵn, MAXFREQ cho biết tần số giá trị xuất thường xuyên cột Trong ví dụ này, 3,32%, cao nhiều so với tỷ lệ phần trăm trung bình cho giá trị (1/273 = 0,366%) Điều cho thấy số 273 giá trị có sai lệch thấp Số liệu thống kê có sẵn cột giúp tiết lộ thực xảy Bạn thu số liệu thống kê từ mô tả bảng nút bảng biểu đồ đường dẫn truy cập Để xem mô tả bảng, nhấn chuột phải vào nút bảng biểu đồ đường dẫn truy cập Hình 10 cho thấy mơ tả bảng CUST_ORDER_DETAIL Hình 10 Một đoạn biểu đồ đường dẫn truy cập hiển thị Hình (Xem ảnh lớn Hình 10.) Bằng cách truy vấn ngược xuống số liệu thống kê cột mơ tả bảng, bạn phát sáu phần tử biến vị ngữ danh sách IN ngẫu nhiên sáu giá trị số liệu thống kê tần số Khi thêm giá trị tần số này, bạn kết thúc với hệ số lọc (được đánh giá) xác 0,0014%, với biến vị ngữ danh sách IN Vì vậy, điều giải thích cách trình tối ưu xác định hệ số lọc 0,0014% Ngoài ra, lưu ý dấu thời gian để thu thập số liệu thống kê hiển thị mô tả bảng cho thấy ngày gần liên quan đến thời gian giải thích truy vấn Đánh giá trình tối ưu hóa gần với giá trị thực tế miễn việc phân phối liệu không thay đổi kể từ RUNSTATS cuối Giả sử trường hợp nghiên cứu này, đường dẫn truy cập coi tối ưu với độ tin cậy cao Về đầu trang Kết luận Bài mô tả khái niệm đường dẫn truy cập cách đọc biểu đồ đường dẫn truy cập Các khả biểu đồ đường dẫn truy cập thích truy vấn Optim Query Tuner sử dụng để xem xét truy vấn thực tế giải thích cách lý trình tối ưu hóa lại chọn đường dẫn truy cập cụ thể Thông tin cung cấp khối xây dựng cần thiết cho bạn để bắt đầu với việc điều chỉnh truy vấn Các sau loạt cung cấp thêm thông tin phương pháp luận mà bạn sử dụng để điều chỉnh truy vấn ... cao Về đầu trang Kết luận Bài mô tả khái niệm đường dẫn truy cập cách đọc biểu đồ đường dẫn truy cập Các khả biểu đồ đường dẫn truy cập thích truy vấn Optim Query Tuner sử dụng để xem xét truy. .. thức truy cập hiệu cho bảng Về đầu trang Một nghiên cứu sâu sử dụng thích truy vấn Phần minh họa cách thích truy vấn Query Tuner biểu đồ đường dẫn truy cập giúp bạn phân tích đường dẫn truy cập. .. Project Explorer Về giải pháp điều chỉnh truy vấn Optim Các giải pháp điều chỉnh truy vấn Optim cung cấp môi trường để nhận biết điều chỉnh việc thực câu lệnh SQL không chạy với lời khun cơng