情景:
1,小表,没索引,经常访问,都是走全表扫描,带来性能问题
原因:oracle的CBO认为全表扫描的数据重用的概率极小
结果:oracle会将全表扫描的数据都放在data_buffer的LRU队列的队尾(冷端),造成最先被踢出去
解决方法:将这些经常访问的数据,放在LRU队列的队头(热端),缓存在内存(CACHE)中
注意:
1,缓存的表一定是小和经常访问。因为表太大会占满db_buffer,其他用户就不用工作了
2,虽然放在LRU的热端,随着时间推移还是有可能被踢出db_buffer
实验:
SQL> select TABLE_NAME,TABLESPACE_NAME,CACHE from user_tables;
TABLE_NAME TABLESPACE_NAME CACHE
------------------------------ ------------------------------ -----
DEPT USERS N
BONUS USERS N
SALGRADE USERS N
DEPT_TEST3 USERS N
TEST3 USERS N
SYS_TEMP_FBT N
6 rows selected.
SQL> alter table DEPT cache;
Table altered.
SQL> select TABLE_NAME,TABLESPACE_NAME,CACHE from user_tables;
TABLE_NAME TABLESPACE_NAME CACHE
------------------------------ ------------------------------ -----
DEPT USERS Y
BONUS USERS N
SALGRADE USERS N
DEPT_TEST3 USERS N
TEST3 USERS N
SYS_TEMP_FBT N
SQL> alter table DEPT nocache;
Table altered.
SQL> select TABLE_NAME,TABLESPACE_NAME,CACHE from user_tables;
TABLE_NAME TABLESPACE_NAME CACHE
------------------------------ ------------------------------ -----
DEPT USERS N
BONUS USERS N
SALGRADE USERS N
DEPT_TEST3 USERS N
TEST3 USERS N
SYS_TEMP_FBT N
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26465805/viewspace-712654/
,如需转载,请注明出处,否则将追究法律责任。