客户的一个
问题出在353205q5fk492语句上。仔细查看这条语句,有两个执行计划。
查看数据库sql使用情况,发现采用了一条效率并不高的执行计划,如下:
Plan hash
所以为了紧急处理这个问题,我们采用如下方法进行处理
1、首先把这个执行计划踢出shared_pool
SQL> exec dbms_shared_pool.purge(‘000000235FFBE9B0,3282783069′,’C’)
2、然后征求客户意见后,采用这个执行计划的语句进行查杀。
3、针对这条语句中where条件进行了重新
经过上面三步处理后,迫使该sql重新
最后后检查新最后采取的执行计划
SQL> select sql_handle,plan_name,origin,enabled,accepted,sql_text from dba_sql_plan_baselines
SQL_HANDLE PLAN_NAME ORIGIN ENA ACC SQL_TEXT
—————————— —————————— ————– — — ————————————
SQL_e96f1f0834698c71 SQL_PLAN_fkvsz10u6m33j21b3b9d1 MANUAL-LOAD YES YES SELECT xxxxxxxxx
Plan hash value: 3566569303
———————————————————————————————-
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
———————————————————————————————-
| 0 | SELECT STATEMENT | | | | 1 (100)| |
| 1 | COUNT STOPKEY | | | | | |
| 2 | TABLE ACCESS BY INDEX ROWID| xxxxxxxxx | 1 | 537 | 1 (0)| 00:00:01 |
| 3 | INDEX RANGE SCAN | xxxxxxxxx~id2 | 1 | | 1 (0)| 00:00:01 |
———————————————————————————————-
最后检查,发现已经使用绑定的执行计了
SQL> select hash_value, sql_id,child_number,plan_hash_value,executions,round(buffer_gets/executions,0) buffergets_per,SQL_PLAN_BASELINE ,last_load_time,last_active_time from v$sql where sql_id=’353205q5fk492′;
HASH_VALUE SQL_ID CHILD_NUMBER PLAN_HASH_VALUE EXECUTIONS BUFFERGETS_PER SQL_PLAN_BASELINE LAST_LOAD_TIME LAST_ACTIVE_TIME
———- ————- ———— ————— ———- ————– —————————— ————————————– ——————-
3566569303 353205q5fk492 12 1263503027 284 573 SQL_PLAN_fkvsz10u6m33j21b3b9d1
通过这样处理后,发现效率提升非常明显,cpu空闲率直接上升到80%以上了。
本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。
PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多