DB2 UDB 8.1 可運行於簡單單一系統或複雜客戶-伺服器環境。效能反映電腦系統執行指定任務的具體表現,主要度量:系統回應時間、計算能力、可用性。每項度量受硬體、系統/資料庫配置、並發使用者數與類型、應用負載等多因素影響。
調校需有組織、有目標、可量測,避免盲目試錯。DBA 應從以下層面逐步調校:系統環境配置 → 實例配置 → 資料庫配置 → 資料庫設計 → 應用程式設計。本文聚焦系統環境配置(Linux/UNIX/Windows),後續文章將覆蓋其餘層面。
DB2 安裝後使用一組登錄變數配置系統,部分對效能關鍵,部分影響微乎其微。修改這些變數影響整個系統,須謹慎操作。
| 變數 | 預設 | 說明與建議 |
|---|---|---|
DB2_APM_PERFORMANCE | OFF | 控制存取計畫管理器 (APM) 是否調整 SQL 快取行為。僅非生產環境設 ON。ON 時會出現 "Out of package cache" 錯誤、記憶體用量增加、PRECOMPILE/BIND/REBIND 無法執行、套件無法失效/執行。 |
DB2_AVOID_PREFETCH | OFF | 災難復原期間是否執行預讀。ON 時停用預讀。 |
DB2BPVARS | - | 指定緩衝池調校參數檔位置,含 NO_NT_SCATTER、NT_SCATTER_DMSFILE、NT_SCATTER_DMSDEVICE、NT_SCATTER_SMS、NUMPREFETCHQUEUES、PREFETCHQUEUESIZE。_SCATTER 參數預設 0 (OFF),控制表空間容器 scatter read;其他參數提升預讀效能。註:Windows 下 DB2NTNOCACHE=ON 時 _SCATTER 參數始可設 ON。 |
DB2CHKPTR | OFF | 是否執行輸入指標檢查。 |
DB2_ENABLE_BUFPD | OFF | 是否使用中間緩衝改進查詢效能。 |
DB2_EXTENDED_OPTIMIZATION | OFF | 查詢優化器是否使用優化擴展改進查詢效能。 |
DB2MAXFSCRSEARCH | 5 | 插入記錄時搜尋可用空間控制記錄 (FSCR) 數量。-1 搜尋全部。小值優化插入速度,大值優化空間重用。範圍 -1 或 1~33554。 |
DB2MEMMAXFREE | 8,388,608 bytes | 每個 DB2 代理程式保留可用記憶體上限。範圍 0~2.0e+32 bytes。 |
DB2_OVERRIDE_BPF | 空 | 指定資料庫啟動或首次連線時建立的緩衝池大小(4K 頁數)。記憶體不足導致故障時極有用(真實記憶體不足或配置不當)。 |
DB2PRIORITIES | 平台相關 | 控制 DB2 行程與執行緒優先權。 |
DB2_SORT_AFTER_TQ | NO | 分區資料庫環境下,接收端要求排序且節點數相等時優化器與表佇列協作模式。NO:傳送端排序+接收端合併;YES:接收端收齊後排序。 |
DB2_STPROC_LOOKUP_FIRST | OFF | DB2 伺服器是否先在 sqllib/function、sqllib/function/unfenced 目錄查找再執行 DARI/預存程序目錄查找。 |
DB2_HASH_JOIN | NO | 編譯存取計畫時是否允許 Hash Join。 |
DB2_PARALLEL_IO | NULL | 讀寫表空間容器時是否使用並行 I/O。值為 * 或 NULL。 |
DB2_STRIPED_CONTAINERS | NULL | 表空間容器 ID 標籤是否佔用部分/全部 RAID 磁碟條帶。RAID 裝置建立表空間時擴展大小等於或為條帶大小倍數,但頁容器標記導致擴展無法對齊條帶。設 ON 可避免存取過多實體磁碟。注意:此變數說明與 DB2_PARALLEL_IO 關聯緊密。 |
| 變數 | 預設 | 說明 |
|---|---|---|
DB2MEMDISCLAIM | YES | AIX 專用。YES 時程式結束釋放部分/全部記憶體(依 DB2MEMMAXFREE)。空值釋放全部,有值釋放至上限。保證記憶體可被其他程序使用。 |
DB2_MMAP_READ | YES | AIX 專用。搭配 DB2_MMAP_WRITE,允許 DB2 for AIX 使用 mmap 作為 I/O 交錯法,避免多程序寫入同檔不同扇區造成 OS 鎖定。 |
DB2_MMAP_WRITE | YES | AIX 專用。同上,作為 I/O 預備方法。 |
DB2_PINNED_BP | - | AIX/HP-UX。指定資料庫使用的全域記憶體(含緩衝池)是否鎖定在系統主記憶體以獲更穩定效能。 |
| 變數 | 預設值 | 說明 |
|---|---|---|
DB2NTMEMSIZE | DBMS: 16,777,216 FCM: 22,020,096 DBAT: 33,554,432 APLD: 16,777,216 | Windows 要求所有共用記憶體片段初始化時儲於動態連結庫以保證位址匹配。多數情況預設值足夠。 |
DB2NTNOCACHE | OFF | 檔案系統快取是否執行(不含 LONG/LOB 資料)。關閉可釋放更多記憶體給緩衝池/排序堆。 |
DB2NTPRICLASS | NULL | 配合 DB2PRIORITIES 設定 DB2 實例程序 (DB2SYSCS.EXE) 優先權類別:NORMAL_PRIORITY_CLASS(預設)、REALTIME_PRIORITY_CLASS(R)、HIGH_PRIORITY_CLASS(H)。值為 R/H/其他。 |
DB2NTWORKSET | 1,1 | DB2 可用的最小/最大工作集大小。預設無分頁調度時工作集隨意增大,分頁調度時限制 ~1MB。此變數可覆蓋預設。格式:最小值,最大值(0 表無上限)。 |
DB2 UDB V8.1 提供兩種方式:
db2set:db2set [選項] [變數=值]
# 選項([] 為必需,<> 為可選):
# -g 全域層級
# -i <實例名> 實例層級
# -p <分區號> 分區層級
# -a 顯示所有層級
# -l 列出已設定變數
# -v 詳細模式
# <變數>=<值> 設定變數
# <變數>= 刪除變數設定
無選項執行 db2set 將列出已設定變數與當前值。
DB2 UDB 效能調校是漫長過程。本專欄涵蓋通用調校原則與系統登錄變數配置。下一期將闡述實例與資料庫配置參數的最佳化調校方法。