shared pool latch 等待事件分析
shared pool latch相关描述
The shared pool latch is used to protect critical operations when allocating and freeing memory in the shared pool. If an application makes use of literal (unshared) SQL then this can severely limit scalability and throughput. The cost of parsing a new SQL statement is expensive both in terms of CPU requirements and the number of times the library cache and shared pool latches may need to be acquired and released. Before Oracle9, there was just one such latch for the entire database to protect the allocation of memory in the library cache. In Oracle9, multiple children were introduced to relievecontention on this resource. |
减少shared pool latch方法
Avoid hard parses when possible, parse once, execute many. Eliminate literal SQL so that same sql is shared by many sessions.Size the shared_pool adequately to avoid reloadsUse of MTS (shared server option) also greatly influences the shared pool latch. |
查询未绑定sql
--9iSELECT 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 ;--10g及其以后版本SET pages 10000SET linesize 250column FORCE_MATCHING_SIGNATURE format 99999999999999999999999WITH c AS (SELECT FORCE_MATCHING_SIGNATURE, COUNT(*) cnt FROM v$sqlarea WHERE FORCE_MATCHING_SIGNATURE!=0 GROUP BY FORCE_MATCHING_SIGNATURE HAVING COUNT(*) > 20 ) , sq AS (SELECT sql_text , FORCE_MATCHING_SIGNATURE, row_number() over (partition BY FORCE_MATCHING_SIGNATURE ORDER BY sql_id DESC) p FROM v$sqlarea s WHERE FORCE_MATCHING_SIGNATURE IN (SELECT FORCE_MATCHING_SIGNATURE FROM c ) )SELECT sq.sql_text , sq.FORCE_MATCHING_SIGNATURE, c.cnt "unshared count"FROM c, sqWHERE sq.FORCE_MATCHING_SIGNATURE=c.FORCE_MATCHING_SIGNATUREAND sq.p =1ORDER BY c.cnt DESC |
查询数据库整体解析情况
select to_char(100 * sess / calls, '999999999990.00') || '%' cursor_cache_hits, to_char(100 * (calls - sess - hard) / calls, '999990.00') || '%' soft_parses, to_char(100 * hard / calls, '999990.00') || '%' hard_parses from ( select value calls from v$sysstat where name = 'parse count (total)' ), ( select value hard from v$sysstat where name = 'parse count (hard)' ), ( select value sess from v$sysstat where name = 'session cursor cache hits' ); |
参考:Note 62143.1 Troubleshooting: Tuning the Shared Pool and Tuning Library Cache Latch

浙公网安备 33010602011771号