深入淺出sga和pga章節記載-01
今早重新又翻看了eygle的深入淺出的關於sga和pga的章節,對於sga和pga如何設定可以說一直沒有什麼定性的標準,這裡先說一下關於自動管sga和pga管理中參考的兩個檢視v$sga_target_advice和v$pga_target_advice
SQL> desc v$sga_target_advice;
Name Type Nullable Default Comments
------------------- ------ -------- ------- --------
SGA_SIZE NUMBER Y
SGA_SIZE_FACTOR NUMBER Y 此表中的sga_size和當前parameter中sga大小比值
ESTD_DB_TIME NUMBER Y
ESTD_DB_TIME_FACTOR NUMBER Y
ESTD_PHYSICAL_READS NUMBER Y 在該sga_size引數下估計的物理讀次數
SQL> desc v$pga_target_advice;
Name Type Nullable Default Comments
----------------------------- ----------- -------- ------- --------
PGA_TARGET_FOR_ESTIMATE NUMBER Y
PGA_TARGET_FACTOR NUMBER Y
ADVICE_STATUS VARCHAR2(3) Y advice是否可採用on/off,取決於staitiscs_level
BYTES_PROCESSED NUMBER Y 所有程式佔用的資源bytes
ESTD_EXTRA_BYTES_RW NUMBER Y 被估計用於讀和寫的資源佔用
ESTD_PGA_CACHE_HIT_PERCENTAGE NUMBER Y 估計的命中率
ESTD_OVERALLOC_COUNT NUMBER Y 此引數非0則表示pga設定不足夠大
我們完全可以根據上述檢視的幾個列來設定sga和pga的大小,例如根據v$sga_target_advice檢視的estd_physical_reads和sga_size來檢視sga的變化帶來的物理讀次數的變化,或者根據v$pga_target_advice檢視的estd_pga_cache_hit_percentage和pga_target_for_estimate引數,隨著pga的變化帶來的命中率的變化而設定一個合理的數值。
根據oracle的建議,oracle最多可以使用80%實體記憶體,其餘20%給os,在80%的記憶體中,對於OLTP系統分配20%給pga,80%給sga,對於DSS系統,則可以分別分配50%給pga和sga使用,當然需要參考系統的具體業務情況,做awr和statspack統計系統的執行資訊設定合理的引數!
隨便提一下:有網友經常提到資料庫例項都有個誤解的說法,就是資料庫起不來說是例項起不來,例項只是資料庫訪問的一種方式,從結構上說就是sga和oracle後臺程式。
SQL> show sga
Total System Global Area 419430400 bytes
Fixed Size 1249320 bytes
Variable Size 83890136 bytes
Database Buffers 327155712 bytes
Redo Buffers 7135232 bytes
固定sga:
記得以前看官方文件時,sga中的固定部分的fixed size始終不理解具體是個什麼,而eygle深入淺出中理解為資料庫和例項的狀態等通用資訊,後臺程式需要經常訪問這些資訊。
Linux等平臺shmmax核心引數:
記得前些天在linux上安裝oracle時,設定了一個核心引數shmmax,該引數存在於linux/unix作業系統內,shmmax核心引數定義式系統允許的單個共享記憶體段最大值,可以試想如果sga大於shmmax,sga會建立分配於多個共享記憶體段,當然系統中最好將sga分配在一個共享記憶體中。
共享記憶體沒有釋放:後臺程式或者sga設定過大
前些天pub的網友的一個帖子中說到資料庫無法啟動nomount,nomount階段oracle資料庫需要的spfile檔案,這個既然可以保證,那麼就可能是記憶體方面無法分配了,可能由於sga設定過大,超過實體記憶體無法啟動,還有可能是資料庫異常關閉,後臺程式未正常退出,共享記憶體也就沒有及時釋放引起,推過ipcs找出共享記憶體段shared memory id然後ipcrm強制釋放即可!
兩個引數statistics_level和db_cache_advice
在oracle 9I前調整sga的各個元件的大小都需要重新啟動資料庫,oracle 9I後可以動態調整sga的各元件的大小,這裡還是列出檢視v$db_cache_advice和v$shared_pool_advice,其中跟此檢視相關的有兩個引數db_cache_advice和statistics_level ,其中的db_cache_advice跟檢視v$db_cache_advice相關,預設值為on為開啟建議並且消耗cpu和記憶體,off為關閉建議不為建議分配記憶體,ready為關閉建議但保留分配的記憶體。(這裡eygel提到了:可能在某些版本中由off到on時出現ora-4031,無法從共享池中分配記憶體,不過在10g的自動sga管理中可能很難看見了)
另一個引數statistics_level控制資料庫收集統計資訊級別,預設的為typical收集大部分統計資訊,而all則為收集全部統計資訊,basic則為收集基本統計資訊。
Asmm下的調整資訊保留和mman程式:
在oracle 10G的asmm自動管理sga下,我們很少去關心sga的各元件的具體設定,而只需要設定一個sga_target引數讓其自動管理即可,即使重啟資料庫oracle也會記錄上次啟動的sga的各元件具體資訊在spfile,下次啟動資料庫時不會丟失之前的調整結果(其實關於asmm下sga的資訊的db下次啟動的保留oracle concept中也提到了,所以有些知識和細節是需要反覆閱讀和探究才會發覺和熟悉的!)這裡順便提一下一個後臺程式是在asmm管理模式下的mman程式,此程式用於自動管理調整sga各元件大小,而調整的依據還是收集的統計資訊建議,該程式可以在v$processes檢視或者alert
V$sga_dynamic_component:在oracle 10G的asmm下,增加的檢視v$sga_dynamice_component,其中記載了各動態元件的當前大小current_size和最近一次的調整時間last_oper_time和調整型別last_oper_type。
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1056619/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深入淺出-redo和undo記載01
- 深入淺出undo記載01
- SGA和PGA記憶體管理記憶體
- 深入淺出buffer cache和shared pool記載01
- 深入淺出-redo和undo記載02
- 深入淺出redo和undo記載03
- 深入淺出undo記載02
- 深入淺出undo記載03
- 《MySQL 深入淺出》 1-17章節 閱讀整理MySql
- 《MySQL深入淺出》1-17章節閱讀整理MySql
- 查詢SGA和PGA大小
- 深入淺出等待事件和效能診斷記載03事件
- 深入淺出cache buffer和shared pool記載02
- 深入淺出buffer cache和shared pool記載03
- oracle例項記憶體(SGA和PGA)調整Oracle記憶體
- oracle資料庫記憶體分配(sga和pga)Oracle資料庫記憶體
- 讀深入淺出MFC的一節筆記 (轉)筆記
- 深入淺出負載均衡負載
- 對SGA和PGA的優化建議優化
- Tomcat深入淺出——最終章(六)Tomcat
- 深入淺出等待事件和效能診斷01事件
- 【筆記】《深入淺出MFC》第5章 總觀Application Framework筆記APPFramework
- Oracle 體系結構 SGA 和PGA 總結Oracle
- PGA,sga命中sql查詢SQL
- 【SGA】【PGA】普適的Oracle記憶體分配策略Oracle記憶體
- 《深入淺出node.js》第四章——記憶體控制(筆記)Node.js記憶體筆記
- 【筆記】《深入淺出MFC》第6章 MFC程式的生死因果筆記C程式
- 深入淺出React和ReduxReactRedux
- 當實體記憶體小於sga+pga時記憶體
- pga/sga及元件值查詢元件
- SGA PGA MEMORY_TARGET 關係
- oracle10g 修改 sga pgaOracle
- 深入淺出FE(十四)深入淺出websocketWeb
- 深入淺出大端和小端
- 如何檢視和設定sga和pga的當前記憶體的建議值記憶體
- 評侯捷的《深入淺出MFC》和李久進的《MFC深入淺出》
- 修改資料庫的ORACLE的SGA和PGA的值資料庫Oracle
- 深入淺出記憶體馬(一)記憶體