发布于:2021-02-20 00:00:20
0
109
0
Oracle 21c引入了一种能力,通过启用结果缓存功能来存储查询结果以供重复使用,从而提高了在只读主备数据库上执行的查询的性能—因此不仅在主数据库上启用了此功能,而且在备用数据库上也启用了此功能。
新的Oracle 21c子句RESULT_CACHE(STANDBY ENABLE)可以用作CREATE和ALTER TABLE语句的一部分。
###########################################################################################
Create the Table and Function to test Result Cache
Credit to Tim Hall from Oracle-Base for the function code!
###########################################################################################
SQL> CREATE TABLE demo.tab1 (
id NUMBER
);
INSERT INTO demo.tab1 VALUES (1);
INSERT INTO demo.tab1 VALUES (2);
INSERT INTO demo.tab1 VALUES (3);
INSERT INTO demo.tab1 VALUES (4);
INSERT INTO demo.tab1 VALUES (5);
CREATE OR REPLACE FUNCTION demo.fn_tab1(p_id IN demo.tab1.id%TYPE)
RETURN demo.tab1.id%TYPE DETERMINISTIC AS
BEGIN
DBMS_LOCK.sleep(1);
RETURN p_id;
END;
/
Table created.
SQL> SQL>
1 row created.
SQL>
1 row created.
SQL>
1 row created.
SQL>
1 row created.
SQL>
1 row created.
SQL> SQL>
Function created.
###########################################################################################
First execution of the function - takes 5 seconds as expected
###########################################################################################
SQL> set timing on
SQL> SELECT demo.fn_tab1(id) FROM qrc_tab;
DEMO.FN_TAB1(ID)
----------------
1
2
3
4
5
Elapsed: 00:00:05.04
###########################################################################################
Now add RESULT_CACHE hint
First execution still takes 5 seconds
Subsequent executions takes .01 of a second as Result Cache is being used
###########################################################################################
SQL> select /*+ result_cache */ demo.fn_tab1(id) FROM qrc_tab;
DEMO.FN_TAB1(ID)
----------------
1
2
3
4
5
Elapsed: 00:00:05.00
SQL> select /*+ result_cache */ demo.fn_tab1(id) FROM qrc_tab;
DEMO.FN_TAB1(ID)
----------------
1
2
3
4
5
Elapsed: 00:00:00.01
###########################################################################################
Enable the Result Cache for ADG Standby Database
###########################################################################################
SQL> alter table demo.tab1 RESULT_CACHE (STANDBY ENABLE);
Table altered.
###########################################################################################
Now on Active Data Guard Standby Database Result Cache is also being used
###########################################################################################
SQL> select database_role,open_mode from v$database;
DATABASE_ROLE OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY READ ONLY WITH APPLY
SQL> select /*+ result_cache */ demo.fn_tab1(id) FROM demo.tab1;
DEMO.FN_TAB1(ID)
----------------
1
2
3
4
5
Elapsed: 00:00:05.08
SQL> select /*+ result_cache */ demo.fn_tab1(id) FROM demo.tab1;
DEMO.FN_TAB1(ID)
----------------
1
2
3
4
5
Elapsed: 00:00:00.00
作者介绍