首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 z/OS 資料庫設計效能指南:從邏輯模型到物理實現的完整最佳實務

     編輯:DB2 教學

前言:設計階段決定效能上限

資料庫效能 80% 決定於開發早期的設計決策。本文針對 DB2 for z/OS (V7/V8) 環境,系統梳理邏輯/物理設計、表空間選型、分區策略、索引設計、緩衝池配置、並行處理等關鍵領域的效能準則,作為設計評審與效能基線建立的參考框架。

效能管理方法論

  • 何時考慮效能:需求分析/邏輯設計階段即介入,而非測試前夕。
  • 聚焦關鍵負載:佔業務量大、響應時間敏感、邏輯複雜、資料量大、資源消耗高、面向客戶的交易/查詢/批次。
  • 建立基線:專案早期建立符合 SLA 的效能基線測量,持續追蹤趨勢。
  • 預防勝於治療:設計期投入 1 點成本 = 實施期 10 點 = 生產期 100 點。

邏輯 vs 物理設計

  • 邏輯模型:正規化、正確性、一致性、非冗余的理想藍圖(通常為 3NF)。
  • 物理模型:在邏輯基礎上,針對存取路徑、效能、儲存特性進行轉換——核心為表設計與索引設計。
  • 物理設計允許受控的反正規化(複製常用欄位、預聚合、物化視圖),但必須完整文檔化理由。

經驗法則(ROT)的正確態度

  • ROT 僅供粗略估算,不可當精確事實引用。
  • 必須在自身環境驗證、校準、文檔化,建立專屬 ROT 庫。
  • 硬體、軟體、DB2 版本演進會使 RUT 失效,需定期重驗。

DB2 工作負載分類與 GETPAGE 核心指標

GETPAGE 請求數 是 DB2 總工作量最佳指標,優於單純 I/O 計數。

表空間類型選型決策樹

負載類型SQL 特徵並發/量級關鍵指標
交易簡單、短小極高並發、毫秒級響應GETPAGE 率、緩衝池命中率、鎖等待
查詢/決策支援複雜、多表連接、排序低並發、分鐘/小時級掃描量、排序溢出、並行度
批次/實用程式大量連續處理窗口內集中、資源佔用高日誌量、I/O 頻寬、完成時間窗口

原則:大表優先分區;中小表分段;簡單表空間棄用。LOB 必用 LOB 表空間。

記錄長度與頁面大小優化

  • 固定長度優於可變長度:避免列遷移、額外頁引用。V8 支援 ALTER COLUMN SET DATA TYPE 擴寬固定長度,減少 VARCHAR 需求。
  • 頁面大小選擇:4K(預設,適合短列、隨機存取)→ 8K/16K/32K(長列 > 4K、或固定長度略超 4K/2/3/4 導致單頁僅存 1 列、空間浪費嚴重)。
  • 頁面大小由表空間指定的緩衝池決定,非 CREATE TABLE 直接指定。

大表設計雙核心:分區 + 索引

分區表空間六大效能紅利

  1. 查詢 I/O 並行(V3+):多 I/O 路徑並發讀取分區。
  2. Sysplex 查詢並行(V5+):跨成員並行。
  3. CP 並行(V4+):多任務並行處理。
  4. 分區級實用程式並發:LOAD/REORG/COPY 單分區操作,其餘分區可用。
  5. 熱數據隔離:高頻訪問分區置快速 DASD/SSD。
  6. 分區消除:謂詞含分區鍵首欄 → 僅掃描相關分區。

分區設計鐵律

  • 分區鍵選擇極少更新的欄位(更新導致跨分區移動)。
  • 分區大小均勻(資料傾斜會拖慢並行)。
  • 連接謂詞使用分區鍵時,連接雙方分區數、邊界值必須一致(共置連接)。
  • V8 表控制分區:CREATE TABLE ... PARTITION BY ... 定義邊界,索引與叢集獨立,靈活度大增。

資料壓縮:權衡 CPU 與 I/O

類型容納表數分區方式適用場景效能優勢
簡單多表無(頁級混存)極少用,不推薦—
分段多表段(每段專屬一表)中小表、多表共存鎖隔離、掃描只讀相關段、Drop/Truncate 即時釋放段、Mass Delete 高效
分區單表分區索引鍵範圍大表、歷史資料、需並行查詢/CP/Sysplex 並行、分區級實用程式並發、熱數據置快磁碟、滾入滾出
LOB僅 LOB—BLOB/CLOB/DBCLOB大物件專用儲存
因素有利於壓縮不利於壓縮
列長度短列、固定長度接近頁面大小(無法多列/頁)
表大小大表(字典開銷可攤銷)極小表(字典 8-64KB 佔比大)
資料模式高重複字串、低基數高熵、隨機、已加密/壓縮
CPU 成本硬體壓縮(zEDC)大幅降低軟體模擬消耗高
字典品質REORG 採樣建字典 > LOAD 僅前 N 列—

