hsize = DB_BLOCK_SIZE - KCBH - UB4 - KTBBH - ((INITRANS - 1) * KTBIT) - KDBH
DB_BLOCK_SIZE: 從 V$PARAMETER 取得。KCBH, UB4, KTBBH, KTBIT, KDBH: 常數,從 V$TYPE_SIZE 查詢。INITRANS: 從 USER_TABLES.INI_TRANS 取得。availspace = CEIL(hsize * (1 - PCTFREE/100)) - KDBT
CEIL: 取大於等於該值的最小整數。PCTFREE: 從 USER_TABLES.PCT_FREE 取得。KDBT: 常數,從 V$TYPE_SIZE 取得 (無則用 UB4 代替)。column_size + (1 if column_size < 250 else 3)。可用 SELECT avg(vsize(col)) FROM table 估算。rowsize = 3*UB1 + SUM(欄位大小)。rowspace = MAX(UB1*3 + UB4 + SB2, rowsize) + SB2。UB1, UB4, SB2 為常數 (查 V$TYPE_SIZE)。若 Row 空間超過可用空間但小於 PCTFREE 保留空間,仍存單一 Block;若超過且無保留空間,則發生 Row Chaining,效能下降。
rows_per_block = FLOOR(availspace / rowspace)
FLOOR 取小於等於該值的最大整數。此為估算值,實際建表時 INITIAL 儲存參數建議預留更多空間。