alter system flush shared_pool的作用

简介: 转自http://blog.csdn.net/rambo_china/archive/2010/03/25/5414949.aspxThe FLUSH SHARED POOL clause lets you clear all data from the shared pool in the system global area (SGA).

转自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

相关文章
|
存储 SQL 缓存
【MySQL】change buffer,buffer pool,redo log,bin log,undo log的作用
【MySQL】change buffer,buffer pool,redo log,bin log,undo log的作用
153 0
|
7月前
|
SQL 缓存 关系型数据库
MySQL(三)SQL优化、Buffer pool、Change buffer
MySQL(三)SQL优化、Buffer pool、Change buffer
113 0
|
缓存 关系型数据库 MySQL
提升mysql性能的关键参数之innodb_buffer_pool_size、innodb_buffer_pool_instances
提升mysql性能的关键参数之innodb_buffer_pool_size、innodb_buffer_pool_instances
1406 0
提升mysql性能的关键参数之innodb_buffer_pool_size、innodb_buffer_pool_instances
|
SQL 缓存 关系型数据库
MySQL Buffer pool里的change buffer是啥?
change buffer是一种特殊的数据结构,当这些页面不在缓冲池中时,这些高速缓存会将更改缓存到辅助索引页面。可能由INSERT,UPDATE或DELETE操作(DML)导致的缓冲更改将在以后通过其他的读取操作将页加载到缓冲池中时合并。
287 0
MySQL Buffer pool里的change buffer是啥?