為了減少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的大小
留言列表