shared pool之二:free lists/shared pool lru list

來源:互聯網
上載者:User


介紹free lists及shared pool lru list.
1、shared pool中的chunk的大小是不一樣的,但是是連續的   
2、因為chunk是分配的最小單元,因此session需要給對象分配空間的時候,會以chunk為單位進行申請    
3、可用的chunk(free)會形成一個鏈表 feee lists,便於進行分配的時候,可以通過遍曆鏈表尋找到可用的適合的chunk,鏈表是chunk進行組織和管理的一種方式
4、一個可用的chunk鏈表是一個bucket,shared pool中會有很多的bucket,不同的bucket中的chunk的大小不同,一般是隨著bucket編號的增加而增長的
5.當需要從shared pool中尋找chunk的時候,首先會定位一個bucket,然後遍曆bucket,尋找最合適的chunk, 如果chunk的空間比需要的空間大,那麼這個chunk就拆分成兩個,一個被分配、一個成為free,重新掛接到相應大小的bucket上。   
6、在尋找chunk的過程中,如果一個bucket中沒有合適的chunk,接著尋找另外一個非空的bucket,如果所有的bucket中都沒有合適的chunk,那麼就從rec類型的鏈表中釋放一部分的空間,為free,或將free做適當合并  。。注意:只有rec類型的chunk能夠被釋放空間,即使釋放了空間,這些空間可能都不是連續的,都是一些很小的chunk,這樣可能形成這樣一種情況,shared pool中有空間但是是大量的非常小的chunk,這樣在尋找chunk的時候,也很難尋找到合適的chunk--共用池片段
7、shared pool中所有類型的chunk都是以鏈表的方式進行管理的
##############
按bucket劃分,共有255個,bucket 0---bucket 254   
每個bucket上掛有一個 chunk list;
free lists上Bucket大小的分布情況:  --環境LINUX 32位/ORACLE 11.2.0.4
之前 Bucket size以4bytes遞增
這一段的Bucket size以64bytes遞增
Bucket 240--254的Bucket size增長看起來沒太大規律,總之是遞增了哈哈。
因為free chunk數量非常的多,這樣劃分每個Bucket容納的chunk數量減少,尋找效率提高,對shared pool latch的爭用也大大減少。注意:如果在shared pool中出現了大量的小的free chunk,就會出現share pool latch爭用的情況,即使增加共用池的大小,這個問題隨著時間還是會出現的。
RESERVED FREE LISTS:
RESERVED FREE LISTS上的bucket個數我DUMP出來的是15個。
保留FREE LISTS,在SQL語句所需CHUNK大於4400bytes時,會在RESERVED FREE LISTS中尋找空閑CHUNK。
如果SQL語句所需CHUNK不大於4400bytes時,只會在free list 中尋找CHUNK。
這個是由隱含參數控制的:_shared_pool_reserved_min_alloc          minimum allocation size in bytes for reserved area ,預設值4400   
###################
DUMP 共用池查看free lists/bucket/RESERVED FREE LISTS結構:--用建立會話來做
alter session set events 'immediate trace name heapdump level 2';
select value from v$diag_info where name like 'De%';
/u01/diag/rdbms/bys3/bys3/trace/bys3_ora_7876.trc

  Chunk 2bffa844 sz=    22460    freeable  "character set m"
Total heap size    =146798680    -- 146798680/1024/1024 --139.99813    初始化參數:shared_pool_size--140M

 Bucket 0 size=
  Chunk 2bc00048 sz=        0    kghdsx

  Chunk 23a60468 sz=         free      "               "
  Chunk的地址、大小、狀態
  Chunk 23ceb498 sz=       20    free      "               "
  Chunk 237fcde4 sz=       20    free      "               "
   --24位元組,也就是Bucket 2的 size範圍在20-24位元組。。
  Chunk 245b13e4     free      "               "
  Chunk 23ace7c0 sz=       24    free      "               "
  Chunk 239c5a28 sz=       24    free      "               "
 Bucket 3 size=28
  Chunk 24540e9c    free      "               "
  Chunk 2521209c sz=       28    free      "               "
  Chunk 23483448 sz=       28    free      "               "
