DB2 9 pureXML 以原生階層格式存儲查詢 XML,支援 SQL/XML、XQuery、XML 索引與 Schema 驗證。傳統 DB2 效能指南仍適用,但 XML 專屬優化關鍵。本文彙整 15 大實務提示(不分優先序),涵蓋設計、配置、查詢、索引、統計、應用開發等面向。
依預期存取主要粒度決定文檔大小。部門級應用→每部門一檔;員工獨立存取→每員工一檔。傾向較細粒度:索引過濾更精準、DOM 解析更快。屬性 vs 元素:元素可重複巢狀、可擴充;屬性較短、DB2 可優化存取。優先遵循資料建模需求,效能收益為副產品。
DMS 表空間優於 SMS。文檔超過單頁會分區塊儲存,頁面越大(4K/8K/16K/32K)分塊越少,插入與全文檢索越快。經驗法則:頁面大小 ≥ 2×平均文檔大小,且 ≤ 32KB。混合關聯與 XML 資料時,16KB/8KB 兼顧兩者。
若 XML 需大頁面、關聯資料需小頁面,建表時用 LONG IN 導向不同頁面大小的表空間。範例:關聯資料 4KB 表空間,XML 欄位 32KB 表空間。避免不必要的多頁面大小增加管理複雜度。
ALTER TABLE ... APPEND ON 追加模式避免尋找空閒空間LOGBUFSZ、LOGFILSIZ,日誌用快速 I/O 裝置ACTIVATE NOT LOGGED INITIALLY 避免日誌(失敗表不可用)COMMITCOUNT 設較大值(≥100)或省略讓 DB2 自動決定IMPORT:各連線加 ALLOW WRITE ACCESS,用 SKIPCOUNT/ROWCOUNT 分割輸入檔-o cio 掛載)DB2 9 新增 XDA(XML Data Area)存儲對象,快照監視器提供獨立緩衝池/I/O/臨時空間計數器(Buffer pool xda logical/physical reads 等),方便隔離分析 XML 活動。XDA 物理/邏輯讀比率低 = 緩衝命中率高。
插入時驗證會增加 CPU 消耗(中等複雜度 Schema 可增 50%),降低吞吐量。若應用層已驗證,DB2 層可略過;若資料來源不可信,須付出 CPU 代價換取合規性。
/customerinfo/phone 優於 //phone 或 /*/phone。完整路徑讓 DB2 直達目標元素,避免掃描無關子樹。// 可能誤抓巢狀同名元素(如 assistant/phone),導致語義錯誤。
/customerinfo/name 精確索引優於 //name(含 assistant/name)。精準索引:體積小、讀取快、寫入維護少。//text() 全文索引極昂貴,僅適合低寫入、不可預測查詢負載。
XMLEXISTS 而非 XMLQUERYXMLQUERY 謂詞不排除列,返回空序列列,無法使用索引。正確寫法:SELECT XMLQUERY(...) FROM t WHERE XMLEXISTS(...),利用索引過濾列、避免空列開銷。
XMLEXISTS 用方括號避免布林謂詞XMLEXISTS('$i/customerinfo[phone="..."]') 正確;XMLEXISTS('$i/customerinfo/phone="..."') 永遠 true(布林值非空序列)。多謂詞同理:[cond1 and cond2] 而非 cond1 and cond2。
RUNSTATS 收集 XML 統計資訊優化器依賴 XML/索引統計產生執行計畫。EXCLUDING XML COLUMNS 可僅刷新關聯統計。大表用抽樣:TABLESAMPLE SYSTEM (10)(頁級、省 I/O)或 BERNOULLI (15)(列級、精確)。
視圖保留關聯欄位,查詢時用關聯謂詞(如 WHERE UnitID='WWPR')而非 XML 謂詞,避免全表建構 XML 後再過濾。
查詢 XMLTABLE 視圖時,用 XMLEXISTS 過濾 XML 欄位,而非對產生的關聯欄位(如 Zip)篩選,後者會先全量展開再過濾。
編譯優化佔比高時,預備陳述式 + 參數標記(cast(? as varchar(12)))僅編譯一次。XQuery 不支援外部參數,但 XMLQUERY/XMLTABLE/XMLEXISTS 支援傳遞 SQL 參數給內嵌 XQuery 變數。
優先用二進制應用程式變數類型(CLI: SQL_C_BINARY;Java: setBinaryStream/getBinaryStream),採內部編碼(BOM/Encoding Declaration),避免外部編碼(應用程式碼頁)觸發轉換。大文檔檢索用 XMLSERIALIZE(info as BLOB(1M)) 顯式序列化為 BLOB,避免 CLOB 碼頁問題。
先啟用 DB2 自治功能(自治儲存、自調優記憶體)獲開箱即用效能,再針對觀測到的瓶頸套用上述提示。診斷工具:Visual Explain、db2exfmt、快照監視器。修復效能問題先找根因,對症下藥。