alter system flush shared_pool的作用

转自http://blog.csdn.net/rambo_china/archive/2010/03/25/5414949.aspx
The FLUSH SHARED POOL clause lets you clear all data from the shared pool in the system global area (SGA). The shared pool stores Cached data dictionary information and Shared SQL and PL/SQL areas for SQL statements, stored procedures, function, packages, and triggers.
This statement does not clear shared SQL and PL/SQL areas for items that are currently being executed. You can use this clause regardless of whether your instance has the database dismounted or mounted, open or closed.

实验步骤如下:
----------------------------------------------------------------------------------------
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无异于自杀...慎用!

 

注释######################################################################

X$KSMSP的名称含义为:
[K]ernal [S]torage [M]emory Management [S]GA Hea[P]

其中每一行都代表着shared pool中的一个chunk

我们看一下x$ksmsp的结构:

 

SQL> desc x$ksmsp

Name              Null?    Type

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

ADDR                       RAW(4)

INDX                       NUMBER

INST_ID                    NUMBER

KSMCHIDX                   NUMBER

KSMCHDUR                   NUMBER

KSMCHCOM                   VARCHAR2(16)

KSMCHPTR                   RAW(4)

KSMCHSIZ                   NUMBER

KSMCHCLS                   VARCHAR2(8)

KSMCHTYP                   NUMBER

KSMCHPAR                   RAW(4)

 

 

我们关注以下几个字段:

KSMCHCOM是注释字段,每个内存块被分配以后,注释会添加在该字段中.
x$ksmsp.ksmchsiz代表块大小

x$ksmsp.ksmchcls列代表类型,主要有四类,说明如下:

free
Free chunks--不包含任何对象的chunk,可以不受限制的被分配.

recr
Recreatable chunks--包含可以被临时移出内存的对象,在需要的时候,这个对象可以
被重新创建.例如,许多存储共享sql代码的内存都是可以重建的.

freeabl
Freeable chunks--包含session周期或调用的对象,随后可以被释放.这部分内存有时候
可以全部或部分提前释放.但是注意,由于某些对象是中间过程产生的,这些对象不能
临时被移出内存(因为不可重建).

perm
Permanent memory chunks--包含永久对象.通常不能独立释放.

我们可以通过查询x$ksmsp视图来考察shared pool中存在的内存片的数量
不过注意:Oracle的某些版本(如:10.1.0.2)在某些平台上(如:HP-UX PA-RISC 64-bit)查
询该视图可能导致过度的CPU耗用,这是由于bug引起的.

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/rambo_china/archive/2010/03/25/5414949.aspx

时间: 2024-08-01 00:09:38

alter system flush shared_pool的作用的相关文章

oracle中Alter system 命令的总结

it is from http://www.adp-gmbh.ch/ora/sql/alter_system.html this is a good personal blog website! Alter system archive log [start|stop|all|...] alter system archive log all; alter system archive log next; alter system archive log sequence 104; alter

关于MYSQL flush table的作用

关于MYSQL flush table的作用 水平有限,还待学习.如有错误,请指正. 先给出官方文档: ? FLUSH TABLES Closes all open tables, forces all tables in use to be closed, and flushes the query cache. FLUSH TABLES also removes all query results from the query cache, like the RESET QUERY CACH

ORACLE 10G中用alter system kill session 清除死锁进程

TITLE:ORACLE10G如何用alter system kill session 清除死锁进程 问题描述:用户反馈数据交换终止,查询发现大量的死锁信息 ? SID SERIAL# USERNAME LOGON_TIME 1 1296 56221 sample 2010-6-20 11:25:09 -- 解决步骤: 1.  用下面的语句组装生成清除死锁进程的脚本 --杀锁死进程 select Distinct 'alter system kill session '||chr(39)||b.

oracle中使用alter system events导致库crash

由于数据库导入大量数据的时候io等待比较高,新的存储无法直接挂过来,考虑使用nfs挂载过来,然后存放redo缓解io压力. 数据库版本信息 SQL> select * from v$version;   BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi PL/SQL Rele

ora-02065-ORA-02065:非法的 ALTER SYSTEM 选项

问题描述 ORA-02065:非法的 ALTER SYSTEM 选项 解决方案 ORA-01126 & alter database archivelog 解决方案二: 各位大神,需要做什么操作可以执行这个命令?

【Oracle】alter system set events 相关知识

alter system set events 相关知识: 格式:alter system|session set events [eventnumber|immediate] trace name eventname [forever] [, level levelnumber] : --.' 通过:符号,可以连续设置多个事件,也可以通过连续使用alter session set events来设置多个事件. 格式说明:eventnumber指触发dump的事件号,事件号可以是Oracle错误

zt:alter system switch logfile与ALTER SYSTEM ARCHIVE LOG CURRENT的区别

alter system switch logfile 是强制日志切换,不一定就归档当前的重做日志文件(若自动归档打开,就归档前的重做日志,若自动归档没有打开,就不归档当前重做日志.)alter system archive log current 是归档当前的重做日志文件,不管自动归档有没有打都归档.主要的区别在于:ALTER SYSTEM SWITCH LOGFILE对单实例数据库或RAC中的当前实例执行日志切换;而ALTER SYSTEM ARCHIVE LOG CURRENT会对数据库中

SAP QM 'QM System' 有什么控制作用?

SAP QM 'QM System' 有什么控制作用? QM system可以控制如下二点: 1>如果我方与Vendor的质量标准匹配,且相互认证,那么我方收货后不用检验,系统不产生检验批:如果我方与vendor的质量标准匹配,但是没有相互认证,则我方收货后需要检验: 2>如果我方与vendor的质量标准不匹配,则系统可以控制不让我方下采购订单给这个Vendor; 微信号:JINYULIN_SH_ QQ: 2806032155

[20120906]alter table set unused column后的恢复.txt

[20120906]alter table set unused column后的恢复.txt 我们知道表在alter table 表 set unused column 字段名 后的恢复,数据并没有真正的删除,昨天开发问如果出现误操作是否能够恢复(概率也太小了). 大家知道在执行以上操作后,执行很快,对应字段的数据并没有真正删除,自己觉得好奇,测试看看. 1.测试环境: SQL> select * from v$version ; BANNER ------------------------