DB2 for i5/OS V5R4 透過流行的動態 SQL 介面提供新方法提升資料庫查詢效能。SQL Call Level Interface (CLI) 引入新連線屬性,用於調整查詢優化目標。IBM Developer Kit for Java 的 JDBC 介面(Native JDBC)與 Toolbox 同樣提供可控制查詢優化目標的新連線屬性。熟悉 System i 與資料庫查詢效能分析調優者深知,控制優化目標是效能優化關鍵步驟。自 V5R4 起,這些動態介面也能運用 System i 其他地方出現的直接程式控制。本文重點討論用於設定優化目標的新 CLI 屬性。
過去,執行 SQL 陳述式的應用程式可透過幾種機制調整優化目標:
OPTIMIZATION_GOAL 選項為 *ALLIO 或 *FIRSTIO,控制整個系統或特定連線(作業)的優化目標。因預設值視 SQL 介面而異,此選項無預設值。表 1 列出各介面預設值。SQL_ALL_IO(預設)、SQL_FIRST_IO。| 介面 | 預設優化目標 |
|---|---|
| CLI | ALLIO |
| Native JDBC 驅動程式 | ALLIO |
| Toolbox JDBC 驅動程式 | FIRSTIO(擴充動態套件用 All I/O) |
| iSeries Access for Windows ODBC/OLE DB/.Net | FIRSTIO(擴充動態套件用 All I/O) |
| 嵌入式靜態 SQL | FIRSTIO |
| 嵌入式動態 SQL | ALLIO |
| QSQPRCED API | FIRSTIO |
| STRSQL 公用程式 | FIRSTIO |
| RUNSQLSTM 公用程式 | ALLIO |
新 CLI 與 JDBC 選項提供更程式化、在某些情況下更細粒度的優化目標調整方式。新 CLI 連線屬性作用範圍為整個連線,影響設定後執行的所有 SQL 查詢。這對以伺服器模式運行多執行緒的環境有利,可在多連線上使用不同優化目標,也有利於動態調優策略。注意:這些 JDBC 與 CLI 介面僅影響連接至 i5/OS V5R4 或更新版 System i 伺服器的連線。
本文不深入討論優化目標設定,但簡要說明有助理解。指定 FIRSTIO 可迫使查詢更快傳回第一頁結果;ALLIO 則以最短時間完成整個查詢。打個比方:FIRSTIO 如腳踏車,ALLIO 如飛機。去很近的地方腳踏車或許最好(幾乎無啟動成本);去較遠處雖啟動成本高,飛機仍是更好方案。對距離(查詢輸出行為)的理解,對選擇最高效選項至關重要。
本文目的之一是執行查詢並測試兩種優化設定(FIRSTIO、ALLIO)效能,驗證 CLI 環境中新設定的實際實作。iSeries Navigator 的 SQL Performance Monitor 對測量查詢啟動時間、取資料時間、總回應時間及優化器實作極有幫助。作者撰寫 CLI 程式,以任一優化目標執行 SQL 查詢,程式提供新連線屬性的 CLI 常數 SQL_FIRST_IO 與 SQL_ALL_IO。
attr = SQL_FIRST_IO;
rtnc = SQLSetConnectAttr(hdbc, SQL_ATTR_QUERY_OPTIMIZE_GOAL, &attr, 0);
可透過圖 1 所示下拉選單選擇 Monitor > Start SQL Performance Monitor 任務,從 iSeries Navigator Run SQL Scripts 介面啟動 SQL Performance Monitor。然後使用 CL 前綴呼叫包含 CLI 呼叫的 C 程式,發出 i5/OS CALL 命令。