TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 1(30).2009
59
ỨNG DỤNG KHUNG NHÌN THỰC
ĐỂ NÂNG CAO TỐC ĐỘ THỰC THI TRUY VẤN
APPLICATION OF THE MATERIALIZED VIEWS TO IMPROVE
THE QUERY EXECUTION SPEED
Nguyễn Trần Quốc Vinh
Trường Đại học Kinh tế, Đại học Đà Nẵng
TÓM TẮT
Khung nhìn thực (materialized view, KNT) có thể cho phép thực thi các truy vấn phức
tạp trên các cơ sở dữ liệu với dung lượng hàng terabytes trong vài giây hoặc phần nhỏ của
giây, nhưng nó ít được biết đến và ít được ứng dụng. Dù KNT có thể giúp nâng cao đáng kể
năng suất của hệ thống, nhưng không phả i trong mọi trường hợp. Bài viết này giới thiệu về
KNT và đề nghị giải pháp thực hiện một phần ý tưởng KNT trong các hệ quản trị cơ sở dữ liệu
không hỗ trợ KNT, cũng như khắc phục nhược điểm không có khả năng thực hiện cập nhật gia
tăng một số KNT trong một số hệ quản trị cơ sở dữ liệu có hỗ trợ KNT.
ABSTRACT
Materialized views can allow to execute the complex queries upon the large database in
a few seconds or less, they are not well known and that application is not popular. Even though
materialized views can help to significantly improve the performance of the systems, but not for
all cases. This paper introduces the materialized views, and offers the useful solution to carry
out a part of the idea of the materialized views in the database management systems not
supporting the materialized views, and to overcome the weakness of the inability to increase
undates on some systems supported by the materialized views.
1. Đặt vấn đề
KNT không cho phép nâng cao năng suất trong tất cả các trường hợp, hiệu quả
ứng dụng chúng có thể giảm đi rõ rệt nếu thường xuyên xảy ra thay đổi dữ liệu trong
các bảng gốc sử dụng để tạo KNT (hay KNT sử dụng). Nghĩa là, lợi ích sử dụng KNT
Ý tưởng ứng dụng KNT – kết quả thực thi được giữ lại của các truy vấn, xuất
hiện từ những năm 80 của thế kỷ trước, nhưng KNT chỉ được triển khai thực tế cách
đây không lâu trong các phiên bản cuối cùng của một số HQT CSDL thương mại như
Oracle, MS SQL Server, IBM DB2. KNT được tạo ra với ý tưởng ban đầu là một công
cụ hỗ trợ cho các kho dữ liệu và các hệ thống hỗ trợ ra quyết định. Tuy nhiên, nó có thể
được ứng dụng cho bất kỳ CSDL nào.
Một ví dụ điển hình về tính hiệu quả của việc ứng dụng KNT. Một tập đoàn có
nhiều đại diện tại nhiều vùng thuộc nhiều quốc gia cung cấp cho nhiều khách hàng khác
nhau một số lượng lớn các sản phẩm. Như vậy, CSDL trung tâm của tập đoàn này có
thể chứa hàng triệu hoặc hơn bản ghi về chi tiết bán hàng. Bây giờ, người ta cần thống
kê số lượng sản phẩm được bán cũng như tổng doanh thu cho từng loại sản phẩm tại
mỗi vùng theo quốc gia. Truy vấn được thực thi và kết quả được trả lại sau một khoảng
một thời gian T
1
nào đó. Kết quả này được lưu lại trong một bảng – KNT bao gồm 200
bản ghi. Sau này, mỗi khi xuất hiện truy vấn đó, thay vì thực thi lại từ đầu bằng việc
quét và xử lý hàng triệu bản ghi, HQT CSDL đọc bảng KNT chứa chỉ 200 bản ghi và trả
lại kết quả trong khoảng thời gian T
2
(thường rất nhỏ so với T
1
Có những thống kê rất hiếm khi được thực hiện, và chúng rất “nặng” trên khối
lượng dữ liệu lớn, chúng có thể được thực hiện trong chế độ trì hoãn. Nhưng có những
), thường là vài ms.
Thậm chí, KNT có thể được dùng để trả lời các truy vấn tương tự nhưng cho trường hợp
cả thế giới, hoặc một vài vùng nào đó, hoặc trường hợp chỉ cần tính hoặc doanh thu
hoặc số lượng sản phẩm. Tính năng này được gọi là viết lại truy vấn (query rewrite) [1].
Trong các HQT CSDL thương mại, các truy vấn được so sánh và viết lại như thế nào là
điều hầu như không được phổ biến. Bài viết [3] đưa ra một số kỹ thuật so sánh truy vấn
để xác định sự tương đồng, cũng như sự bao phủ giữa các truy vấn với nhau. Các kỹ
5
,… trong khi kết quả thực thi
các truy vấn Z
3
, Z
6
Sử dụng KNT vi phạm một số yêu cầu của lý thuyết thiết kế CSDL, chẳng hạn,
vi phạm tính dư thừa và các bất thường, và nó đòi h ỏi chi phí duy trì. Tuy nhiên, một
khi các “tác hại” của nó là rất nhỏ so với “lợi ích” do nó mang lại, thì chúng ta có thể
chấp nhận các “tác hại” đó. Các ưu điểm ứng dụng KNT bao hàm trong việc nâng cao
năng suất hệ thống thông tin nhờ:
,… được lấy
từ các KNT.
- Rút ngắn thời gian thực thi các truy vấn;
- Giảm số lượng các lần đọc/ghi vật lý, bởi vì khối lượng dữ liệu cần xử lý giảm;
- Giảm tải bộ vi xử lý trung tâm và tài nguyên nói chung;
- Giảm khối lượng thao tác nối, sắp xếp cũng như tính các hàm tổng hợp.
Vấn đề sử dụng các KNT để trả lời các truy vấn [4, 5] nhận được sự quan tâm
đáng kể dưới dạng ứng dụng chúng trong nhiều ứng dụng quản trị dữ liệu, chẳng hạn
như trong liên kết dữ liệu, tron g các kho dữ liệu, trong thiết kế web, trong tối ưu hoá
truy vấn và thậm chí, KNT được ứng dụng trong bài toán cập nhật các KNT. Khi ứng
dụng KNT, HQT CSDL phải giải quyết bài toán được định dạng như sau: cho một truy
vấn trên một lược đồ CSDL và tập hợp các KNT trên chính lược đồ CSDL đó, có thể sử
dụng các KNT để trả lời truy vấn đó hay không.
Hình 1. Nguyên tắc ứng dụng KNT
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 1(30).2009
62
Truy vấn tính tổng doanh thu cho từng khách hàng theo từng vùng trên CSDL
trong SQL Server 2005 sau đây phần nào minh hoạ sức mạnh của KNT ( gọi là indexed
gốc. Thời gian cập nhật bảng ChiTietBanHang lúc này giao động từ 2 – 3ms, so với xấp
xỉ 1ms khi chưa có KNT. Tuy nhiên, SQL Server không thể thực hiện cập nhật gia tăng
cho mọi KNT. Khi không thể thực hiện cập nhật gia tăng, HQT CSDL sẽ thực hiện cập
nhật toàn phần.
Chẳng hạn, Oracle 11g chỉ có thể cập nhật theo phương pháp cập nhật hoàn toàn
KNT trên cơ sở truy vấn để tính tổng thành tiền cho từng khách hàng theo từng vùng
(tạm gọi là Q_TongTheoKhachHang):
SELECT a.QuocGia_Vung, b.KhachHang_ID, SUM(c.SoLuong*d.DonGia) AS Total FROM
SH.QUOCGIA a INNER JOIN SH.KHACHHANG b ON a. QuocGia_ID = b.QuocGia_ID
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 1(30).2009
63
INNER JOIN SH.BANHANG c ON b.KhachHang_ID = c.KhachHang_ID INNER JOIN
SH.BANGGIA d ON c.SanPham_ID = d.SanPham_ID AND c.ThoiGian_ID = d.ThoiGian_ID
GROUP BY a.QuocGia_Vung, b.KhachHang_ID.
Các bảng QUOCGIA, KHACHHANG, BANHANG và BANGGIA có số lượng
bản ghi tương ứng là 23, 55.500, 918.843 và 82.112. Thời gian thực thi truy vấn là 5.42s
(đo thời gian thực thi bằng lệnh SET TIMER ON). Thời gian cần thiết để cập nhật một
bản ghi trong bảng BANHANG xấp xỉ 1ms.
Khi KNT đã được cập nhật, Oracle có thể sử dụng nó để trả lời các truy vấn,
chẳng hạn các truy vấn tương đương với truy vấn Q_TongTheoKhachHang nhưng có
cách viết khác ; hoặc truy vấn Q_TongTheoKhachHang có thêm điều kiện WHERE
a.QuocGia_Vung = ‘Americas’;
hoặc truy vấn tính tổng thành tiền theo từng vùng sẽ có thời
gian thực thi xấp xỉ 0 ms. Đó là kết quả làm việc của chức năng viết lại truy vấn.
Khi KNT được tạo ra với thông số
REFRESH ON COMMIT, Oracle thực hiện việc cập nhật KNT giống như một phần của
giao tác thực thi cập nhật bảng gốc. Thời gian thực hiện lệnh sửa đổi dữ liệu trong các
bảng gốc sẽ bằng thời gian cập nhật KNT, xấp xỉ 5.4s. Điều đó chứng tỏ KNT này được
Oracle cập nhật theo phương pháp cập nhật hoàn toàn. Một khi KNT được cập nhật sau
khi có sự thay đổi dữ liệu trong các bảng gốc, thời gian thực thi truy vấn
TMV_TongTheoKhachHang – kết quả thực thi truy vấn Q_TongTheoKhachHang luôn
luôn tương ứng với các thay đổi dữ liệu trong các bảng gốc. Vì thời gian thực thi các
bẫy sự kiện này là rất nhỏ, nên thời gian thực thi việc cập nhật dữ liệu trong các bảng
gốc cũng rất nhỏ, và thường người dùng không nhận thấy sự khác biệt so với khi không
có chúng. Trong trường hợp này, có thể nói “KNT” TMV_TongTheoKhachHang của
chúng ta được cập nhật gia tăng trong chế độ ON COMMIT.
Bước 3. Vì các HQT CSDL này thông thường không có chức năng viết lại truy
vấn, rõ ràng, các cách viết khác nhau của một truy vấn sẽ được HQT CSDL hiểu là các
truy vấn khác nhau. Lập trình viên phải thực hiện công việc viết lại truy vấn. Chỉ những
truy vấn nào được viết lại hướng tới các bảng KNT một cách rõ ràng mới có thể sử dụng
KNT. Trong các chương trình ứng dụng, thay vì sử dụng truy vấn
Q_TongTheoKhachHang, chúng ta sử dụng truy vấn sau đây:
SELECT QuocGia_Vung, KhachHang_ID, Total FROM TMV_TongTheoKhachHang.
Và truy vấn tính tổng thành tiền theo từng vùng sẽ là:
SELECT QuocGia_Vung, SUM(Total) AS SUM_Total
FROM TMV_TongTheoKhachHang GROUP BY QuocGia_Vung.
Cũng giống như trường hợp các truy vấn Q_TongTheoKhachHang được thực thi
một khi KNT trên cơ sở truy vấn đó đã đư ợc cập nhật, các truy vấn trên bảng
TMV_TongTheoKhachHang sẽ được thực thi trong thời gian xấp xỉ 0ms. Tuy nhiên,
trong trường hợp này thời gian thực thi cập nhật “KNT” nhỏ hơn nhiều, hầu như không
đáng kể. Trên đây tác giả đã chỉ ra, các HQT CSDL Oracle và MS SQL Server không
thể thực hiện cập nhật gia tăng đối với nhiều truy vấn, chẳng hạn trường hợp truy vấn
Q_TongTheoKhachHang. KNT tương ứng được cập nhật hoàn toàn với thời gian cập
nhật KNT xấp xỉ thời gian thực thi lại truy vấn. Cho dù truy vấn có phức tạp bao nhiêu
và thực thi trên các bảng lớn bao nhiêu chăng nữa, với giải pháp sử dụng các bẫy sự
kiện, lập trình viên có thể thực hiện cập nhật gia tăng cho bất kỳ “KNT” nào. Việc cập
nhật gia tăng này chiếm không đáng kể tài nguyên của hệ thống. Cách thức này có thể
được áp dụng để khắc phục hạn chế thời gian cập nhật cao tương đương thời gian thực
thi truy vấn khi buộc phải thực thi cập nhật hoàn toàn trong các HQT CSDL Oracle 11g
và MS SQL Server 2005. Tuy nhiên, khi đó tính năng viết lại truy vấn của chúng sẽ bị
trợ KNT bằng cách sử dụng các bẫy sự kiện. Thậm chí, cách thức này có thể
được áp dụng để khắc phục hạn chế của các HQT CSDL Oracle và MS SQL
Server trong thời gian cập nhật cao tương đương thời gian thực thi truy vấn. Tuy
nhiên, khi đó tính năng viết lại truy vấn của chúng sẽ bị mất đi, lập trình viên
phải thực hiện chức năng viết lại truy vấn thay cho HQT CSDL.
TÀI LIỆU THAM KHẢO
[1] T. Kyte. Expert one-on-one Oracle. Apress, 2003.
[2] T. Rizzo, A. Machanic, J. Skinner, L. Davidson, R. Dewson, J. Narkiewicz, J.
Sack, R. Walters. Pro SQL Server 2005. Apress, 2006.
[3] Quoc Vinh Nguyen Tran, A.B. Kungurtsev, Blashko A.A. Comparison of queries
in relational databases to construct materialized views. Праці УНДІРТ. Одеса,
2004. – 3(39). – с. 35-38.
[4] A.Y. Levy. Answering Queries Using Views: A Survey //
www.cs.washington.edu/homes/alon/site/files/view-survey.ps
[5] A.Y. Levy, A.O. Mendelzon, Y. Sagiv. Answering Queries Using Views //
. (17/01/2009).
www.cs.washington.edu/homes/alon/site/files/pods95-views.ps
[6] High precision time measuring in SQL Server 2005 with the help from CLR and
unsafe code. 35688.aspx.
(11/12/2008).
. (17/01/2009).