………………
 Bucket 199 size=1452                  
  Chunk 2347d2ac sz=     1492    free      "               "
                                        
  Chunk 24b28a94 sz=     1548    free      "               "
                                             
  Chunk 2433bb14 sz=     1620    free      "               "
  Chunk 2463a89c sz=     1620    free      "               "
  Chunk 24b829c4 sz=     1620    free      "               "

  Chunk 23498518 sz=     1704    free      "               "
  Chunk 23de90d0 sz=     1696    free      "               "
………………
 Bucket 236 size=3820
 Bucket 237 size=3884



 Bucket 241 size=4100
 Bucket 242 size=4108
 Bucket 243 size=8204
 Bucket 244 size=8460
 Bucket 245 size=8464
 Bucket 246 size=8468
 Bucket 247 size=8472
 Bucket 248 size=9296
 Bucket 249 size=9300
 Bucket 250 size=12320
 Bucket 251 size=12324
 Bucket 252 size=16396
 Bucket 253 size=32780
 Bucket 254 size=65548
Total free space   =   518232

 Reserved bucket 0 size=16
  Chunk 23420320 sz=      676  R-free      "               "
  Chunk 23427b94 sz=     3420  R-free      "               "
  Chunk 2342618c sz=      952  R-free      "               "
  Chunk 23800050 sz=     1040  R-free      "               "
  Chunk 23400050 sz=     2824  R-free      "               "
  Chunk 25bff028 sz=     4032  R-free      "               "
  Chunk 293ff788 sz=     2144  R-free      "               "

  Chunk 23430a40 sz=     4564  R-free      "               "

 Reserved bucket 3 size=8460
 Reserved bucket 4 size=8464
 Reserved bucket 5 size=8468
 Reserved bucket 6 size=8472
  Chunk 2342b988 sz=     9136  R-free      "               "
 Reserved bucket 7 size=9296
 Reserved bucket 8 size=9300
 Reserved bucket 9 size=12320
 Reserved bucket 10 size=12324
 Reserved bucket 11 size=16396
  Chunk 234161f8 sz=    16448  R-free      "               "
 Reserved bucket 12 size=32780
 Reserved bucket 13 size=65548
  Chunk 23401d50 sz=    72296  R-free      "               "
  Chunk 23815668 sz=   125312  R-free      "               "
  Chunk 23c00050 sz=   180380  R-free      "               "
 Reserved bucket 14 size=1990652
,用了0.6M
######################


shared pool LRU鏈上掛的都是recreate、freeabl狀態的chunk,一個SQL語句可能需要多個CHUNK,在LRU鏈上找到recreate狀態的chunk,然後在recreate狀態的chunk下再下掛freeabl狀態的CHUNK,--避免全部CHUNK在LRU鏈上導致LRU鏈太長。
TRACE檔案中找到關於(lru first)的一段,方法同上:
 Reserved bucket 14 size=1990652
Total reserved free space   =  6712468

     --狀態為空白, SIZE是348位元組,狀態,
  Chunk 237cb10c sz=     4096    recreate  "KGLH0^b9197c6e "  latch=(nil)
  Chunk 24bb5df0 sz=      364    recreate  "KGLHD          "  latch=(nil)
  Chunk 241aa1b8 sz=     4096    recreate  "KGLH0^59449e50 "  latch=(nil)
  Chunk 252640a0 sz=      364    recreate  "KGLHD          "  latch=(nil)
  Chunk 23a619a0 sz=     4096    recreate  "KGLH0^d5f1e0d7 "  latch=(nil)
   Chunk 23465600 sz=      348    recreate  "KGLHD          "  latch=(nil)
  Chunk 2346575c sz=     1036    recreate  "KGLHD          "  latch=(nil)
  Chunk 23465b68 sz=     4096    recreate  "KGLH0^c6e0d102 "  latch=(nil)   recreate狀態CHUNK下的多個freeable狀態CHUNK
     ds 24bdecb0 sz=     4096 ct=        1
    "SQLA^1536bb77  "  ds=0x23db5bd8
   "KGLDA          "
  "KGLH0^ba3f9b05 "  ds=0x2425e238

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.