Ⅰ oracle result_cache 有效期
oracle11g的result cache小結(一)
11G result cache緩存結果集的新特性,是一個非常適合只讀、讀>>寫、典型OLTP等系統的功能。oracle的result cache
分為client query cache result和server query cache result
sql> show parameter result
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
client_result_cache_lag big integer 3000
client_result_cache_size big integer 0
result_cache_max_result integer 5
result_cache_max_size big integer 85024K
result_cache_mode string FORCE
result_cache_remote_expiration integer 0
SQL>
關於Server Result Cache的幾個重要參數
result_cache_mode:
該參數是最為重要的,其屬性有manual和force,auto三種。
manual是默認屬性,也就是說我們要啟用該特性,那麼必須通過hint來實現,不然oracle的優化器是無法認知的,oracle關於result cache的
hint如下:
SQL> SELECT name,version FROM v$sql_hint WHERE name LIKE '%RESULT%';
NAME VERSION
---------------------------------------------------------------- -------------------------
RESULT_CACHE 11.1.0.6
NO_RESULT_CACHE 11.1.0.6
當設置為force時,oracle 優化就能自動識別了,不需要使用hint,相反,如果當設置為force時,同時
你又不想某個sql或應用使用該特性,那麼可以使用NO_RESUIT_CACHE hint來進行避規。
當設置了auto時,優化器將根據大量因素決定是否緩存結果。決定因素包括查詢執行的頻率、生成結果的
成本以及針對底層資料庫對象更改的頻率,目前的穩定性還需要驗證。
result_cache_max_size
該參數控制著使用該特性的內存大小,當該參數設置為0,那麼也就意味著關閉了該特性。
該部分內存是從SGA中分配的,Oracle11g都不會將RESULT_CACHE_MAX_SIZE設置為超過
SHARED_POOL_SIZE的75%,至於分配的比例關系,metalink提供了如下的數據:
0.25% of MEMORY_TARGET or
0.5% of SGA_TARGET or
1% of SHARED_POOL_SIZE
result_cache_max_result
該參數是控制單個result所能占據query cache的大小比例,注意是一個百分比。
該參數默認是是5%,取值范圍當然是1% ~ 100% 了。
result_cache_remote_expiration
該參數的作用是根據遠程資料庫對象設置緩存過期的時間,默認值為0.
也就是說,默認情況下,遠程資料庫對象不會被進行cache的。
_result_cache_global
顧名思義,該參數肯定是針對Rac集群而設計的,這樣可以大大的降低經典的gc等待。
和Result Cache相關的視圖
SQL> select * from dict where table_name like '%RESULT_CACHE%';
TABLE_NAME COMMENTS
------------------------------ --------------------------------------------------------------------------------
CLIENT_RESULT_CACHE_STATS$ Synonym for CRCSTATS_$
GV$RESULT_CACHE_DEPENDENCY Synonym for GV_$RESULT_CACHE_DEPENDENCY
GV$RESULT_CACHE_MEMORY Synonym for GV_$RESULT_CACHE_MEMORY
GV$RESULT_CACHE_OBJECTS Synonym for GV_$RESULT_CACHE_OBJECTS
GV$RESULT_CACHE_STATISTICS Synonym for GV_$RESULT_CACHE_STATISTICS
V$RESULT_CACHE_DEPENDENCY Synonym for V_$RESULT_CACHE_DEPENDENCY
V$RESULT_CACHE_MEMORY Synonym for V_$RESULT_CACHE_MEMORY
V$RESULT_CACHE_OBJECTS Synonym for V_$RESULT_CACHE_OBJECTS
V$RESULT_CACHE_STATISTICS Synonym for V_$RESULT_CACHE_STATISTICS
9 rows selected
SQL>
V$RESULT_CACHE_STATISTICS:列出各種緩存設置和內存使用統計數據。
這個特殊說明下欄位:
Create Count Success:新建的result cache的數量
Find Count:說明使用result cache的次數
Create Count Failure:說明創建result cache失敗的數量
V$RESULT_CACHE_MEMORY:列出所有的內存塊和相應的統計信息。
V$RESULT_CACHE_OBJECTS:列出所有的對象(緩存的結果和依賴的對象)和它們的屬性。
V$RESULT_CACHE_DEPENDENCY:列出緩存的結果和依賴對象間的依賴詳情。
檢查result cache配置是否生效
1.select dbms_result_cache.status from al;
2.dbms_result_cache.MEMORY_REPORT
3.查看sql執行計劃
注意:
11g的active dataguard的備庫是不能使用result cache的,這是oracle的一個bug,因為涉及到內碼的問題,所以oracle一直沒有修復,result cache目前可以使用在單節點主庫和rac環境。
Ⅱ Oracle資料庫緩存是怎麼回事
我最近也看了一個視頻,相剋軍老師的。http://www.jiagulun.com/thread-2620-1-1.html 甲骨論的,希望可以幫到你。
Ⅲ 如何有效實現依賴Oracle的緩存策略
ASP.NET 中的緩存提供了對SQL依賴項的支持,也就是說當SQL SERVER資料庫中的表或行中的數據被更改後,緩存中的頁面就失效,否則,頁面輸出可一直保留在緩存當中。這確實為程序員提供了方便。但微軟一向很小家子氣,只為使用自家產品SQL SERVER的程序員提供了方便,那些用Oracle資料庫的ASP.NET程序員怎麼辦呢?
其實不用著急,因為ASP.NET中的緩存還提供了對文件依賴項的支持,也就是緩存依賴於某個文件,該文件被修改後,緩存中的頁面就失效。只要巧妙利用ASP.NET的文件依賴項緩存策略和Oracle中的觸發器,就可輕松實現依賴Oracle的緩存策略。思路很簡單,先將頁面的緩存策略設置為依賴某一個文件,再為Oracle中需要依賴的表添加一個觸發器,當表中的數據被更改時,修改緩存所依賴的文件中的內容。
下面以一個小例子來具體說明:
試驗目的:Default.aspx頁面的緩存依賴於Oracle資料庫中SCOTT用戶的DEPT表,該表中數據被更改後,緩存中的頁面失效。緩存的過期時間為120秒。
一、設置網站頁面的緩存依賴於文件TextFile.txt詳見System.Web.Caching.Cache類 Asp.NET緩存 各種緩存依賴二、在Oracle資料庫中創建觸發器
1、觸發器被觸發時執行PL/SQL代碼塊。PL/SQL代碼塊直接讀寫操作系統中的文件,需調用內置的utl_file程序包。這需要先修改Oracle的初始化參數文件INIT.ORA,在其中添加參數utl_file_dir,來指定文件的目錄。修改INIT.ORA文件後,需重啟Oracle資料庫,設置的參數才能生效。
在INIT.ORA文件中添加下面一行內容:
utl_file_dir='E:/CSharp/CacheByOracleDependncy'
也可以設置為utl_file_dir=*,不指定具體目錄,即任何目錄都可以。
如果是Oracle 9i資料庫,還有一種方法也能起到同樣的作用:在sys用戶下創建一個directory目錄(實際上是在sys用戶下的dir$表中增加一個對應的OS_PATH),然後將對該directory對象的讀/寫操作的許可權grant給public。
[sql] view plain
create or replace directory FILEPATH as 'E:/CSharp/CacheByOracleDependncy';grant read on directory FILEPATH to public;這里我使用的是第二種方法。
2、為所依賴的表(SCOTT用戶的DEPT表)創建一個觸發器:當DEPT表中的數據更改後,觸發器就會將當前系統時間寫入TextFile.txt文件中。
[sql] view plain
CREATE OR REPLACE TRIGGER
"SCOTT"."TEST_CACHE_BY_ORACLE_DEPENDNCY" AFTERINSERT
OR UPDATE
OR DELETE OF "DEPTNO", "DNAME", "LOC" ON "SCOTT"."DEPT" DECLAREfile_handle utl_file.file_type;
BEGIN
--打開文件
file_handle := utl_file.fopen('FILEPATH','TextFile.txt','w');--將當前系統時間寫入文件
IF utl_file.is_open(file_handle) THEN
utl_file.put_line(file_handle,to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss'));END IF;
--關閉文件
utl_file.fclose(file_handle);
EXCEPTION
WHEN OTHERS THEN
BEGIN
IF utl_file.is_open(file_handle) THEN
utl_file.fclose(file_handle);
END IF;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END;
如果應用伺服器和資料庫伺服器不是同一台伺服器可能會遇到項目無法成功訪問文件進行依賴的情況:
解決方法詳見ASP.Net訪問網路驅動器(映射磁碟)
Ⅳ ORACLE的大師們。誰幫我解釋一下oracle的緩存,為什麼同一條sql語句第一次和第二次的執行效率不一樣
應該是與執行計劃有關,Oracle執行一個語句要先進行解析分解執行,這需要時間,並把相關結果存儲,再次執行相同語句時就不需要進行解析,從而縮段時間。
舉個例子,比如需要多次在翻頁查找某一行記錄時,在第1次找時要一頁頁地去找,待找到這行記錄時,就可以記住是在第幾頁,第2次找時就可以直接翻到。
Ⅳ oracle 資料庫變慢怎麼分析
1、1、調整數據結構的設計。這一部分在開發信息系統之前完成,程序員需要考慮是否使用ORACLE資料庫的分區功能,對於經常訪問的資料庫表是否需要建立索引等。
2、2、調整應用程序結構設計。這一部分也是在開發信息系統之前完成,程序員在這一步需要考慮應用程序使用什麼樣的體系結構,是使用傳統的Client/Server兩層體系結構,還是使用Browser/Web/Database的三層體系結構。不同的應用程序體系結構要求的資料庫資源是不同的。
3、3、調整資料庫SQL語句。應用程序的執行最終將歸結為資料庫中的SQL語句執行,因此SQL語句的執行效率最終決定了ORACLE資料庫的性能。ORACLE公司推薦使用ORACLE語句優化器(Oracle Optimizer)和行鎖管理器(row-level manager)來調整優化SQL語句。
4、4、調整伺服器內存分配。內存分配是在信息系統運行過程中優化配置的,資料庫管理員可以根據資料庫運行狀況調整資料庫系統全局區(SGA區)的數據緩沖區、日誌緩沖區和共享池的大小;還可以調整程序全局區(PGA區)的大小。需要注意的是,SGA區不是越大越好,SGA區過大會佔用操作系統使用的內存而引起虛擬內存的頁面交換,這樣反而會降低系統。
5、5、調整硬碟I/O,這一步是在信息系統開發之前完成的。資料庫管理員可以將組成同一個表空間的數據文件放在不同的硬碟上,做到硬碟之間I/O負載均衡。
6、6、調整操作系統參數,例如:運行在UNIX操作系統上的ORACLE資料庫,可以調整UNIX數據緩沖池的大小,每個進程所能使用的內存大小等參數。
實際上,上述資料庫優化措施之間是相互聯系的。ORACLE資料庫性能惡化表現基本上都是用戶響應時間比較長,需要用戶長時間的等待。但性能惡化的原因卻是多種多樣的,有時是多個因素共同造成了性能惡化的結果,這就需要資料庫管理員有比較全面的計算機知識,能夠敏感地察覺到影響資料庫性能的主要原因所在。另外,良好的資料庫管理工具對於優化資料庫性能也是很重要的。
ORACLE資料庫性能優化工具
常用的資料庫性能優化工具有:
1、1、ORACLE資料庫在線數據字典,ORACLE在線數據字典能夠反映出ORACLE動態運行情況,對於調整資料庫性能是很有幫助的。
2、2、操作系統工具,例如UNIX操作系統的vmstat,iostat等命令可以查看到系統系統級內存和硬碟I/O的使用情況,這些工具對於管理員弄清出系統瓶頸出現在什麼地方有時候很有用。
3、3、SQL語言跟蹤工具(SQL TRACE FACILITY),SQL語言跟蹤工具可以記錄SQL語句的執行情況,管理員可以使用虛擬表來調整實例,使用SQL語句跟蹤文件調整應用程序性能。SQL語言跟蹤工具將結果輸出成一個操作系統的文件,管理員可以使用TKPROF工具查看這些文件。
4、4、ORACLE Enterprise Manager(OEM),這是一個圖形的用戶管理界面,用戶可以使用它方便地進行資料庫管理而不必記住復雜的ORACLE資料庫管理的命令。
5、5、EXPLAIN PLAN——SQL語言優化命令,使用這個命令可以幫助程序員寫出高效的SQL語言。
ORACLE資料庫的系統性能評估
信息系統的類型不同,需要關注的資料庫參數也是不同的。資料庫管理員需要根據自己的信息系統的類型著重考慮不同的資料庫參數。
1、1、在線事務處理信息系統(OLTP),這種類型的信息系統一般需要有大量的Insert、Update操作,典型的系統包括民航機票發售系統、銀行儲蓄系統等。OLTP系統需要保證資料庫的並發性、可靠性和最終用戶的速度,這類系統使用的ORACLE資料庫需要主要考慮下述參數:
l l 資料庫回滾段是否足夠?
l l 是否需要建立ORACLE資料庫索引、聚集、散列?
l l 系統全局區(SGA)大小是否足夠?
l l SQL語句是否高效?
2、2、數據倉庫系統(Data Warehousing),這種信息系統的主要任務是從ORACLE的海量數據中進行查詢,得到數據之間的某些規律。資料庫管理員需要為這種類型的ORACLE資料庫著重考慮下述參數:
l l 是否採用B*-索引或者bitmap索引?
l l 是否採用並行SQL查詢以提高查詢效率?
l l 是否採用PL/SQL函數編寫存儲過程?
l l 有必要的話,需要建立並行資料庫提高資料庫的查詢效率
SQL語句的調整原則
SQL語言是一種靈活的語言,相同的功能可以使用不同的語句來實現,但是語句的執行效率是很不相同的。程序員可以使用EXPLAIN PLAN語句來比較各種實現方案,並選出最優的實現方案。總得來講,程序員寫SQL語句需要滿足考慮如下規則:
1、1、盡量使用索引。試比較下面兩條SQL語句:
語句A:SELECT dname, deptno FROM dept WHERE deptno NOT IN
(SELECT deptno FROM emp);
語句B:SELECT dname, deptno FROM dept WHERE NOT EXISTS
(SELECT deptno FROM emp WHERE dept.deptno = emp.deptno);
這兩條查詢語句實現的結果是相同的,但是執行語句A的時候,ORACLE會對整個emp表進行掃描,沒有使用建立在emp表上的deptno索引,執行語句B的時候,由於在子查詢中使用了聯合查詢,ORACLE只是對emp表進行的部分數據掃描,並利用了deptno列的索引,所以語句B的效率要比語句A的效率高一些。
2、2、選擇聯合查詢的聯合次序。考慮下面的例子:
SELECT stuff FROM taba a, tabb b, tabc c
WHERE a.acol between :alow and :ahigh
AND b.bcol between :blow and :bhigh
AND c.ccol between :clow and :chigh
AND a.key1 = b.key1
AMD a.key2 = c.key2;
這個SQL例子中,程序員首先需要選擇要查詢的主表,因為主表要進行整個表數據的掃描,所以主表應該數據量最小,所以例子中表A的acol列的范圍應該比表B和表C相應列的范圍小。
3、3、在子查詢中慎重使用IN或者NOT IN語句,使用where (NOT) exists的效果要好的多。
4、4、慎重使用視圖的聯合查詢,尤其是比較復雜的視圖之間的聯合查詢。一般對視圖的查詢最好都分解為對數據表的直接查詢效果要好一些。
5、5、可以在參數文件中設置SHARED_POOL_RESERVED_SIZE參數,這個參數在SGA共享池中保留一個連續的內存空間,連續的內存空間有益於存放大的SQL程序包。
6、6、ORACLE公司提供的DBMS_SHARED_POOL程序可以幫助程序員將某些經常使用的存儲過程「釘」在SQL區中而不被換出內存,程序員對於經常使用並且佔用內存很多的存儲過程「釘」到內存中有利於提高最終用戶的響應時間。
CPU參數的調整
CPU是伺服器的一項重要資源,伺服器良好的工作狀態是在工作高峰時CPU的使用率在90%以上。如果空閑時間CPU使用率就在90%以上,說明伺服器缺乏CPU資源,如果工作高峰時CPU使用率仍然很低,說明伺服器CPU資源還比較富餘。
使用操作相同命令可以看到CPU的使用情況,一般UNIX操作系統的伺服器,可以使用sar –u命令查看CPU的使用率,NT操作系統的伺服器,可以使用NT的性能管理器來查看CPU的使用率。
資料庫管理員可以通過查看v$sysstat數據字典中「CPU used by this session」統計項得知ORACLE資料庫使用的CPU時間,查看「OS User level CPU time」統計項得知操作系統用戶態下的CPU時間,查看「OS System call CPU time」統計項得知操作系統系統態下的CPU時間,操作系統總的CPU時間就是用戶態和系統態時間之和,如果ORACLE資料庫使用的CPU時間占操作系統總的CPU時間90%以上,說明伺服器CPU基本上被ORACLE資料庫使用著,這是合理,反之,說明伺服器CPU被其它程序佔用過多,ORACLE資料庫無法得到更多的CPU時間。
資料庫管理員還可以通過查看v$sesstat數據字典來獲得當前連接ORACLE資料庫各個會話佔用的CPU時間,從而得知什麼會話耗用伺服器CPU比較多。
出現CPU資源不足的情況是很多的:SQL語句的重解析、低效率的SQL語句、鎖沖突都會引起CPU資源不足。
1、資料庫管理員可以執行下述語句來查看SQL語句的解析情況:
SELECT * FROM V$SYSSTAT
WHERE NAME IN
('parse time cpu', 'parse time elapsed', 'parse count (hard)');
這里parse time cpu是系統服務時間,parse time elapsed是響應時間,用戶等待時間
waite time = parse time elapsed – parse time cpu
由此可以得到用戶SQL語句平均解析等待時間=waite time / parse count。這個平均等待時間應該接近於0,如果平均解析等待時間過長,資料庫管理員可以通過下述語句
SELECT SQL_TEXT, PARSE_CALLS, EXECUTIONS FROM V$SQLAREA
ORDER BY PARSE_CALLS;
來發現是什麼SQL語句解析效率比較低。程序員可以優化這些語句,或者增加ORACLE參數SESSION_CACHED_CURSORS的值。
2、資料庫管理員還可以通過下述語句:
SELECT BUFFER_GETS, EXECUTIONS, SQL_TEXT FROM V$SQLAREA;
查看低效率的SQL語句,優化這些語句也有助於提高CPU的利用率。
3、3、資料庫管理員可以通過v$system_event數據字典中的「latch free」統計項查看ORACLE資料庫的沖突情況,如果沒有沖突的話,latch free查詢出來沒有結果。如果沖突太大的話,資料庫管理員可以降低spin_count參數值,來消除高的CPU使用率。
內存參數的調整
內存參數的調整主要是指ORACLE資料庫的系統全局區(SGA)的調整。SGA主要由三部分構成:共享池、數據緩沖區、日誌緩沖區。
1、 1、 共享池由兩部分構成:共享SQL區和數據字典緩沖區,共享SQL區是存放用戶SQL命令的區域,數據字典緩沖區存放資料庫運行的動態信息。資料庫管理員通過執行下述語句:
select (sum(pins - reloads)) / sum(pins) "Lib Cache" from v$librarycache;
來查看共享SQL區的使用率。這個使用率應該在90%以上,否則需要增加共享池的大小。資料庫管理員還可以執行下述語句:
select (sum(gets - getmisses - usage - fixed)) / sum(gets) "Row Cache" from v$rowcache;
查看數據字典緩沖區的使用率,這個使用率也應該在90%以上,否則需要增加共享池的大小。
2、 2、 數據緩沖區。資料庫管理員可以通過下述語句:
SELECT name, value FROM v$sysstat WHERE name IN ('db block gets', 'consistent gets','physical reads');
來查看資料庫數據緩沖區的使用情況。查詢出來的結果可以計算出來數據緩沖區的使用命中率=1 - ( physical reads / (db block gets + consistent gets) )。
這個命中率應該在90%以上,否則需要增加數據緩沖區的大小。
3、 3、 日誌緩沖區。資料庫管理員可以通過執行下述語句:
select name,value from v$sysstat where name in ('redo entries','redo log space requests');查看日誌緩沖區的使用情況。查詢出的結果可以計算出日誌緩沖區的申請失敗率:
申請失敗率=requests/entries,申請失敗率應該接近於0,否則說明日誌緩沖區開設太小,需要增加ORACLE資料庫的日誌緩沖區。
Ⅵ oracle的緩存怎麼清除
altersystemflashbuffer_cache;
Ⅶ 如何通過Oracle的緩沖區內部機制調整性能
在Oracle 8i以前的版本里,當數據塊被從磁碟送進數據緩沖區的時候,數據塊會被自動地放置到最近使用過的數據列表的前部。但是,這種行為從Oracle 8i開始就變了:新數據緩沖區被放置在緩沖區鏈的中部。在調節資料庫的時候,你的目標就是為數據緩沖區分配盡量多的內存,而不會導致資料庫伺服器在內存里分頁。數據緩沖區每小時的命中率一旦低於90%,你就應該為數據塊緩沖區增加緩沖區。
數據塊的存活時間
在調入數據塊之後,Oracle會不停地跟蹤數據塊的使用計數(touch count,也就是說,這個數據塊被用戶線程所訪問的次數)。如果一個數據塊被多次使用,它就被移動到最近使用過的數據列表的最前面,這樣就能確保它會在內存里保存一段較長的時間。這種新的中點插入技術會確保最常使用的數據塊被保留在最近使用過的數據列表的最前面,因為新的數據塊只有在它們被重復使用的時候才會被移動到緩沖區鏈的最前面。
總而言之,Oracle 8i數據緩沖池的管理要比先前的版本更加有效。通過將新的數據塊插入緩沖區的中部,並根據訪問活動(頻率)調整緩沖區鏈,每個數據緩沖區就被分割成兩個部分:熱區(hot section),代表數據緩沖區的最近使用的一半;冷區(cold section),代表數據緩沖區的最早使用的一半。只有那些被反復請求的數據塊才會被移進每個緩沖池的熱區,這就讓每個數據緩沖區在緩沖常用數據塊的時候效率更高。
熱區的大小要用下面的隱藏參數來配置:
_db_percent_hot_default
_db_percent_hot_keep
_db_percent_hot_recycle
Oracle公司作為官方沒有推薦更改這些隱藏參數。只有懂得內部機制和希望調節其數據緩沖區行為的有經驗人員才應該使用這些參數。
找到熱數據塊
Oracle 8i保留著一個X$BH內部查看錶,用來顯示數據緩沖池的相對性能。X$BH查看錶有下列數據列:
Tim:兩次使用之間的時間差,和_db_aging_touch_time參數相關。
Tch:使用計數,它和被使用過_db_aging_hot_criteria次之後從冷區移入熱區直接相關。
由於Tch數據列用來追蹤特定數據塊的使用次數,所以你就能夠編寫一個字典查詢來顯示緩沖區里的熱數據塊——使用計數大於10的數據塊,就像下面這樣:
SELECT
obj object,
dbarfil file#,
dbablk block#,
tch touches
FROM
x$bh
WHERE
tch > 10
ORDER BY
tch desc;
這項高級查詢技術在用於追蹤DEFAULT緩沖池裡的對象時尤其有用。一旦定位了熱數據塊,你就能夠把它們從DEFAULT緩沖池移動到KEEP緩沖池。
完全緩沖資料庫
從Oracle 8i開始,隨著64位定址的出現,你就能夠創建一個完全在數據緩沖區里緩沖的資料庫。現今,任何資料庫通常只用不到20G的內存就能夠被完全緩沖,而更大的資料庫仍然需要部分數據緩沖區。
要利用完全數據緩沖的優勢,就要記住從內存取回數據塊和從磁碟取回數據塊的時間差。對磁碟的訪問時間是以毫秒或者說千分之一秒來計算的,而內存的速度是以納秒或者說十億分之一秒來計算的。因此內存的訪問速度要快三個數量級,即通常要比磁碟的訪問速度塊將近14,000倍。
在完全緩沖Oracle資料庫的時候,你需要仔細制定緩沖的規劃,並在需要的時候增加db_block_ buffers參數的值。在緩沖整個資料庫的時候,多數據緩沖池就不再需要了,所以你可以在DEFAULT數據池裡緩沖所有的數據塊。
如果要計算已分配數據塊的數量,就要用下面的命令:
select
sum(blocks)
from
dba_data_files;
SUM(BLOCKS)
-----------
243260
select
sum(blocks)
from
dba_extents;
SUM(BLOCKS)
-----------
321723
已使用數據塊的真實數量要通過查看DBMS_ROWID以獲得真實的資料庫地址來確定,就像下面這樣:
select
sum(blocks)
from
dba_data_files;
隨著資料庫的擴展,你必須不忘增加參數的值。在資料庫的啟動階段,你需要調用一個腳本載入緩沖區,這一步很簡單,就像執行select count(*) from xxx;這樣的命令,因為資料庫里所有表格都會起作用。這就確保所有的數據塊都被緩沖,從而大幅提高讀取操作的性能。但是,寫操作仍然會需要磁碟I/O。由於內存條的價格在持續下跌,現在只需要較小的或者不需要硬體投資就能夠通過完全緩沖一個較小的資料庫從而顯著地提高性能。
Ⅷ oracle 庫高速緩存和緩沖區緩存 區別
數據高速緩存跟操作系統的緩存類似,其存儲最近從數據文件中讀取的數據塊,其中的數據可以被所有的用戶所訪問。如當我們利用Select語句從資料庫中查詢員工信息的時候,其首先不是從數據文件中去查詢這個數據,而是從數據高速緩存中去查找,而沒有這個必要再去查詢磁碟中的數據文件了。只有在數據緩存中沒有這個數據的時候,資料庫才會從數據文件中去查詢。Oracle資料庫為什麼要如此設計呢?這是由於資料庫在讀取數據的時候,讀取內存的速度比讀取磁碟的速度要快很多倍,所以這種機制可以提高數據的整體訪問效率。
緩沖區緩存
重新啟動資料庫後,系統就會為資料庫分配一些空閑的緩存塊。空閑緩存塊中是沒有任何數據的,他在那邊默默的等著別寫入記錄。當Oracle 資料庫從數據文件中讀取數據後,資料庫就會尋找是否有空閑的緩存塊,以便將數據寫入其中。
一般來說,資料庫在啟動的時候,就會在內存中預先分配這些緩存塊。所以,Oracle資料庫在啟動的時候,會佔用比較多的內存。但是,這可以免去在實際需要時向內存申請的時間。所以,有時候Oracle資料庫雖然已啟動,內存的佔用率就很高,但是,其後續仍然可以正常運行的原因。而其他資料庫雖然剛啟動的時候內存佔用率不是很高,但是,但系統內存到達80%以上時,在進行數據處理就會受到明顯的影響。
Ⅸ 如何清空oracle緩存
在Oracle9i里,Oracle提供了一個內部事件,用以強制刷新Buffer Cache。
其語法為:
alter session set events 'immediate trace name flush_cache level 1';
或者:
alter session set events = 'immediate trace name flush_cache';
類似的也可以使用alter system系統級設置:
alter system set events = 'immediate trace name flush_cache';
在Oracle10g中,Oracle提供一個新的特性,可以通過如下命令刷新Buffer Cache:
alter system flush buffer_cache;