Bucket(free list) 是如何來劃分記憶體chunk大小範圍的?

tolywang發表於2010-10-25
Oracle 10.2.0.4   

在Shared pool中,可用的chunk (free型別) 會被串起來稱為可用連結串列 (free list) .  空閒記憶體都是由空閒列表(free list)統一管理、分配的。
每個空閒的chunk都會屬於也只屬於一個空閒列表。空閒列表上的chunk的大小範圍是由bucket來劃分的。我們也可以把bucket視為一種索引,
使Oracle在查詢空閒塊時,先定位所需的空閒塊在哪個bucket的範圍內,然後在相應的空閒列表中查詢。

當某程式需要shared pool中的一個bucket時,則該程式首先到符合請求的空間大小的bucket上掃描,找到尺寸最合適的chunk , 掃描持續到
這個bucket 的最末端  .......   


問題:  如下, bucket 0  size = 44  表示bucket 0 中44 Bytes 的free chunk size , 下面包含的3個chunk sz分別
是56  (free), 60  (free) , 28  (free)  分別代表什麼, 是各個chunk的總大小 , 後面free代表啥意思 ?   44 Bytes
是指下面這三個chunk 總共剩下的free 空間 ?  Oracle是如何根據 bucket size 和 各chunk size 大小進行串聯chunk的 ?



使用一下語句dump sga 資訊:

alter session set events 'immediate trace name heapdump level 2' ;



bucket 0 size=44
  chunk  7bb0dbc sz=       56    free      "               "
  chunk  7be52d4 sz=       60    free      "               "
  chunk  7be30b8 sz=       28    free      "               "
bucket 1 size=76
bucket 2 size=96
  chunk  7b695a4 sz=      116    free      "               "

bucket 3 size=140
bucket 4 size=236
bucket 5 size=268
bucket 6 size=524
bucket 7 size=1036
bucket 8 size=2060
bucket 9 size=4108
bucket 10 size=8204
bucket 11 size=16396
bucket 12 size=32780
bucket 13 size=65548
bucket 14 size=131084
bucket 15 size=262156
bucket 16 size=524300
bucket 17 size=2097164
total free space   =      260

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-676672/,如需轉載,請註明出處,否則將追究法律責任。

相關文章