【Cache】將常用的“小表”快取到Buffer Cache

Iven_lin發表於2024-04-02
對於那些被經常以全表掃描訪問獲取資料的“小表”來說,為了提升效能可以考慮將這些表cache在Buffer Cache中。
什麼樣的表可以稱其為“小表”呢?例如經常被訪問的參數列,此類表通常包含的資料量並不大,經常以全表掃描的訪問形式對其進行訪問。
如果不強制將這些表cache在Buffer Cache中,這些資料在被使用過後很容易被換出到外存,因為通常這些資料會存放在LRU的“冷端”。

透過這個小文兒給大家演示一下將表cache在Buffer Cache中的方法。
不過注意:這種方法同樣不會保證這些資料永久置於Buffer Cache中。

1.使用USER_TABLES檢視驗證表T是否被Cache
sec@ora10g> select table_name, cache from user_tables where table_name = 'T';

TABLE_NAME CACHE
------------ --------------------
T N

2.簡單的使用alter語句便可將表T快取在Buffer Cache
sec@ora10g> alter table t cache;

Table altered.

3.在此查詢T表的快取情況,可見此時表T已經被快取
sec@ora10g> select table_name, cache from user_tables where table_name = 'T';

TABLE_NAME CACHE
------------ --------------------
T Y

4.如果想“反悔”不想快取表T該如何操作呢?
方法如下:
sec@ora10g> alter table t nocache;

Table altered.

sec@ora10g> select table_name, cache from user_tables where table_name = 'T';

TABLE_NAME CACHE
------------ --------------------
T N

5.小結
使用上述方法可以防止經常被全表掃描的“小表”不會被頻繁的換出到外存,從而提高系統的響應速度。在使用這種方法之前,定位哪些“小表”需要被Cache是很重要的。

相關文章