Sử dụng bộ đệm kết quả (Result Cache) của Oracle để lưu trữ các kết quả truy vấn của SQL được sử dụng thường xuyên, vì vậy chúng có thể được truy xuất nhanh chóng để sử dụng trong tương lai khi cùng một truy vấn đã được thực thi.
Việc sử dụng Bộ đệm kết quả (Result Cache) là lý tưởng cho các bảng có kích thước nhỏ và yêu cầu truy cập thường xuyên. Sử dụng cho các bảng lớn có thể gây ra sự cố. Tuy nhiên, nó sẽ mang lại lợi ích rất lớn trong các bảng nhỏ được truy cập liên tục.
Bộ đệm kết quả (Result Cache) đi kèm với phiên bản Oracle Database 11g Release 1 và được bật theo mặc định.
Chúng ta có thể tìm hiểu trạng thái Bộ đệm kết quả (Result Cache) với truy vấn sau:
SQL> SELECT dbms_result_cache.status() FROM dual;
DBMS_RESULT_CACHE.STATUS()
--------------------------------------------------------------------------------
ENABLED
Sẽ rất hữu ích khi đặt hai tham số quan trọng liên quan đến bộ đệm kết quả (Result Cache). Để tránh tắc nghẽn, bạn phải gán một giá trị như sau cho result_cache_max_size và shared_pool_size. Bạn có thể thiết lập các thông số này theo bộ nhớ của bạn hoặc theo nhu cầu của bạn:
SQL> ALTER SYSTEM SET result_cache_max_size=2G SCOPE=SPFILE;
SQL> ALTER SYSTEM SET shared_pool_size=2G SCOPE=SPFILE;
Sau đó, bạn sẽ cần phải khởi động lại cơ sở dữ liệu.
Để sử dụng Bộ đệm kết quả (Result Cache), bạn cần thêm / * + RESULT_CACHE * / vào truy vấn.
Ví dụ:
SELECT /*+ no_result_cache */ e.class_id, min_fees, max_fees
FROM students e ,jobs j
WHERE e.class_id = j.class_id
GROUP BY e.class_id, min_fees, max_fees;
Kết quả:
19 rows selected.
Elapsed: 00:00:17.20
Ví dụ:
SELECT /*+ result_cache */ e.class_id, min_fees, max_fees
FROM students e ,jobs j
WHERE e.class_id = j.class_id
GROUP BY e.class_id, min_fees, max_fees;
Kết quả:
19 rows selected.
Elapsed: 00:00:01.03
Việc sử dụng bộ đệm kết quả (Result Cache) được cấu hình thủ công theo mặc định. Chúng ta có thể buộc hệ thống sử dụng bộ đệm kết quả (Result Cache) trên tất cả các câu lệnh select bằng cách đặt tham số này là FORCE.
SQL> alter system set result_cache_mode=FORCE scope=both sid='*';
System altered.
Nếu chúng ta đặt tham số RESULT_CACHE_MODE thành FORCE, bộ đệm kết quả (Result Cache) được sử dụng theo mặc định, nhưng chúng ta có thể bỏ qua nó bằng cách sử dụng NO_RESULT_CACHE
Ví dụ:
ALTER SESSION SET RESULT_CACHE_MODE=FORCE;
SELECT slow_function(id) FROM qrc_tab;
SLOW_FUNCTION(ID)
-----------------
1
2
3
4
5
5 rows selected.
Elapsed: 00:00:00.14
SELECT /*+ no_result_cache */ slow_function(id) FROM qrc_tab;
SLOW_FUNCTION(ID)
-----------------
1
2
3
4
5
5 rows selected.
Elapsed: 00:00:05.14