Kích thước bộ nhớ được lấy trung bình sau vài lần chạy. Và kết quả chỉ ra rằng khi hệ số chọn nhỏ thì kích thước bộ nhớ đệm thu được là như nhau với cả 2 heuristic. Nhưng khi hệ số chọn lớn thì heuristic 2 sẽ tốt hơn. Ví dụ nếu với hệ số 0.05 thì heuristic 2 cho ra kết quả bộ nhớ đệm chỉ là 38% kích thước bộ nhớ khi sử dụng heuristic 1.
Mô hình xác suất để đo kích thước của danh sách tìm về cũng đã được xây dựng. Trong mô hình này ta giả sử số lượng các trang, mà mỗi trang được nối đến được phân bố đều theo số lớn nhất cho trước. Hệ số chọn càng lớn kéo theo số các trang liền kề có thể càng lớn. Giá trị kích thước trung bình của danh sách tìm về cần thiết để thực hiện nối của các quan hệ, với tổng cộng 30 trang, được đưa ra trong hình
3.8, trong đó Xi là số trung bình các trang trong danh sách tìm về sau khi i trang đã được tìm về. M là số lượng lớn nhất của các trang liền kề. Chúng ta cũng thấy rằng với hệ số chọn càng lớn thì danh sách tìm về cũng càng lớn. Do đó heuristic 2 sẽ có danh sách tìm về lớn hơn, và trang tối ưu cục bộ sẽ được chọn từ đó. Heuristic 1, mặt khác, lựa chọn trang một cách ngẫu nhiên từ danh sách và như vậy với danh sách tìm về lớn thì xác suất để tìm được trang tối ưu sẽ giảm đi.
3.1.5 Lược đồ bộ nhớđệm dựa trên cơ sở lưu trữ toàn bộ trang.
Ở phần trước chúng ta chỉ quan tâm và lưu trữ những bộ nối vào bộ nhớđệm, trong phần này với giả thiết là các bộđược thực hiện nối thẳng từ các trang của các quan hệ. Như vậy toàn bộ trang cần phải được lưu để tránh trường hợp trang phải truy xuất lại. Chúng ta sử dụng cùng mô hình đồ thị kết nối trang ở phần trước để mô tả các phụ thuộc nối giữa các trang, các cạnh của đồ thị không cần phải đánh trọng số. Nếu như kích thước bộ nhớ đệm được cho trước (tức cốđịnh), chúng ta có thể phải truy xuất trang nhiều hơn một lần để nối được với các bộ thích hợp. Rõ ràng với lược đồ này thì chúng ta cần sử dụng ít nhất là bộ nhớđệm 2 trang. Mệnh đề sau sẽ cho chúng ta cận dưới của số lần truy xuất cho bộ nhớđệm 2 trang.
Mệnh đề 3. Với bộ nhớđệm 2 trang cần ít nhất (X+1) truy xuất trang cần thiết, với X là số các cạnh của đồ thị kết nối trang [9].
Chứng minh. Trong tình huống tốt nhất chúng ta có thể thực hiện để mỗi cạnh tương ứng với một truy xuất. Chúng ta cần 2 truy xuất cho cạnh thứ nhất. Như vậy ta cần ít nhất X+1 truy xuất để thực hiện nối, với X là số các cạnh của đồ thị kết nối trang. Nếu tồn tại một đường đi chứa it nhất 1 nút của mỗi cạnh, thì giá trị cực tiểu này có thểđạt được. Chúng ta có thể thu được dãy truy xuất từđường đi này. Như vậy nếu đồ thị là Euler, thì có tồn tại giá trị cực tiểu này. Tuy nhiên kể cả trường hợp ngược lại thì cận dưới này cũng vẫn có thểđạt được.
Nếu đồ thị có 2k nút có bậc lẻ, thì có ít nhất kđường đi không chung cạnh giữa các nút có bậc lẻ, phủ hết các cạnh của đồ thị. Điều đó có nghĩa là chúng ta cần X+k
là đường thừa. Như vậy chúng ta có thểđưa ra kết quả sau cho số lần truy xuất tối ưu cho bộ nhớ đệm 2 trang. Số lần truy xuất tối ưu này là X+k’, với k’ là số nhỏ nhất có thể thu được từ k đường sau khi đã loại bỏ các đường thừa. Bởi vì với k’
đường đi còn lại ta có một dãy truy xuất gồm X+k’ truy xuất. Dãy truy xuất này là tối ưu do chúng ta đã loại bỏđược số lượng tối đa các đường thừa.
Bài toán để tìm được dãy truy xuất này cũng có thể là bài toán NP-Hard, tuy nhiên chúng ta có mệnh đềđể tìm ra một dãy truy xuất gần tối ưu. Chúng ta có thể tìm tập đơn kđường đi và gỡ bỏ các đường dư thừa. Trong trường hợp xấu nhất chúng ta sẽ có một trình tự truy xuất cho X+k truy cập. Độ phức tạp để tìm trình tự này là 0(X), với X là số lượng của các cạnh.
Trong mục này này với giả thiết là bộ nhớ đệm có kích thước cố định cho trước, chúng ta đã xét một dãy truy xuất làm cực tiểu số lần truy xuất. Ở phần tiếp theo chúng ta sẽ xem xét lượng bộ nhớ đệm cần thiết để sao cho mỗi trang chỉ phải truy xuất một lần.
3.1.6 Xác định kích thước bộ nhớđệm để thực hiện một truy xuất cho mỗi
trang
Cận trên của kích thước bộ nhớ đệm đảm bảo cho một truy xuất cho mỗi trang là tổng số các nút trong đồ thị kết nối trang. Ở đây chúng ta sẽ tìm cách để tìm ra một dãy truy xuất yêu cầu bộ nhớđệm nhỏ hơn cận trên này.
Cách tiếp cận như sau, đầu tiên tìm cách tạo ra một đồ thị G’ không chu trình từđồ thị ban đầu. Chọn túy ý một nút của G’ và coi nó là gốc (lúc đó ta gọi G’ là cây). Chúng ta sẽ tìm cận trên của kích thước bộ nhớ đệm cho cây này. Với cận trên này ta có đủ bộ nhớ đệm cần thiết cho mọi dãy truy xuất thu được từ việc duyệt cây (với giả thiết rằng ta thực hiện việc truy xuất ngay từ lần đầu tiên thăm trang). Sau đó ta chọn nút thứ 2 trong G’ coi nó là gốc và lại thực hiện tính toán cận trên. Nút thứ hai này phải là gốc của cây con của cây đầu tiên (cây có giá trị cận trên lớn nhất). Nếu cần thiết, thì ta tiếp tục tính toán cận trên cho các cây tiếp theo.
Các phần tiếp theo sẽ trình bày cách thức tạo G’, cách tìm cận trên cho kích thước bộ nhớ đệm với một cây cho trước và giải thuật tìm cây có cận trên nhỏ nhất cho kích thước bộ nhớđệm.
3.1.6.1 Tạo đồ thị không chu trình từđồ thị kết nối trang ban đầu.
Chúng ta bắt đầu từ việc tạo một đồ thị không chu trình từ đồ thị G ban đầu, theo cách thức sau: Chọn tùy ý một nút khởi tạo từ G, và thực hiện phép duyệt G bằng phép tìm kiếm theo chiều rộng, thêm vào G’ các cạnh và các nút kết thúc (end- nodes) được tìm thấy. Tuy nhiên trong lúc duyệt G thì có thể ta sẽ gặp lại nút đã được lưu trong G’ và ta cần phải lưu nút này lại một lần nữa trong G’, và kết quả là chúng ta thu được G’ không chu trình. Từ G’, với cấu trúc đơn giản hơn nhiều, chúng ta có thể tính được một dãy truy xuất sao cho kích thước bộ nhớ đệm cần thiết là nhỏ. Hình 3.9 là một ví dụ cho đồ thị không chu trình G’ thu được từđồ thị kết nối trang G ban đầu.