oracle 删除列 大数据_Oracle 删除指定sql的执行计划。

1. oracle10g以前我们都是直接刷新共享池,但这样数据库中所有sql的执行计划都会被删掉。这种办法也不可取,下面简单介绍一下这种办法:

测试版本:

SQL> select * from v$version;

BANNER CON_ID

-------------------------------------------------------------------------------- ----------

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0

1

2

3

4

SQL>select *fromv$version;

BANNERCON_ID

------------------------------------------------------------------------------------------

OracleDatabase12cEnterpriseEditionRelease12.1.0.1.0-64bitProduction0

PL/SQL Release 12.1.0.1.0 - Production 0

CORE 12.1.0.1.0 Production 0

TNS for Linux: Version 12.1.0.1.0 - Production 0

NLSRTL Version 12.1.0.1.0 - Production 0

1

2

3

4

PL/SQLRelease12.1.0.1.0-Production0

CORE12.1.0.1.0Production0

TNSforLinux:Version12.1.0.1.0-Production0

NLSRTLVersion12.1.0.1.0-Production0

1. 我们执行一条简单的sql:

SQL> select 1 from dual;

1

----------

1

1

2

3

4

5

SQL>select1fromdual;

1

----------

1

2. 此时sql的执行计划进入shared pool,但共享池中还有其他sql的执行计划

SQL> select sql_id, address, hash_value, executions, loads, parse_calls, invalidations from v$sqlarea where sql_text = 'select 1 from dual';

SQL_ID ADDRESS HASH_VALUE EXECUTIONS LOADS PARSE_CALLS INVALIDATIONS

------------- ---------------- ---------- ---------- ---------- ----------- -------------

520mkxqpf15q8 000000006ECCF9C0 2866845384 1 1 1 0

SQL> select count(*) from v$sqlarea;

COUNT(*)

----------

196

1

2

3

4

5

6

7

8

SQL>selectsql_id,address,hash_value,executions,loads,parse_calls,invalidationsfromv$sqlareawheresql_text='select 1 from dual';

SQL_IDADDRESSHASH_VALUEEXECUTIONSLOADSPARSE_CALLSINVALIDATIONS

-----------------------------------------------------------------------------------

520mkxqpf15q8000000006ECCF9C028668453841110

SQL>selectcount(*)fromv$sqlarea;

COUNT(*)

----------

196

3. 然后flush一下共享池

SQL> alter system flush shared_pool;

System altered.

1

2

3

SQL>altersystemflushshared_pool;

Systemaltered.

4. 发现最开始那条sql的执行计划已经被flush,但同时共享池所有的sql也被flush,这个代价是非常大的。不可取

SQL> select sql_id, address, hash_value, executions, loads, parse_calls, invalidations from v$sqlarea where sql_text = 'select 1 from dual';

no rows selected

SQL> select count(*) from v$sqlarea;

COUNT(*)

----------

83

1

2

3

4

5

6

7

SQL>selectsql_id,address,hash_value,executions,loads,parse_calls,invalidationsfromv$sqlareawheresql_text='select 1 from dual';

norowsselected

SQL>selectcount(*)fromv$sqlarea;

COUNT(*)

----------

83

2. 下面我们来看一下删除指定sql的执行计划,10.2.0.5版本以上可直接使用

1. 执行一条简单的测试sql

SQL> select 2 from dual;

2

----------

2

1

2

3

4

5

SQL>select2fromdual;

2

----------

2

2. 查看sql在共享池的执行计划

SQL> select sql_id, address, hash_value, executions, loads, parse_calls, invalidations

2 from v$sqlarea

3 where sql_text = 'select 2 from dual';

SQL_ID ADDRESS HASH_VALUE EXECUTIONS LOADS PARSE_CALLS INVALIDATIONS

------------- ---------------- ---------- ---------- ---------- ----------- -------------

9fusd37prv595 000000006C5D2988 3950875941 1 1 1 0

1

2

3

4

5

6

7

SQL>selectsql_id,address,hash_value,executions,loads,parse_calls,invalidations

2fromv$sqlarea

3wheresql_text='select 2 from dual';

SQL_IDADDRESSHASH_VALUEEXECUTIONSLOADSPARSE_CALLSINVALIDATIONS

-----------------------------------------------------------------------------------

9fusd37prv595000000006C5D298839508759411110

3. 将指定sql的执行计划flush

SQL> exec sys.dbms_shared_pool.purge('000000006C5D2988,3950875941', 'c');

PL/SQL procedure successfully completed.

1

2

3

SQL>execsys.dbms_shared_pool.purge('000000006C5D2988,3950875941','c');

PL/SQLproceduresuccessfullycompleted.

4.然后我们再来查看这条sql的执行计划的时候,已经被flush掉了

SQL> select sql_id, address, hash_value, executions, loads, parse_calls, invalidations

2 from v$sqlarea

3 where sql_text = 'select 2 from dual';

no rows selected

1

2

3

4

5

SQL>selectsql_id,address,hash_value,executions,loads,parse_calls,invalidations

2fromv$sqlarea

3wheresql_text='select 2 from dual';

norowsselected

删除完毕。就这样就删掉了指定sql的执行计划了。

转载请注明: 版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

最后编辑:2013-09-26作者:Jerry

一个积极向上的小青年,热衷于分享--Focus on DB,BI,ETL


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部