開發早期的設計決策對 DB2 應用程式與資料庫效能有巨大影響。本文為 z/OS 環境取得更好效能提供一般性指導與建議,面向 IBM 業務夥伴,整理多方資料盡可能有效表述。不追求全面覆蓋或深度細節,旨在成為處理特定安裝環境資料庫效能問題的良好起點。
範圍聚焦資料庫設計效能。DB2 效能遠不止於此,受程式編碼邏輯、實際 SQL(應用程式設計)、安裝選項、緩衝池大小、調度優先級(系統效能)等影響。類別界線有時模糊:緩衝池大小/數量通常屬系統效能,但將特定表空間/索引指派給緩衝池屬資料庫設計。假設讀者具 z/OS 環境 DB2 基礎理解。前幾頁討論效能管理基本概念準則進行「基準設定」。建議綜合性質,非總是詳細技術描述與語法,詳細信息請閱讀本地安裝 DB2 版本最新 IBM 文件。通用設計基準為 DB2 for z/OS V7。雖 V8 已 GA,但大多數客戶需數月才能用於生產系統的 V8 NFM。客戶對基於早期版本驗證的建議更有信心。將提及 V8 部分新特性從效能角度看可能影響設計。免責聲明:資訊未經正式 IBM 測試,以 AS IS 發布,使用風險自負。
應用程式與資料庫效能特性考量時機為初期設計階段——開發過程開始時。合理估計所需資源有助於早期做出恰當設計實現決策。等到後期考慮存取資料庫應用程式效能,為取得適當回應時間與批次視窗進行修改會更困難、耗時。
從效能角度設計時,將精力集中於重要 DB2 資料與程序。確定構成關鍵工作負載的應用程式或事務,以下特徵一條或多條適用:
未雨綢缪勝於亡羊補牢。設計早期納入效能因素至關重要。專案盡早建立符合 SLA 的效能「基準線」測量方法,展示與修改時追蹤效能特性與趨勢。持續監控 DB2 系統與應用程式,在大問題全面爆發前預測。許多客戶只在專案最後階段擔心效能,但無理由等待。更好做法:指定使用者介面與處理邏輯後,立即考慮資料庫設計效能特性。如建立最佳索引,以重要 DB2 工作中 SQL 謂詞為主要指南。即使開發有效初期設計,隨資料量增長或資源緊縮仍需修改。效能不合格時,較佳做法通常為現有索引增加欄位或為表新增索引(首選),而非變更表設計、修改用戶需求或反範式化表。
規劃、監控、優化 DB2 效能時經驗法則很有用,通常基於先前經驗(一段時間觀察平均值)或複雜公式簡化。重要事實:ROT 僅對粗略估計有用,詳細分析用處不大。若只在文件見到 ROT 便盡信引用為精確事實會有危險。最好情況為估計,最壞情況對特定環境不成立。應為自己環境特別開發/調節 ROT,確保與實際經驗相關而非盲目接受。開始可用特定環境外開發的 ROT,但收集分析自己系統資料後應驗證修正。IBM Redbooks 為 ROT 好參考,常作為建議包含在監控工具中。ROT 隨時間演變:硬體技術發展、軟體編程提高、系統架構變化、DB2 新版本釋出均可能降低可靠性甚至失效。
磁碟 I/O 常為影響回應時間最大因子,但透過 GETPAGE (GP) 請求更易理解底層效能問題。監控 DB2 活動分析報告時,GETPAGE 數量或許為總體工作負載最佳指標。安裝環境下許多 DB2 工作可歸為:
正規化為分析應用程式所需資料實體,轉化為設計良好結構組的格式化過程。邏輯資料模型目標:正確性、一致性、非冗餘、簡單性。關聯理論要求資料庫經正規化。連續編號規則(範式)可詳細定義正規化資料。多數專家建議遵循前三條規則,所得資料符合第三範式。反正規化意為違反表先前遵循的一或多種範式修改設計,常因效能原因進行。關聯資料庫書籍可找到詳細資訊。
定義資料庫中實際表必須在表空間建立。可定義 4 種:
固定長度記錄優於可變長度,DB2 代碼專為固定長度優化。固定長度無需從初始頁面轉移;可變長度可能不再適合初始頁需轉移,後續存取產生額外頁引用。DB2 UDB V8 新特性允許 ALTER 修改欄位寬度,即使無法確定未來資料長度增長也無需建立可變長度記錄。頁中可存放記錄數值得考慮。DB2 提供 4KB、8KB、16KB、32KB 頁寬選項。開始可選預設 4KB,行長度小或存取基本隨機更應選此。但行長度 > 4KB 需更大頁寬(DB2 不支援跨頁記錄)。行長度略大於 4KB 一半時一頁僅容一行,略大於 1/3、1/4 類似。此設計浪費 DASD 空間且多操作消耗更多資源,應考慮更大頁寬減少相對浪費。頁寬非在 CREATE TABLE 直接指定,由表空間指定緩衝池頁寬決定。詳見 CREATE TABLESPACE 語句。
邏輯模型為理想藍圖,物理模型為現實實現。正規化只關注資料意義未考慮存取效能需求。完全正規化設計在效能方面受質疑。最常見例為聯結操作:正規化將相關資訊放入不同表,應用需從多表存取。關聯資料庫透過聯結多表從一個以上表存取資訊。聯結可能消耗大量資源時間視表數量與長度。權衡方法:對經常請求欄位的多個表,複製資料與執行表聯結誰成本更高?邏輯設計過程中可無保留正規化,再加入一定程度反正規化作為潛在效能調優選擇。確定反正規化時務必完整文檔化:詳細描述採取步驟背後原因。
存取極大 DB2 表消耗大量資源:CPU、記憶體、I/O。設計大型表提升效能最重要兩件事:實現分區與建立有用索引(下文詳細討論)。
含 LOB 資料必須建立 LOB 表空間。非 LOB 資料一般在分區與分段表空間選擇,很大程度取決於儲存資料量,一定長度上取決於應用程式所需存取類型。簡單表空間已少推薦。
分段表空間相對簡單表空間效能優勢:
分區表空間潛在優勢(表達一定大小):
表越大越有理由建立為分區表。但有時為較小表建立分區表空間也有利:查找表與大分區表聯結時,查找表分區可最大化並行度。聯結謂詞用分區鍵時,需聯結的表應有相同分區數量並在相同值上斷開。
DB2 提供壓縮表空間或分區資料能力。CREATE TABLESPACE 指定 COMPRESS YES,執行 LOAD 或 REORG 實用程式實現。以較短字串替換經常出現長字串壓縮資料,建立字典映射原始長字串與替換值。儲存前壓縮與讀出時解壓需 CPU 資源。但壓縮帶來效能效益:更少空間 (DASD 與緩衝池) 儲存更多資料,減少同步讀、I/O 等。
決定是否壓縮考量:
DSN1COMP 判斷壓縮效果,詳見 Utilities Guide