【每日一摩斯】-Shared Pool優化和Library Cache Latch衝突優化 (1523934.1)-系列6
使用SQL 檢視Shared Pool問題
這一章節展示了一些可以用來幫助找到shared pool中的潛在問題的SQL語句。這些語句的輸出最好spool到一個檔案中。
注意:這些語句可能會使latch競爭加劇,我們在上面的"使用 V$ 檢視 (V$SQL 和 V$SQLAREA)" above.
查詢literal SQL
SELECT substr(sql_text,1,40) "SQL",
count(*) ,
sum(executions) "TotExecs"
FROM v$sqlarea
WHERE executions < 5
GROUP BY substr(sql_text,1,40)
HAVING count(*) > 30
ORDER BY 2;
count(*) ,
sum(executions) "TotExecs"
FROM v$sqlarea
WHERE executions < 5
GROUP BY substr(sql_text,1,40)
HAVING count(*) > 30
ORDER BY 2;
這個語句有助於找到那些經常被使用的literal SQL
檢索Library Cache hit ratio
SELECT SUM(PINS) "EXECUTIONS",
SUM(RELOADS) "CACHE MISSES WHILE EXECUTING"
FROM V$LIBRARYCACHE;
SUM(RELOADS) "CACHE MISSES WHILE EXECUTING"
FROM V$LIBRARYCACHE;
如果misses/executions高於1%的話,則需要嘗試減少library cache miss的發生。
改造:
SELECT SUM(PINS) "EXECUTIONS",
SUM(RELOADS) "CACHE MISSES WHILE EXECUTING",
SUM(RELOADS) "CACHE MISSES WHILE EXECUTING",
SUM(RELOADS)/SUM(PINS)
FROM V$LIBRARYCACHE;
檢查hash chain的長度
SELECT hash_value, count(*)
FROM v$sqlarea
GROUP BY hash_value
HAVING count(*) > 5;
FROM v$sqlarea
GROUP BY hash_value
HAVING count(*) > 5;
這個語句正常應該返回0行。如果有任何HASH_VALUES存在高的count(兩位數的)的話,你需要檢視是否是bug的影響或者是literal SQL使用了不正常的形式。建議進一步列出所有有相同HASH_VALUE的語句。例如:
SELECT sql_text FROM v$sqlarea WHERE hash_value= ;
如果這些語句看起來一樣,則查詢V$SQLTEXT去找完整的語句。有可能不同的SQL文字會對映到相同的hash值,比如:在7.3中,如果一個值在語句中出現2次而且中間正好間隔32個位元組的話,這兩個語句會對映出相同的hash值。
檢查高版本
SELECT address, hash_value,
version_count ,
users_opening ,
users_executing,
substr(sql_text,1,40) "SQL"
FROM v$sqlarea
WHERE version_count > 10;
version_count ,
users_opening ,
users_executing,
substr(sql_text,1,40) "SQL"
FROM v$sqlarea
WHERE version_count > 10;
在上面的"Sharable SQL"章節中,我們已經描述了,一個語句的不同"版本"是當語句的字元完全一致但是需要訪問的物件或者繫結變數不一致等等造成的。在Oracle8i的不同版本中因為進度監控的問題也會產生高版本。在這篇文件的前面描述過了,我們可以把_SQLEXEC_PROGRESSION_COST 設成'0'來禁止進度監控產生高版本。
找到佔用shared pool 記憶體多的語句
SELECT substr(sql_text,1,40) "Stmt", count(*),
sum(sharable_mem) "Mem",
sum(users_opening) "Open",
sum(executions) "Exec"
FROM v$sql
GROUP BY substr(sql_text,1,40)
HAVING sum(sharable_mem) > &MEMSIZE;
sum(sharable_mem) "Mem",
sum(users_opening) "Open",
sum(executions) "Exec"
FROM v$sql
GROUP BY substr(sql_text,1,40)
HAVING sum(sharable_mem) > &MEMSIZE;
這裡MEMSIZE取值為shared pool大小的10%,單位是byte。這個語句可以查出佔用shared pool很大記憶體的那些SQL,這些SQL可以是相似的literal語句或者是一個語句的不同版本。
導致shared pool 記憶體'aged' out的記憶體分配
SELECT *
FROM x$ksmlru
WHERE ksmlrnum>0;
FROM x$ksmlru
WHERE ksmlrnum>0;
注意: 因為這個查詢在返回不超過10行記錄後就會消除X$KSMLRU的內容,所以請用SPOOL儲存輸出的內容。X$KSMLRU表顯示從上一次查詢該表開始,哪些記憶體分配操作導致了最多的記憶體塊被清除出shared pool 。有些時候,這會有助於找到那些持續的請求分配空間的session或者語句。如果一個系統表現很好而且共享SQL 使用得也不錯,但是偶爾會變慢,這個語句可以幫助找到原因。關於X$KSMLRU 的更多資訊請檢視Note:43600.1。
在不同Oracle Releases中的都會遇到的問題
在不同的release中有一些通用的會影響shared pool效能的問題:
>增加每個CPU的處理能力可以減少latch被持有的時間從而有助於在Oracle的各個release上減少shared pool競爭。換一個更快的CPU一般來說會比增加一個慢的CPU效果要好。
>如果你設定了一個EVENT,不管基於什麼原因,請讓Oracle support檢查這個event是否會對shared pool的效能造成影響。
>確保Oracle例項有足夠的記憶體,避免SGA記憶體被作業系統swap交換出去的風險。
例如: 在AIX上作業系統的不正確設定可能會導致 shared pool問題- 參考Note:316533.1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7192724/viewspace-772350/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【每日一摩斯】-Shared Pool優化和Library Cache Latch衝突優化 (1523934.1)-系列5優化
- 【每日一摩斯】-Shared Pool優化和Library Cache Latch衝突優化 (1523934.1)-系列4優化
- 【每日一摩斯】-Shared Pool優化和Library Cache Latch衝突優化 (1523934.1)-系列3優化
- 【每日一摩斯】-Shared Pool優化和Library Cache Latch衝突優化 (1523934.1)-系列2優化
- 【每日一摩斯】-Shared Pool優化和Library Cache Latch衝突優化 (1523934.1)-系列1優化
- Shared Pool優化和Library Cache Latch衝突優化優化
- 故障排除:Shared Pool優化和Library Cache Latch衝突優化優化
- 優化Shared Pool Latch與Library Cache Latch競爭優化
- shared pool library cache latch 競爭優化辦法優化
- 共享池之六:shared pool latch/ library cache latch /lock pin 簡介
- oracle優化--shared_pool (3)Oracle優化
- oracle優化--shared_pool (2)Oracle優化
- oracle優化--shared_pool (1)Oracle優化
- 深入理解shared pool共享池之library cache系列一
- latch:cache buffers chains的優化思路AI優化
- 深入理解shared pool共享池之library cache的library cache lock系列四
- 深入理解shared pool共享池之library cache的library cache pin系列三
- 深入理解shared pool共享池之library cache系列二
- oracle latch優化Oracle優化
- 等待模擬-library cache shared pool 硬解析
- latch:shared pool的一點理解
- Shared pool的library cache lock/pin及硬解析
- 共享池的調整與優化(Shared pool Tuning)優化
- Oracle Latch及latch衝突Oracle
- shared pool之三:library cache結構/library cache object的結構-dump LibraryHandleObject
- Flush an Object Out The Library Cache [SGA] Using The DBMS_SHARED_POOLObject
- 深入理解shared pool共享池空間及library cache分配之ora-4031 系列一
- Oracle效能優化--Latch介紹Oracle優化
- [20210520]11g shared pool latch與library cache mutex的簡單探究.txtMutex
- [20210521]11g shared pool latch與library cache mutex的簡單探究4.txtMutex
- 首屏優化系列(一)優化
- Buffer cache 的調整與優化(一)優化
- latch:library cache lock等待事件事件
- MySQL系列6 - join語句的優化MySql優化
- cbc latch或cache buffer chains latch系列一AI
- 轉_診斷latch:shared pool等待事件事件
- [20210520]11g shared pool latch與library cache mutex的簡單探究3.txtMutex
- 程式分析與優化 - 6 迴圈優化優化