ITPub博客

首页 > 数据库 > Oracle > alter system flush shared_pool

alter system flush shared_pool

Oracle 作者:小小黄-812 时间:2014-07-15 18:17:23 0 删除 编辑
alter system flush shared_pool是将SGA里面的内容进行刷新,并不会将procedure与function删除。你可以将它理解为执行此语句后,ORACLE将SGA里面的内容都当作最近最少使用内存换出机制换出。
应该说alter system flush shared_pool;可以暂时解决shared_pool中的碎片问题,大量的不能共享的SQL很快又会使碎片出现。解决办法是优化SQL,Keep 经常使用的包,cursor_sharing参数,在程序中注意共享cursor等等。这个命令不会影响DB的可用性吧,顶多造成短时间的性能下降,因为parse过的SQL都给清出去了。
实验步骤如下:
----------------------------------------------------------------------------------------
1.查看shared_pool中碎片
SQL> select count(*) from x$ksmsp;
COUNT(*)
----------
7260
2.使用一个以前未曾使用过的查询,来让share pool分配内存,增加share pool中的chunk碎片
SQL> select count(*) from user_tables;
COUNT(*)
----------
667
3.再次查询shared_pool中的碎片
SQL> select count(*) from x$ksmsp;
COUNT(*)
----------
7515
每个buckets的碎片数量>2000就认为是不太好的一个情况,可能会引起share pool latch争用!
4.使用alter system flush shared_pool命令,并再次查询shared_pool中的碎片
SQL> alter system flush shared_pool;
系统已更改。
SQL> select count(*) from x$ksmsp;
COUNT(*)
----------
7194
-----------------------------------------------------------------------------------------------------------------------
总结:执行这个语句的结果是将缓存在library cache和data dictionary cache 中的sql,pl/sql和数据字典定义都从共享池中清除了
在负载很重的生产库里执行flush shared_pool无异于自杀。。。慎用!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29144194/viewspace-1219756/,如需转载,请注明出处,否则将追究法律责任。

下一篇: insert的用法小结
请登录后发表评论 登录
全部评论

注册时间:2013-08-26

  • 博文量
    18
  • 访问量
    118964