Mô hình chi phí của bộ tối ƣu hoá 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 kích thƣớc kết quả trung gian.
R1 R2 R3 R1 R3 R2
Hình 10 - Hành động của bộ tối ưu hoá khi áp dụng chiến lược ngẫu nhiên
R1 R2 R1 R2 R3 R1 R2 R3 R4
Hình 9 - Hành động của bộ tối ưu hoá khi áp dụng chiến lược đơn định
Tổng chi phí = chi phí xuất nhập + chi phí CPU
Đối với CSDL phân tán chi phí của một chiến lƣợc thực thi có thể đƣợc diễn tả bởi tổng thời gian hoặc thời gian đáp ứng là thời gian tính từ khi bắt đầu đến khi hoàn thành câu truy vấn.
Tổng chi phí = chi phí xuất nhập + chi phí CPU + chi phí truyền
Trong đó :
Chi phí CPU = chi phí xử lý một lệnh của CPU * số lệnh
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
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 quan tâm đế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 đó 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 phải đƣợc thực hiện một cách tuần tự khi thực hiện truy vấn.
Ví dụ 2.2:
Minh hoạ 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
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 đơn vị dữ liệu * (x+y)
Thời gian đáp ứng = max(thời gian khởi tạo một thông báo + thời gian truyền một đơn vi 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 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ề các quan hệ cơ sở và các công thức dự đoán lực lƣợng 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 quan hệ R[A1,A2,…,An] đƣợc phân đoạn là R1, R2,…,Rn ta có :
Độ dài (số byte) của mỗi thuộc tính là: length(A1)
Số lƣợng các giá trị phân biệt (distinct value) của mỗi thuộc tính trong từng đoạn đƣợ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(Aj)
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 đoạn: card(Rj)
Trạm 1
Trạm 2
Trạm 3 x đơn vị
y đơn vị
SFj = ) ( * ) ( ) ( S card R card S R 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:
Size(R) = card(R)*length(R)
Lực lƣợng của kết quả trung gian
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 phép 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à
Card( F(R)) = SFS(F)*card(R)
Trong đó SFS(F) phụ thuộc vào công thức chọn, P(Ai) và P(Aj) biểu thị cho vị từ trên thuộc tính Ai và Aj. SFS(A = value) = )) ( ( 1 A R card SFS(A > value) = ) min( ) max( ) max( A A value A SFS(A < value) = ) min( ) max( ) min( A A A value
SFS(p(Ai) p(Aj)) = SFS(p(Ai)) * SFS(p(Aj))
SFS(p(Ai) p(Aj)) = SFS(p(Ai)) + SFS(p(Aj)) – SFS(p(Ai)) * SFS(p(Aj)) SFS(Ai {value}) = SFS(A=value) * card({value})
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à khoá thì:
Tích Descartes:
Card(R x S) = card(R) * card(S)
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à khoá của quan hệ R, B là khoá ngoại của quan hệ S ta có:
Card(RA=B S) = card(S)
Trong trƣờng hợp tổng quát cần duy trì hệ số chọn nối trong công thức: Card(R S) = SFJ * card(R) * card(S)
Phép nối nửa: Card(R A S) = SFSJ(S.A) * card(S) Trong đó hệ số chọn của nối nửa là:
SFSJ(R A S) = SFSJ(S.A) = ( ) )) ( ( A dom card S card A
Khi R.A là khoá ngoại của S (S.A là khoá 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à:
Card(R) + card(S) 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