oracle中如何將表緩存到內(nèi)存中
10年積累的成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先制作網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有臨滄免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
由于在一些靜態(tài)資料表在數(shù)據(jù)庫(kù)中被頻繁的訪問,所以可以考慮將這些數(shù)據(jù)量不大的表緩存到內(nèi)存當(dāng)中。
共有2種方法:
例:將fisher表緩存到內(nèi)存中
1)altertable fisher cache; 2)altertable fisher storage(buffer_pool keep); --取消緩存 1)altertable fisher nocache;2)altertable fisher storage(buffer_pooldefault); selecttable_name,OWNER,cache,buffer_pool fromdba_tables where table_name='FISHER'; --查看是否緩存 select* from dba_segments where segment_name='FISHER' ; --查看表大小
兩者區(qū)別:
1) cache是將表緩存到share pool 中,該操作直接將表緩存的熱端,受LRU算法控制。
2)將表緩存到一個(gè)固定的內(nèi)存空間中,默認(rèn)情況下buffer_pool空間為0,。需手動(dòng)設(shè)置空間大小。
alter system set db_keep_cache_size=50M scope=both sid=‘*';
mysql 新設(shè)置用戶或更改密碼后需用flush privileges刷新MySQL的系統(tǒng)權(quán)限相關(guān)表;而oracle中更改user的數(shù)據(jù)后會(huì)立即生效,不需要刷新。
物化視圖建立的時(shí)候可以定義刷新方式,一般有: refresh fast 和 refresh complete之分,前者是只更新主表中變化的記錄(主表必須建立materialized view log),而后者是把MV里面的數(shù)據(jù)全部更新。此外,更新方式還可以有:on demand, on commit, on force之分. on commit是及時(shí)更新。其實(shí)用戶創(chuàng)建materialized view的時(shí)候可以指定更新頻率,給你個(gè)例子
CREATE Materialized View mv_terminal
REFRESH FAST
NEXT SYSDATE + 30/(24*60)
AS
SELECT * FROM ........
這個(gè)MV每30分鐘刷新一次,只刷新改變的數(shù)據(jù)
ALTER SYSTEM FLUSH SHARED_POOL
這個(gè)語(yǔ)句清除SGA中的 shared pool,shared pool存儲(chǔ)下面的信息:
1、數(shù)據(jù)字典
2、Shared SQL PL/SQL,存儲(chǔ)過程、函數(shù)、包以及觸發(fā)器
但是有一點(diǎn)要清楚的是假如這些對(duì)象正在使用時(shí)是無法清除的。
REFRESH?FAST
ON?DEMAND
START?WITH?SYSDATE
TRUNC(sysdate)?+?1+?(1/24)?
NEXT?TRUNC(sysdate)+1+13/24
-- 加入緩存.
SQL ALTER TABLE a CACHE;
Table altered.
-- 取消加入緩存.
SQL ALTER TABLE a NOCACHE;
Table altered.