dbms_shared_pool.purge 清理某个SQL执行计划

简介: dbms_shared_pool.purge 清理某个SQL执行计划 在日常管理中,经常有让sql重新解析的需求,比如说使用了bind peeking,第一次绑定特定值的时候执行计划走的特别糟,因为绑定变量导致之后的语句不作...


dbms_shared_pool.purge 清理某个SQL执行计划





在日常管理中,经常有让sql重新解析的需求,比如说使用了bind peeking,第一次绑定特定值的时候执行计划走的特别糟,因为绑定变量导致之后的语句不作重新解析,重用了最差的执行计划,这时候我们希望重新解析来得到一个相对好的执行计划,常见的方法有:


a.alter system flush shared_pool;

b.对语句中的对象做个ddl ; --只会重新生成一个子游标

c.重新收集统计信息

但是这些操作的影响都比较大,因此oracle在10.2.0.4后提供了个dbms_shared_pool.purge的方法,能够将某个sql的shared  cursor从共享池中清除,这样只会对单个sql产生影响.

 

测试:

 

10.2.0.4:

 

SQL> create table test(id int);

表已创建。

SQL> select * from test;

未选定行

SQL> select address,hash_value,executions,parse_calls from v$sql where sql_TEXT like 'select * from test%';

ADDRESS          HASH_VALUE EXECUTIONS PARSE_CALLS

---------------- ---------- ---------- -----------
0000040229F039E0 1689401402          1           1


QL> exec dbms_shared_pool.purge('0000040229F039E0,1689401402','C');

PL/SQL 过程已成功完成。

SQL> select address,hash_value,executions,parse_calls from v$sql where sql_TEXT like 'select * from test%';

ADDRESS          HASH_VALUE EXECUTIONS PARSE_CALLS
---------------- ---------- ---------- -----------
0000040229F039E0 1689401402          1           1

 

可以看到purge并没有成功,为了进一步证实,再做一遍查询

 

SQL> select * from test;

未选定行

SQL> select address,hash_value,executions,parse_calls from v$sql where sql_TEXT like 'select * from test%';

ADDRESS          HASH_VALUE EXECUTIONS PARSE_CALLS
---------------- ---------- ---------- -----------
0000040229F039E0 1689401402          2           2

 

executions和parse_calls增加,说明前面的parse确实没生效

 

SQL> alter session set events '5614566 trace name context forever';

会话已更改。

SQL> exec dbms_shared_pool.purge('0000040229F039E0,1689401402','C');

PL/SQL 过程已成功完成。

SQL> select address,hash_value,executions,parse_calls from v$sql where sql_TEXT like 'select * from test%';

未选定行

 

参考 metalink Doc ID:  751876.1  
10.2.0.4默认不开启,要靠event 5614566或者补丁5614566来激活

 

11g:

 

11g>create table test_purge(id int);

 

11g>select * from test_purge;

 

11g>select address,hash_value from v$sql where sql_text like 'select * from test%';

ASH_VALUE
---------
683003671

11g>exec dbms_shared_pool.purge('215E2F78,3683003671','C');

PL/SQL 过程已成功完成。

11g>select address,hash_value from v$sql where sql_text like 'select * from test%';



清除掉shared pool中某条sql语句方法

原文地址:http://www.xifenfei.com/2012/02/%e6%b8%85%e9%99%a4%e6%8e%89shared-pool%e4%b8%ad%e6%9f%90%e6%9d%a1sql%e8%af%ad%e5%8f%a5%e6%96%b9%e6%b3%95.html



>
 


 


     



>
  
  <
 

 
>
 
 

     
 
>
>
  
 
 
 




>
 

 
>
>
  
 
 
 


 
 
>
 

 
>
>
  
 
 








 

 
>
  
 
 






>
  
 

 
>
  
 





>
 
 

     
 
>
  
 
 


 
>
 

 
>
  
 






  
    
   
   
   
    
    
    
   
   
   
    
   
   
    
   
   

  
    
    
     
    
     
    
    
         
        
         
         
         
         
        
        
        
        
         
   
    

  
   
   <<<<>>>
   


 

 
 
 
 



 
>
 
 

   
 
>
>
  
 
     

 
 
>

 
   





 
 
>
 

 
 

 
 

 
 

 
>
 

 
>
  
 
     

 
 
>
 

 
>
  
 
     

 
 
>
 

 
>
  
 






>
 
 

     
 
>
  
 
 


 
>
 

 
>
  
 
 








    


DBA笔试面试讲解
欢迎与我联系

目录
相关文章
|
6月前
|
SQL 安全 数据管理
DMS产品常见问题之历史数据清理SQL修改失败如何解决
DMS(数据管理服务,Data Management Service)是阿里云提供的一种数据库管理和维护工具,它支持数据的查询、编辑、分析及安全管控;本汇总集中了DMS产品在实际使用中用户常遇到的问题及其相应的解答,目的是为使用者提供快速参考,帮助他们有效地解决在数据管理过程中所面临的挑战。
|
SQL 缓存 数据库
OBCP第三章 SQL引擎高级技术-执行计划
OBCP第三章 SQL引擎高级技术-执行计划
302 0
|
4月前
|
SQL Cloud Native 调度
云原生数据仓库使用问题之如何修改历史数据清理的SQL
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
1月前
|
SQL Oracle 关系型数据库
Oracle SQL:了解执行计划和性能调优
Oracle SQL:了解执行计划和性能调优
45 1
|
4月前
|
SQL 分布式计算 MaxCompute
SQL开发问题之对于ODPS中的UNION操作,执行计划的问题如何解决
SQL开发问题之对于ODPS中的UNION操作,执行计划的问题如何解决
|
5月前
|
SQL 运维 安全
数据管理DMS产品使用合集之执行SQL时,如何添加Hint来改变查询的执行计划
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
57 1
|
4月前
|
SQL 分布式计算 MaxCompute
ODPS SQL问题之为什么使用odps.sql.groupby.skewindata = true优化后,逻辑执行计划会发生改变如何解决
ODPS SQL问题之为什么使用odps.sql.groupby.skewindata = true优化后,逻辑执行计划会发生改变如何解决
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库——索引(4)-SQL性能分析-profile详情、explain(profile查看指令,explain执行计划中各个字段的含义)
MySQL数据库——索引(4)-SQL性能分析-profile详情、explain(profile查看指令,explain执行计划中各个字段的含义)
62 2
|
SQL 缓存 OLTP
OBCP第三章 SQL引擎技术-执行计划缓存
OBCP第三章 SQL引擎技术-执行计划缓存
134 0
|
SQL 关系型数据库 MySQL
使用explain分析你SQL执行计划
使用explain分析你SQL执行计划