close

為了減少Disk I/O的時間,DB2從Disk 讀取資料時會一次讀取多個Extent 的資料,
DB2使用prefetching的技術去檢索(或取得),使用者可能使用的資料
Tablespace 建立時,Extent和prefetch 預設大小為32 pages


■ Get Default Extent Size and Default Prefetch Size

C:\> db2 get db cfg | grep -i ext
 Default tablespace extentsize (pages)   (DFT_EXTENT_SZ) = 32
 
C:\>  db2 get db cfg | grep pref
 Default prefetch size (pages)         (DFT_PREFETCH_SZ) = AUTOMATIC

可以透過下面兩個公式計算出適當的extent 大小
■ Calculate Extent Size

Min Extent Size = [Number of physical disks used by the tablespace * 4096 (bytes)] / Tablespace Page Size (in bytes)

Max Extent Size = 524288 (bytes) / Tablespace Page Size (in bytes)   

最合適的extent大小應該是計算出來的最小值與最大值中間,extent大小在Tablespace 建立後無法修改,
一旦決定了extent的大小,你就可以通過下面的方程來得到prefetch 大小

■ Calculate Prefetch Size

Min Prefetch Size = (Extent Size * Number of Containers Used) * Factor

Factor是一個常量,一般為3。


如果DFT_PREFETCH_SZ為AUTO, 那表示在每次Add/Drop Container 後,DB2 會自動調整Prefetch Size

prefetch size = (number of containers) X (number of physical spindles per container) X extent size


number of physical spindles per container 由DB2_PARALLEL_IO 決定

DB2_PARALLEL_IO=TablespaceID:[n],n default =6 (假設一個Container 底層有6個實體的Device)

C:\> db2set
DB2_PARALLEL_IO=*      


DB2_PARALLEL_IO=*
* 表示所有的Tablespace 都會使用 PARALLEL I/O, 由於沒有指定n ,
所以所有的Tablespace 都會使用每一個 Container 都有6個 Physical Device的預設值
亦即,每一個request 會分成6* Containers Count 的sub request , 每一個sub request 讀取的大小為extent的大小

DB2_PARALLEL_IO=*:3
* 表示所有的Tablespace 都會使用 PARALLEL I/O, 由於指定n =3 ,
所以所有的Tablespace 都會使用每一個 Container 都有3個 Physical Device的預設值
亦即,每一個request 會分成3* Containers Count 的sub request , 每一個sub request 讀取的大小為extent的大小

DB2_PARALLEL_IO=*:3,1:1
* 表示所有的Tablespace 都會使用 PARALLEL I/O, 由於指定n =3 ,
所以所有的Tablespace 都會使用每一個 Container 都有3個 Physical Device的預設值
亦即,每一個request 會分成3* Containers Count 的sub request , 每一個sub request 讀取的大小為extent的大小
ID = 1 的Tablespace 則是每一個Request 會分成 1* Containers Count 的 sub request, 每一個sub request 讀取的大小為extent的大小

arrow
arrow
    文章標籤
    [學習筆記]DB2
    全站熱搜

    rickyju 發表在 痞客邦 留言(0) 人氣()