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.1 Tối ưu hóa truy vấn
Ở phần này ta sẽ thảo luận về quá trình tối ưu hóa nói chung, bất kể là trong môi trường tập trung hay phân tán. Câu truy vấn cần tối ưu giả thiết là được diễn tả bằng đại số quan hệ trên các quan hệ CSDL (có thể là các mảnh).
Tối ưu hóa truy vấn là quá trình sinh ra một chiến lược thực thi truy vấn QEP.
Chiến lược được chọn phải hạ thấp tối đa hàm cho phí. Bộ tối ưu được xem là cấu thành bởi ba thành phần: không gian tìm kiếm (search space), mô hình chi phí (cost model), và chiến lược tìm kiếm (search strategy).
Không gian tìm kiếm được xem là tập hợp của các chiến lược phương án thực thi truy vấn khác nhau. Để nêu bật các đặc trưng của bộ tối ưu hóa, chúng ta tập trung vào các cây nối (joint tree), là cây toán tử với các phép toán nối hoặc tích Descartes. Lý do là việc hoán vị thứ tự nối có ảnh hưởng quan trọng nhất đến hiệu năng của các truy vấn quan hệ.
Với N quan hệ, thì ta có O(N!) cây nối tương đương. Việc đánh giá trong một không gian tìm kiếm lớn có thể mất nhiều thời gian có khi còn lớn hơn cả thời gian thực thi thực sự.
Thí dụ 2.15:
SELECT TENNV
FROM NHANVIEN, PHANCONG, DUAN WHERE NHANVIEN.MSNV=PHANCONG.MSNV
AND PHANCONG.MSDA=DUAN.MSDA
Ta có các cây nối tương đương như:
Hình 2. 15 Các cây nối tương đương
Chính vì vậy bộ tối ưu hóa thường tìm cách hạn chế không gian tìm kiếm bằng cách sử dụng các heuristic hay các hạn chế về cây nối. Một số heuristic hay sử dụng là: thực hiện phép chọn, chiếu khi truy xuất đến quan hệ cơ sở, hay việc tránh lấy tích Descartes không được chính câu truy vấn yêu cầu. Trên ví dụ trên thì cây nối cuối cùng (3) không được sử dụng trong không gian tìm kiếm của bộ tối ưu hóa. Các cây nối quan trọng thường được sử dụng là cây tuyến tính, và cây xum xuê. Cây tuyến tính là cây với mỗi nút toán tử có ít nhất một toán hạng là một quan hệ cơ sở. Cây xum xuê thì tổng quát hơn, và có thể có các
các quan hệ trung gian).
Hình 2. 16 Hai hình thái của các cây nối
Trong cây tuyến tính , kích thước của không gian tìm kiếm được rút gọn lại thành O(2N).
2.5.1.2 Chiến lược tìm kiếm
Chiến lược tìm kiếm hay được sử dụng là quy hoạch động (dynamic programming), với tính chất đơn định (deterministic). Các chiến lược này xây dựng các phương án thực thi bắt đầu từ các quan hệ cơ sở, nối thêm nhiều quan hệ tại mỗi bước cho đến khi thu dược các phương án khả thi. Chiến lược quy hoạch động xây dựng phương án khả thi theo chiều rộng (breadth first). Còn chiến lược tham ăn thì lại xây dựng cây theo chiều sâu (depth first). Các chiến lượng vét cạn này đảm bảo tìm ra được các phương án khả thi với một chi phí chấp nhận được khi số quan hệ trong câu truy vấn không lớn.
Tuy nhiên cách tiếp cận này có chi phí quá cao khi số quan hệ trong câu truy vấn lớn hơn 5 hoặc 6. Do vậy các nghiên cứu gần đây đang tập trung vào các chiến lược ngẫu nhiên hóa (randomized strategy), các heuristic để làm giảm độ phức tạp của tối ưu hóa với mục tiêu tìm ra phương án khả thi “tốt”.
Hình 2. 17 Hành động của bộ tối ưu hóa khi áp dụng chiến lược đơn định
lược ngẫu nhiên hóa có hiệu năng tốt hơn các chiến lược đơn định khi truy vấn có chứa khá nhiều quan hệ. Không giống như các chiến lược đơn định, các chiến lược ngẫu nhiên hóa cho phép bộ tối ưu hóa đánh đổi thời gian tối ưu hóa với thời gian thực thi. Chẳng hạn chiến lược ngẫu nhiên hóa, như trong Iterative Improvement [Swami,1989] và Simulated Annealing [Ioannidis and Wong, 1987], tập trung vào việc tìm kiếm lời giải tối ưu xung quanh một số điểm đặc biệt nào đó. Chúng không đảm bảo rằng sẽ tìm ra được lời giải tốt nhất nhưng lại tránh được chi phí quá cao của tối ưu hóa (dựa trên việc tiêu dùng bộ nhớ và thời gian). Trước tiên một hoặc nhiều phương án khởi đầu được xây dựng bởi một chiến lược thiển cận. Sau đó thuật toán tìm cách cải thiện các phương án này bằng cách thăm các lân cận (neighbor) của nó. Một lân cận thu được bằng việc biến đổi ngẫu nhiên một phương án.
Hình 2. 18 Hành động của bộ tối ưu hóa khi áp dụng chiến lược ngẫu nhiên
2.5.1.3 Mô hình chi phí
Mô hình chí phí của bộ tối ưu hóa gồm có các hàm chi phí để dự đoán chi phí của các toán tử, số liệu thống kê, dữ liệu cơ sở và các công thức để ước lượng tính toán các kích thước kết quả trung gian.
Hàm chi phí:
Tổng chi phí = chi phí xuất nhập + chi phí CPU + chi phí truyền Chi phí CPU = chi phí một lệnh CPU * số lệnh CPU
Chi phí xuất nhập = chi phí của một thao tác xuất nhập đĩa * số lần xuất nhập Chi phí truyền = chi phí khởi tạo một thông báo * số thông báo + chi phí truyền một đơn vị dữ liệu * số bytes
Theo những nghiên cứu ban đầu ta thấy trong mạng WAN:
Chi phí xử lý cho việc truyền là cao
Trong mạng LAN:
Chi phí cho xử lý truyền và xử lý cục bộ là gần như nhau
Tỷ số giữa hai tác nhân này là 1:1,6
Khi thời gian đáp ứng truy vấn là hàm mục tiêu của bộ tối ưu hóa, ta cần phải để ý đến vấn đề xử lý cục bộ song song và truyền song song. Công thức tổng quát của thời gian đáp ứng là:
Thời gian đáp ứng = thời gian xử lý của CPU + thời gian xuất nhập + thời gian truyền
Trong đó:
Thời gian xử lý của CPU = thời gian xử lý một lệnh của CPU * seq_#lệnh Thời gian xuất nhập = thời gian cho một xuất nhập + seq_#xuất nhập
Thời gian truyền = thời gian khởi tạo một thông báo * seq_#thông báo + thời gian truyền một đơn vị dữ liệu * seq_#bytes
Với seq_#x (x có thể là các lệnh, các xuất nhập, các thông báo hay các bytes) là số lớn nhất của x phải được thực hiện một cách tuần tự khi thực hiện truy vấn.
Thí dụ 2.16:
Minh họa sự khác nhau giữa tổng chi phí và thời gian đáp ứng, trong đó kết quả được trả lời tại trạm 3, dữ liệu được lấy từ trạm 1 và 2. Để đơn giản chúng ta giả sử rằng chỉ xét đến chi phí truyền
Hình 2. 19 Thí dụ về truyền dữ liệu cho một truy vấn
Giả sử thời gian truyền một đơn vị dữ liệu và thời gian khởi tạo một thông báo được biểu thị theo đơn vị thời gian, ta có:
Tổng thời gian = 2 * thời gian khởi tạo một thông báo + thời gian truyền một
một đơn vị dữ liệu * x, thời gian khởi tạo một thông báo + thời gian truyền một đơn vị dữ liệu * y)
Thời gian đáp ứng tối thiểu đạt được bằng cách tăng mức độ xử lý song song, tuy nhiên không đồng nghĩa với tổng chi phí là tối thiểu, ngược lại tổng chi phí có thể tăng khi có nhiều xử lý cục bộ và truyền song song hơn.
Số liệu thống kê cho việc tối ưu
Một tác nhân ảnh hưởng tới hiệu quả hoạt động của chiến lược thực thi là kích thước của các quan hệ trung gian. Chúng ta cần phải ước lượng kích thước của quan hệ trung gian nhằm làm giảm lượng dữ liệu phải truyền từ trạm này qua trạm khác trong quá trình thực hiện truy vấn. Việc ước lượng này được thực hiện dựa trên các thông số thống kê về quan hệ cơ sở và các công thức dự đoán lực lượng của các kết quả.
Tuy nhiên độ chính xác của các số liệu thống kê càng cao thì chi phí dành cho việc duy trì quản lý chúng càng cao. Với mỗi quan hệ R[A1,A2,...An] được phân mảnh là R1,R2,...Rrta có:
Độ dài (số byte) của mỗi thuộc tính là: length(Ai)
Số lượng các giá trị phân biệt (distinct value) của mỗi thuộc tính trong từng mảnh được ký hiệu: card(ΠAi(Rj))
Ứng với miền của mỗi thuộc tính có các giá trị lớn nhất và nhỏ nhất:
)
max(Ai và min(Ai)
Với miền của mỗi thuộc tính ta có lực lượng của miền: card(dom[Ai])
Số lượng của các bộ trong mỗi mảnh: card(Rj)
Hệ số chọn nối (join selectivity factor) là tỷ lệ các bộ tham gia vào nối, là có giá trị nằm trong khoảng [0…1]:
) (
* ) (
) (
S card R card
S R
SFJ = card ><
Hệ số này càng nhỏ thì độ chọn càng tốt (good selectivity). Và ta cũng có kích thước của một quan hệ R như sau:
Phần này sẽ trình bày công thức ước lượng lực lượng các kết quả của các toán đại số quan hệ như chọn, chiếu , nối,tích Descartes,…
Phép chọn: lực lượng của phép chọn là
) (
* ) ( )) (
( R SF F card R
card σF = S Với :
)) ( ( ) 1
(A value card R SF
A
S = = ∏
) min(
) max(
) ) max(
( A A
value value A
A SFS
−
= −
>
) min(
) max(
) ) min(
( A A
A value
value A
SFS
−
= −
<
)) ( (
* )) ( ( )) ( ) (
(p Ai p Aj SF p Ai SF p Aj
SFS ∧ = S S
)) ( (
* )) ( ( )) ( ( )) ( ( )) ( ) (
(p Ai p Aj SF p Ai SF p Aj SF p Ai SF p Aj
SFS ∨ = S + S − S S
}) ({
* ) (
}) {
(Ai value SF A value card value
SFS ∈ = S =
Trong đó các p(Ai)biểu thị các vị từ trên các thuộc tính Ai
Phép chiếu: Ở đây ta xem như phép chiếu có kèm việc loại bỏ các bộ giống nhau. Một phép chiếu bất kỳ rất khó ước lượng chính xác lực lượng của kết quả trung gian. Tuy nhiên có hai trường hợp đặc biệt có ích nhưng việc ước lượng lại có thể thực hiện dễ dàng. Nếu chiếu của quan hệ R dựa trên một thuộc tính A duy nhất, lực lượng của kết quả trung gian là số bộ thu được khi thực hiện phép chiếu. Nếu một trong các thuộc tính chiếu là khóa thì:
) ( ))
(
( R card R
card ∏A = Tích Descartes:
) (
* ) ( )
(R S card R card S card × =
Phép nối: Không có phương pháp nào để tính toán lực lượng của nối mà không cần thêm thông tin bổ sung. Trường hợp đặc biệt, khi thực hiện phép nối bằng và A là khóa của quan hệ R, B là khóa ngoại của quan hệ S ta có:
) ( )
(R S card S
card ><A=B =
Trong trường hợp tổng quát thì ta cần duy trì hệ số chọn nối trong công thức:
) (
* ) . ( )
(R S SF S A card S
card ><A = SJ Trong đó hệ số chọn của nối nửa là:
]) [ (
) ( ) (
. ( )
( card dom A
S A card
S SF S R
SFSJ ><A = SJ = ∏A
Khi R.A là khóa ngoại của S (S.A là khóa chính) thì hệ số chọn nối nửa là 1, và ta có lực lượng của nối nửa là card(R).
Phép hợp: Rất khó ước lượng lực lượng của phép hợp giữa R và S vì các bộ giống nhau bị loại bỏ trong hợp. Ta sẽ chỉ trình bày công thức tính cận trên và dưới tương ứng là:
) ( )
(R card S card +
)) ( ), (
max(card R card S
Phép lấy hiệu: cũng tương tự như phép hợp ta cũng tính cận trên và dưới Cận trên: card(R−S)=card(R)
Cận dưới: 0