簡單分析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的大小沒有一個直觀的感受,可以生成一個圖來看看就很清楚了。
這個也是oracle在不斷的改進中得到的一個最優值,按照比例來劃分,保證每次訪問需要的chunk大小都能夠合理的分配,儘量減少冗餘。
同時不是每個bucket裡面都是有chunk的,這個chunk的分配還是根據進入shared pool以後申請chunk大小緊密相關,bucket中的chunk數目可不是平均的。
如果想看看shared Pool比較細節一下的資訊。可以參考x$ksmsp
這個基表中還是包含了不少的資訊值得我們去學習。首先x$ksmsp裡面的每一條記錄代表一個chunk
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
如果chunk存放的資訊時dictionary cache的話,chunk就屬於dictionary cache.
按照大多數物件的生命週期,chunk的情況也大體如此,可能在不同的資料庫版本中會略有不同。
比如在11gR2中的結果會和10g有一些不同。chunk的狀態可能有多種,但是大體還是可以理解為4類,free,recr,perm,freeable
KSMCHCLS COUNT(*)
-------- ----------
freeabl 20196
recr 26469
perm 581
R-freea 134
R-free 60
R-perm 4
free 5918
R-recr 1
首先,可以分配空間的chunk,這種型別的chunk是free,
如果某個session執行的sql語句,同時另外一個session也執行了同樣的sql語句,在shared pool中這種型別的chunk就可以臨時移出記憶體,因為可以在需要的時候進行重建。這種chunk就是recreatable的。
如果某個session執行的sql語句都是不同的,或者沒有繫結變數,導致在執行的時候生成的sql_id都不同,這種型別的chunk是不能臨時欲出記憶體的,只能在需要的時候進行釋放。這種chunk就是freeable的。
如果某個物件透過dbms_pool給直接pin在了shared pool裡面,那麼對應的chunk就是permanent的,只能在根據需要的時候才釋放空間。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1346970/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 簡單分析shared pool(二)
- 簡單分析shared pool(三)
- Shared pool深入分析及效能調整(一)
- Shared Pool 的轉儲與分析
- 【Shared Pool】使用DBMS_SHARED_POOL包將PL/SQL大物件儲存到Shared PoolSQL物件
- Oracle shared poolOracle
- latch:shared pool的一點理解
- _shared_pool_reserved_pct or shared_pool_reserved_size with ASMMASM
- SHARED POOL ORA-04031錯誤分析
- Shared pool深入分析及效能調整
- zt_Oracle shared pool internals_共享池_shared_poolOracle
- SHARED POOL總結
- SHARED_POOL解析
- 理解Oracle Shared PoolOracle
- Shared pool深入分析及效能調整(二)
- oracle實驗記錄 (oracle 分析shared pool(1))Oracle
- oracle實驗記錄 (oracle 分析shared pool(2))Oracle
- 基於引數shared_pool_reserved_size進一步理解共享池shared pool原理
- AWR分析。(shared_pool,sga_size大小設定)
- Oracle Shared Pool Memory ManagementOracle
- ORACLE SGA之shared poolOracle
- 使用DBMS_SHARED_POOL包將PL/SQL大物件儲存到Shared PoolSQL物件
- dbms_shared_pool keep物件到share pool中物件
- SHARED POOL 基礎知識
- shared_pool_spare_free.sqlSQL
- ORACLE記憶體管理 之五 SGA variable pool,shared_pool,large_pool,java_poolOracle記憶體Java
- shared pool記憶體結構記憶體
- Shared Pool 的基本原理
- 安裝DBMS_SHARED_POOL包
- oracle優化--shared_pool (3)Oracle優化
- oracle優化--shared_pool (2)Oracle優化
- oracle優化--shared_pool (1)Oracle優化
- PL/SQL Program Units and the Shared Pool (89)SQL
- 共享池之六:shared pool latch/ library cache latch /lock pin 簡介
- shared_pool的sql命中率SQL
- SHARED POOL 空閒空間分配流程
- 轉_診斷latch:shared pool等待事件事件
- 診斷shared pool常用命令