建議:大多數大表壓縮收益 > CPU 成本,優先啟用;使用 DSN1COMP 預估壓縮率。

大表裝載最佳實務

  • 手動多 LOAD 任務(每分區一任務)或單 LOAD 多分區,展開 I/O 並行。
  • 指定 SORTKEYS:索引鍵進記憶體排序,避免寫排序工作檔、允許 Load/排序重疊。
  • 單表單 LOAD、長任務給高優先級、工作分散到 Sysplex。
  • 輔助索引 (NPI) 指定 PIECESIZE 拆分多資料集,並行掃描/建立。
  • LOG NO + 載入成功後 立即映像拷貝。

空閒空間 (FREEPAGE/PCTFREE) 策略

插入模式PCTFREEFREEPAGEREORG 頻率
唯讀00永不
隨機插入、低頻預設 (表 5%, 索引 10%)0監控 REORG 需求動態調整
隨機插入、高頻大於預設視列長度考慮較頻繁
尾端插入、列長固定00永不(物理順序=叢集順序)
尾端插入、可變長/壓縮視監控 NEARINDREF/FARINDREF 調整—依趨勢
熱點插入(集中位置)大幅增加考慮使用嚴密監控、極頻繁

監控指標:SYSIBM.SYSTABLEPART.NEARINDREF、FARINDREF、REORG ... INDREFLIMIT REPORTONLY。

索引設計:從理想到務實

理想索引三步驟

  1. WHERE 欄位全覆蓋,放索引前段 → 最大化 MATCHCOLS。
  2. ORDER BY 欄位順序一致 → 消除排序(PLAN_TABLE 無 SORT*)。
  3. SELECT 欄位全覆蓋 → INDEXONLY = Y,避免回表。

現實取捨

  • 架構限制:索引欄數上限、索引鍵長度上限。
  • 維護成本:每次 INSERT/UPDATE/DELETE 需同步更新所有索引。
  • 務實選擇:覆蓋 WHERE + ORDER BY,SELECT 欄位視覆蓋率與維護成本權衡。

分區索引與 PIECESIZE

  • V7:索引控制分區(CREATE INDEX ... PART ...),分區/索引/叢集糾纏。
  • V8:表控制分區(CREATE TABLE ... PARTITION BY ...),三者解耦,設計自由度大增。
  • PIECESIZE:非分區索引 (NPI) 拆分多資料集(256KB-64GB,2 的冪),促進並行掃描、減少 I/O 爭用、可控制資料集放置於不同控制單元。

並行處理:三代演進與配置要點

代數特性啟用條件收益對象
V3 查詢 I/O 並行單查詢多 I/O 請求並發分區表空間、DEGREE(ANY)I/O 密集型查詢
V4 CP 並行單查詢多任務並行分區表空間、DEGREE(ANY)CPU 密集型查詢
V5 Sysplex 查詢並行跨成員多任務並行Data Sharing、DEGREE(ANY)大型唯讀查詢

並行配置清單

  1. DSNTIP4 MAX DEGREE 設合理上限(防虛擬儲存耗盡)。
  2. BIND PLAN/PACKAGE DEGREE(ANY) 或動態 SET CURRENT DEGREE = ANY。
  3. 分區盡量均勻(DB2 按最大分區劃邏輯塊)。
  4. 分配足夠 CP 與 I/O 路徑/裝置。
  5. I/O 密集型:分區數 = 可用 I/O 路徑數;CPU 密集型:分區數 = 分配 CP 數。
  6. 表空間/索引分區分離放置、隔開控制單元。
  7. 定時 RUNSTATS 取得分區級統計。
  8. 監控虛擬緩衝池門檻與使用率。

緩衝池:效能最關鍵資源

  • 目標:最小化同步讀(隨機 I/O),異步預取通常值得。
  • GETPAGE : 同步讀 比率 < 10:1 → 需擴大緩衝池。
  • 多緩衝池策略:
  1. 表空間與索引分池(減少索引 I/O)。
  2. 按存取模式分池:批次/查詢 (順序) vs OLTP (隨機),利用不同 LRU 門檻。
  3. 獨立應用專屬池(隔離監控/測試)。
  4. 排序工作檔專屬池。
  5. 小而頻繁更新表專屬大池(同時減少讀寫 I/O)。
  6. 唯讀參考表專屬池(常駐、高命中)。

調大科學法:漸增 VPSIZE → 觀察 DASD I/O 持續下降、換頁率可接受 → 停止。

結語

周詳的物理設計是效能的基石,必須在開發早期啟動。DB2 功能增強(V8 表控制分區、硬體壓縮、Sysplex 並行)與硬體演進(zEDC、SSD、大記憶體)持續改寫最佳實務邊界。保持學習、驗證、文檔化,讓設計決策經得起時間考驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved