首页 > 数据库 > Oracle > 简单分析shared pool(一)
oracle中的shared pool很重要,但是感觉知之甚少。今天想在原来的认识上能够有一点更深入的了解。
简单做了一个总结。
首先是转储一下shared pool共享内存的内容。
SQL> alter session set events 'immediate trace name heapdump level 2';
Session altered.
这个步骤会得到一个trace文件。简单的换算一下,就得到了trace文件的大体信息。
SQL> select sid from v$mystat where rownum<2;
SID
----------
24
SQL> select sid,serial# ,paddr from v$session where sid=24;
SID SERIAL# PADDR
---------- ---------- ----------------
24 83 00000000727B03B0
SQL> select spid from v$process where addr='00000000727B03B0';
SPID
------------------------
18155
SQL> host
简单验证一下,对应的process是否存在。
[ora11g@rac1 ~]$ ps -ef|grep 18155
ora11g 18155 18106 0 06:00 ? 00:00:02 oracleTEST01 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
ora11g 19326 19167 0 06:21 pts/0 00:00:00 grep 18155
在trace文件目录下查看日志文件是否存在。
[ora11g@rac1 trace]$ ls -l *18155*.trc
-rw-r----- 1 ora11g dba 6900360 Nov 4 06:11 TEST01_ora_18155.trc
对于shared pool来说,存储单位是chunk,多个chunk组成一个链表,也叫做bucket.
每个bucket都对chunk的大小都有一定的范围,是一个连续的值,没有交叉。
在10g,11g中都设置了255个bucket。
简单通过trace文件来看一下。
[ora11g@rac1 trace]$ grep Bucket *18155*.trc
Bucket 0 size=32
Bucket 1 size=40
Bucket 2 size=48
Bucket 3 size=56
Bucket 4 size=64
Bucket 5 size=72
...
Bucket 250 size=12352
Bucket 251 size=12360
Bucket 252 size=16408
Bucket 253 size=32792
Bucket 254 size=65560
可能对于bucket的大小没有一个直观的感受,可以生成一个图来看看就很清楚了。

SQL> select count(*)from x$ksmsp;
COUNT(*)
----------
53317
如果你马上执行了一个其它的查询,再来看x$ksmsp的条数,就很可能发生变化。
SQL> select count(*)from all_objects;
COUNT(*)
----------
13225
SQL> select count(*)from x$ksmsp;
COUNT(*)
----------
53363
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8494287/viewspace-1346970/ ,如需转载,请注明出处,否则将追究法律责任。