DB2 Spatial Extender 自 7.1 版起支援空間資料存儲管理,但 DB2 引擎無內建空間資料型型別,調優時需考慮更多因素。本文詳述基礎調優步驟:Configuration Advisor 基線、Inline Length 設定、空間資料叢集、索引與表空間選擇。測試環境:ThinkPad T30 (1.2GHz, 1GB), SUSE Linux 9.3, DB2 UDB 8.2 FP9。
右鍵資料庫啟動 Configuration Advisor,回答關鍵問題:
套用建議後:緩衝池從 250 頁增至 1000 頁,包快取/編目快取/排序堆疊均優化,導入效能 +11%,查詢 +28%,建立索引 -10%。
圖1 啟動 Configuration Advisor
圖2 Configuration Advisor 建議
空間值封裝於 ST_Geometry 結構型別。大小差異極大:單點約 245 bytes,複雜多邊形可達 1 MB。DB2 採混合儲存:
VARCHAR FOR BIT DATA 內聯儲存於資料頁,享受緩衝池快取經驗法則:將 Inline Length 設得盡可能大,讓更多值內聯儲存。
建立結構型別時 DB2 依屬性計算預設值,可在 SYSCAT.DATATYPES.INLINE_LENGTH 查詢。建表未指定則沿用預設。修改現有欄位:
ALTER TABLE ... ALTER COLUMN ... SET INLINE LENGTH <new_value>;
-- 必須配合 REORG TABLE ... LONGLOBDATA 才轉換既有 LOB 為內聯值
受限於頁面大小 (4K/8K/16K/32K) 與其他欄位長度。以 4K 頁面為例,扣除行首碼、其他欄位、NULL 指標後,空間欄位最大約 3891 bytes。若需更大,將表放入 8K/16K/32K 表空間。僅能增加不能減少,若需較小值必須建表時指定。
ST_Geometry 含 16 屬性,其中 points 為 BLOB 儲存幾何座標。整個結構序列化為單一二進位流,再依 Inline Length 決定內聯或 LOBified。此機制讓短 LOB 也能受惠於緩衝池。
-- 內聯值寬度
SELECT 197 + LENGTH(geometry..points) FROM spatial_data;
-- 統計內聯/LOBified 比例
SELECT SUM(inline) AS inline, COUNT(*) - SUM(inline) AS lobified
FROM (SELECT CASE WHEN 197 + LENGTH(geometry..points) <= <inline_length> THEN 1 ELSE 0 END FROM spatial_data) AS t(inline);
結論:較大 Inline Length 大幅減少直接磁碟 I/O,提升載入與查詢效能。
依空間屬性 (如幾何中心點在空間填充曲線上的值) 叢集資料,使鄰近幾何體物理鄰近,減少查詢掃描頁數。步驟:
REORG TABLE 依該索引重組因 REORG 不直接支援空間索引,此法繞過限制實現空間叢集。
基礎調優三大支柱:Configuration Advisor 建立基線、Inline Length 最大化內聯比例、空間填充曲線叢集資料。下篇將深入空間索引調優、表空間選擇與進階 SQL 改寫。