Informix-Online 動態伺服器(IDS,Informix-Online Dynamic Server)作為Informix資料庫產品技術的核心,以其動態可伸縮體繫結構,高效的平行處理能力、共用記憶體技術及易管理性等特點,將硬體資源發揮得淋漓盡致。當前IDS V7正廣泛地應用於我國金融、郵政、電信等行業的關鍵系統中,隨著應用的不斷深入,資料的積累,查詢的複雜化,查詢速度會變慢,致使回應時間過長。許多使用者將其歸結為硬體的原因,於是升級改造,或重新投資,資料庫的調優並沒有引起足夠的重視。這其實是一種浪費,與國外發達國家輕硬體、重應用的思路正好相反。實踐表明,資料庫的不合理配置和不適當最佳化是其效能下降的主要因素。實施對IDS上資料庫的管理維護、效能調優是系統管理員的主要工作,而能否得以良好的查詢響應則集中體現了資料庫的效能,因此也是調優的重點。從系統管理的角度,我們可以設定多線索、合理分配共用記憶體空間、建立資料庫和表的分布及分區管理等來加快查詢速度,但最終還要基於對資料庫本身的全面理解,因為資料處於不斷的變化和積累之中,並且隨著應用的深入查詢將日趨複雜化。本文從資料管理的角度闡述了幾種查詢最佳化策略,實際應用中有很好的收效,現說明如下。
一、查詢的分類及要求
針對語句中所涉及的資料庫表的數目查詢可分為:單表查詢、多表查詢、聯集查詢、子查詢等,多表查詢建立在多張表的串連之上,分嵌套迴圈、合并排序、雜湊串連三種方式,最為複雜,也是調優的重點。目前資料庫的應用分為聯機交易處理(OLTP,Online Transaction Processing)和決策支援系統(DSS,Decision Support System)兩大類型,它們對查詢的要求不盡相同。OLTP主要涉及單張表,SQL語句簡單,資料按索引讀取,查詢行數少,對響應的時間要求非常苛刻,常在秒級或以下,多用於線上即時業務;DSS涉及多張表之間的串連查詢,SQL語句複雜,資料按物理順序讀取,查詢行數多,回應時間長,多用於建立在資料倉儲技術之上的複雜的資料分析。但無論何種情況,我們都希望最快的響應速度,這也是調優的最終目標。
二、查詢的最佳化策略
1.充分利用查詢最佳化工具
查詢最佳化工具提供了資料查詢的最佳化策略分析和選擇方式,通過設定相關參數,最佳化器能夠選擇最佳的串連策略,並在所有的查詢路徑中找出一條最優路徑。選擇良好的路徑是查詢最佳化中至關重要的一環,一條好的路徑可以掃描最少的記錄,以最少的磁碟I/O得到正確的查詢結果。可通過以下步驟進行。
(1)設定串連策略
通過修改設定檔$ONCONFIG中的OPTCOMPIND參數值來實現。
OPTCOMPIND 0:在串連中最佳化器只選擇索引串連。
OPTCOMPIND 1:若交易處理為可重複讀模式(Repeatable Read),則選擇索引策略,否則,最佳化器自動選擇開銷最低的串連策略。
OPTCOMPIND 2:最佳化器自動選擇開銷最低的串連策略。應盡量選擇該參數。
(2)設定查詢最佳化的模式
也即選擇最優的查詢路徑,通過執行以下SQL語句來實現,格式為:
SET OPTIMIZATION [ HIGH | LOW | FIRST_ROWS | ALL_ROWS ]
其中,HIGH是預設選項,表示對所有查詢路徑都進行檢測,從中選擇最優。
LOW表示採用深度優先法僅在部分路徑中選擇最優,即在每次串連比較中,遇到最優路徑就繼續深入而濾掉非最優路徑,特點是最佳化時間短,但路徑準確率低。
FIRST_ROWS和ALL_ROWS是自IDS V7.3開始增加的新選項,無論對OLTP還是DSS都非常有用。傳統的查詢(即ALL_ROWS方式)一次將所有查詢結果輸出到共用記憶體緩衝區中,時間的消耗非常大,然而實踐表明,大部分使用者僅關注最初的幾屏輸出內容,因此FIRST_ROWS選項為我們提供了很好的選擇。FIRST_ROWS指導最佳化器選擇一條查詢路徑,使其只輸出填滿一個緩衝區的記錄數,如果使用者繼續查詢則繼續執行,這樣避免了不必要的輸出結果和時間浪費,也使查詢速度大大提高。
由此可見,最佳化器的豐富功能為我們提供了靈活的手段,管理員可以根據不同應用情況選擇最佳的方式,既能達到最佳的查詢效果,又能將由此而造成的系統開銷降至最低。