Chương 2 MỘT SỐ NGUYÊN LÝ CHUNG CỦA TỐI ƯU HÓA TRUY VẤN
2.5 Tối ưu hóa truy vấn phân tán
2.5.2 Tối ưu hóa truy vấn trong môi trường tập trung
Ở phần này, hai kỹ thuật tối ưu thông dụng nhất trong các hệ thống tập trung sẽ được giới thiệu. Đây là tiền đề cho các kỹ thuật tối ưu phân tán vì ba lý do:
Câu truy vấn phân tán phải được dịch thành các câu truy vấn cục bộ, và được xử lý theo phương pháp tập trung.
Các kỹ thuật tối ưu phân tán thường là các mở rộng của kỹ thuật tập trung.
Tối ưu hóa tập trung thường đơn giản hơn, do không cần phải quan tâm đến việc phải hạ thấp chi phí truyền dữ liệu.
Hai thuật toán được giới thiệu ở đây được sử dụng bởi 2 hệ thống CSDL:
INGRES và System R, và cả hai hệ thống này đều có phiên bản phân tán.
2.5.2.1 Thuật toán INGRES
INGRES sử dụng thuật toán tối ưu hóa động, nó tách dần câu truy vấn dạng phép tính quan hệ thành các phần nhỏ hơn. Nó là tổ hợp của hai giai đoạn phân
truy vấn “đơn biến” (đơn quan hệ)
Mỗi câu truy vấn được xử lý bởi bộ xử lý truy vấn một biến (OVQP - one variable query processor) bằng cách dùng heuristic để chọn một phương án thực thi, sắp xếp các thứ tự còn lại dựa trên kích cỡ của quan hệ trung gian.
Trong INGRES ngôn ngữ QUEL được sử dụng, nhưng để tạo ra sự nhất quán, thì chúng ta sử dụng tập lệnh SQL để trình bày các thí dụ.
Phân rã:
Biến đổi câu truy vấn q n-biến thành một tập tuần tự q1 →q2 →...→qn, trong đó qi sử dụng kết quả của qi−1
Kỹ thuật tách. Câu truy vấn q được phân tách thành q'→q" dựa trên một quan hệ chung là kết quả của q':
Thay thế bộ. Trước tiên chọn một quan hệ để thay thế, gọi R1 là quan hệ đó.
Với mỗi bộ t1 trong R1, các thuộc tính được tham chiếu trong qđược thay thế bằng các giá trị thực sự trong t1:
1 1 2
2 1 2
1, ,..., ) ( '( , , ,..., ),
(V V V q t V V V t R
q n → n ∈
Vì vậy tổng số các câu truy vấn q' được sinh ra bởi phép thế bộ là card(R1). Thí dụ 2.17:
Vẫn với các quan hệ của thí dụ 1.1, cho câu truy vấn: “ cho biết tên của các nhân viên đang làm việc cho dự án CAD/CAM”
FROM NHANVIEN, PHANCONG, DUAN
WHERE NHANVIEN.MSNV=PHANCONG.MSNV
AND PHANCONG.MSDA=DUAN.MSDA
AND DUAN.TENDA=”CAD/CAM”
q11: SELECT DUAN.MSDA INTO JVAR
FROM DUAN
WHERE DUAN.TENDA=”CAD/CAM”
'
q: SELECT NHANVIEN.TENNV
FROM NHANVIEN, PHANCONG, JVAR
WHERE NHANVIEN.MSNV=PHANCONG.MSNV
AND PHANCONG.MSDA=JVAR.MSDA
q12: SELECT PHANCONG.MSNV INTO GVAR FROM PHANCONG, JVAR
WHERE PHANCONG.MSDA=JVAR.MSDA q13: SELECT NHANVIEN.TENNV
FROM NHANVIEN, GVAR
WHERE NHANVIEN.MSNV=GVAR.MSNV
Áp dụng phép thay thế bộ ta có: q11 là câu truy vấn “đơn biến”, như vây q12và q13 sẽ là đối tượng để thay thế. Với giả sử GVAR chỉ chứa hai bộ <E1> và
<E2> thì q13 sẽ đươc thay thế như sau:
q131: SELECT NHANVIEN.TENNV FROM NHANVIEN
WHERE NHANVIEN.MSNV=”E1”
q132: SELECT NHANVIEN.TENNV FROM NHANVIEN
WHERE NHANVIEN.MSNV=”E2”
quy, áp dụng các phép chọn, các phép chiếu ngay khi có thể bằng kỹ thuật tách.
Các câu truy vấn bất khả giản còn lại sau phép tách sẽ được xử lý bằng phép thay thế bộ. Các truy vấn đơn biến (đơn quan hệ) được tạo ra sẽ do OVQP xử lý, chọn ra đường truy xuất tốt nhất đến quan hệ theo điều kiện tìm kiếm trang truy vấn.
INPUT: MRQ câu truy vấn “đa biến” có n quan hệ OUTPUT: kết quả thực hiện
Begin
φ
← output if n=1 then
) (MRQ run
output← {thực hiện câu truy vấn 1 quan hệ}
else begin
{tách MRQ thành m truy vấn một quan hệ và một truy vấn đa quan hệ}
MRQ MRQ
ORQ
ORQ1,..., m, '← for i←1 to m do begin
) ( ' run ORQi
output← {thực hiện ORQi} '
output output
output← ∪ {trộn tất cả các kết quả lại}
end-for
) ' ( _VARIABLE MRQ CHOOSE
R← {R được chọn cho phép
thế bộ}
for mỗi bộ t∈R do begin
←
"
MRQ thay giá trị cho t trong MRQ’
) ( ' INGRES QOA MRQ"
output← − {gọi đệ qui}
' output output
output← ∪ {trộn tất cả các kết quả lại}
end-for end-if
End.
Với MRQ là truy vấn đa quan hệ (MultiRelation Query), và ORQ là truy vấn một quan hệ (One-Relation Query).
2.5.2.2 Thuật toán của System R
System R sử dụng thuật toán tối ưu hóa tĩnh dựa trên tìm kiếm vét cạn nhờ sử dụng các số liệu thống kê về CSDL.
Nguyên liệu của bộ tối ưu hóa của System R là cây truy vấn do phân rã câu truy vấn SQL mang lại.
ưu”.
Thay vì thực hiện một cách có hệ thống phép chọn, phép nối như trong INGRES, System R chỉ thực hiện điều đó nếu nó dẫn đến một kết quả tốt hơn.
Bộ tối ưu sẽ gán một chi phí (theo thời gian) cho mỗi cây dự tuyển và chỉ giữ lại cây có chi phí thấp nhất. Những cây dự tuyển có được bằng hoán vị các thứ tự nối của n quan hệ trong câu truy vấn nhờ các quy tắc biến đổi hoán vị, kết hợp. Và để hạn chế chi phí dành cho việc tối ưu hóa, số lượng các cây được giảm bớt bằng kỹ thuật quy hoạch động, chỉ có mối nối có chi phí thấp nhất mới được giữ lại, ngoài ra những chiến lược/phương án thực thi phải lấy tích Descartes đều bị loại bỏ ngay có thể.
Thuật toán tối ưu gồm hai bước chính.
Dự đoán phương pháp tốt nhất để truy xuất đến mỗi quan hệ dựa trên một vị từ chọn lựa
Đối với mỗi quan hệ R:
9 Thứ tự nối tốt nhất sẽ được ước lượng 9 Xác định chi phí của mỗi nối
9 Chọn nối có chi phí thấp nhất
Với việc thực thi như vậy có cơ sở cho việc tìm được phương án thực thi tốt.
Khi xét các nối, đối với nối của hai quan hệ thì quan hệ được đọc trước gọi quan hệ ngoài (external relation), còn quan hệ kia, là quan hệ có các bộ được tìm dựa theo các giá trị có được từ quan hệ ngoài sẽ được gọi là quan hệ trong (internal relation). Việc chọn phương pháp nối ở đây là xác định đường truy xuất có chi phí thấp nhất đến quan hệ trong.
Có hai thuật toán, và một trong hai sẽ là tối ưu trong ngữ cảnh đã cho.
Phương pháp thứ nhất “vòng lặp lồng” (nested loops) for each bộ trong quan hệ ngoài (lực lượng n1)
for each bộ trong quan hệ trong (lực lượng n2) Nối hai bộ nếu điều kiện nối được thỏa mãn end
end
trên thuộc tính nối.
Với mỗi bộ của quan hệ ngoài, từng bộ của quan hệ trong thỏa mãn vị từ nối sẽ được truy xuất lần lượt để tạo ra quan hệ kết quả. Một chỉ mục trên thuộc tính nối là một đường truy xuất rất hiệu quả đối với quan hệ trong.
Phương pháp thứ hai “nối trộn” (merge join) 9 Sắp xếp quan hệ theo thuộc tính nối 9 Trộn hai quan hệ
Nếu điều kiện nối là đẳng thức, thì độ phức tạp/chi phí tương ứng với
2
1 n
n + .
Nếu một trong hai quan hệ đều chưa được sắp xếp, thì thuật toán “vòng lặp lồng” sẽ có chi phí tăng đáng kể so với phương pháp “nối trộn”. Nói chung thuật toán nối trộn sẽ hữu ích khi cần nối các quan hệ lớn.
Một phiên bản đơn giản của thuật toán tối ưu hóa sẽ được trình bày ở đây.
Thuật toán gồm hai vòng lặp:
Trước tiên chọn phương pháp truy xuất tốt nhất đến mỗi quan hệ trong câu truy vấn
Xét tất cả các hoán vị có thể của các thứ tự kết nối (có n! hoán vị cho n quan hệ). Các hoán vị được tạo ra bởi cấu trúc động.
Thuật toán tối ưu hóa R (R-QOA) INPUT: QT cây truy vấn có n quan hệ OUTPUT: kết quả thực thi
Begin
for mỗi quan hệ Ri∈QT do begin
for mỗi đường truy xuất APij đến Ri do Xác định cost(APij)
end-for
ij
i AP
AP
best_ ← có chi phí nhỏ nhất
begin
xây dựng strategy(...((best_APi1><Ri2)><Ri3)><...><Rin)
tính chi phí của strategy end-for
strategy
output← có chi phí nhỏ nhất End.
Thí dụ 2.18:
Sử dụng câu truy vấn q1 (trong thí dụ 2.17). Giả sử :
Giả sử NHANVIEN có chỉ số trên MSNV
PHANCONG có chỉ số trên MSDA
DUAN có chỉ số trên MSDA và một chỉ số khác trên TENDA
Hình 2. 20 Đồ thị nối của câu truy vấn q1
Giả sử rằng vòng lặp đầu tiên của thuật toán chọn ra các đường truy xuất một quan hệ như sau:
NHANVIEN: truy cập tuần tự, do không có phép chọn nào trên NHANVIEN
PHANCONG: truy cập tuần tự, do không có phép chọn nào trên PHANCONG
DUAN: truy cập theo chỉ số trên TENDA, do có phép chọn trên DUAN theo TENDA.
Xây dựng cây với các thứ tự nối khác nhau (hình 2.21), ở mức đầu tiên ta chọn được các phương pháp truy cập một quan hệ tốt nhất. Mức thứ hai với mỗi phương án truy cập thì có các phương pháp nối khác nhau, từ đó chọn ra được một thứ tự nối tốt
Mức 1 của cây chỉ ra phương pháp truy xuất một quan hệ tốt nhất. Với mỗi
PHANCONG
NHANVIEN>< và PHANCONG><DUAN có chi phí tương ứng cao hơn so với PHANCONG><NHANVIEN và DUAN ><PHANCONG, thì mức 3 đưa ra hai khả năng còn lại đó là:
((PHANCONG><NHANVIEN)><DUAN)
((DUAN><PHANCONG)><NHANVIEN)
Khả năng thứ 2 sẽ được chọn do có chỉ mục trên thuộc tính chọn và truy xuất trực tiếp các bộ nối PHANCONG và NHANVIEN. Và nó chọn phương pháp truy xuất như sau: chọn DUAN do việc sử dụng chỉ số trên TENDA sau đó được nối với PHANCONG nhờ việc sử dụng tệp chỉ số trên MSDA, rồi tiến hành nối tiếp với NHANVIEN nhờ sử dụng chỉ mục trên MSNV.
Hình 2. 21 Các thứ tự nối khác nhau