暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

alter system flush shared_pool命令解析

原创 Leo 2022-10-23
1490

文档课题:alter system flush shared_pool命令解析.

数据库:oracle 11.2.0.4 64位

场景描述:

作为DBA,一定遇到过ORA-04031共享池不够用的情况,该告警主要体现在客户端连接异常以及系统响应缓慢等问题上.

解决方案:

可先使用alter system flush shared_pool刷新sga,该语句不会删除procedure与function,只是暂时解决shared_pool中的碎片问题,大量不能共享的sql很快又会产生碎片.根本的解决办法是优化sql,keep经常使用的包、cursor_sharing参数.注意该命令会造成短时间的性能下降,因为parse过的sql都被清理出sga.

测试过程:

查share_pool碎片.

SQL> select count(*) from x$ksmsp;

 

  COUNT(*)

----------

     14672

使用此前未曾使用过的查询,让share pool分配内存,增加share pool的chunk碎片.

SQL> select * from scott.emp t where empno in (select t.empno from scott.emp t where t.deptno in (20,30));

 

     EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO

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

      7369 SMITH      CLERK           7902 1980-12-17 00:00:00        800                    20

      7499 ALLEN      SALESMAN        7698 1981-02-20 00:00:00       1600        300         30

      7521 WARD       SALESMAN        7698 1981-02-22 00:00:00       1250        500         30

      7566 JONES      MANAGER         7839 1981-04-02 00:00:00       2975                    20

      7654 MARTIN     SALESMAN        7698 1981-09-28 00:00:00       1250       1400         30

      7698 BLAKE      MANAGER         7839 1981-05-01 00:00:00       2850                    30

      7788 SCOTT      ANALYST         7566 1987-04-19 00:00:00       3000                    20

      7844 TURNER     SALESMAN        7698 1981-09-08 00:00:00       1500          0         30

      7876 ADAMS      CLERK           7788 1987-05-23 00:00:00       1100                    20

      7900 JAMES      CLERK           7698 1981-12-03 00:00:00        950                    30

      7902 FORD       ANALYST         7566 1981-12-03 00:00:00       3000                    20

 

11 rows selected.

再次查share_pool碎片.

SQL> select count(*) from x$ksmsp;

 

  COUNT(*)

----------

     15069

说明:每个buckets碎片数量>2000就视作不太好的情况,可能会引起share pool latch争用.

SQL> alter system flush shared_pool;

 

System altered.

 

SQL> select count(*) from x$ksmsp;

 

  COUNT(*)

----------

      5185

 

总结:执行该命令是将缓存在library cache和data dictionary cache中的sql、pl/sql和数据字典定义都从共享池中清除,在负载很高的生产库慎用该命令.

 

参考网址:

http://blog.itpub.net/29144194/viewspace-1219756/

https://blog.csdn.net/kadwf123/article/details/8564869

 

说明:以上内容基本来自以上网址,如有侵权,请联系博主删帖.

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论