SQL Server語句的自動優化工具

iSQlServer發表於2008-12-23
在資料庫應用系統中編寫可執行的sql語句可以有多種方式實現,但哪一條是最佳方案卻難以確定。為了解決這一問題,有必要對sql實施優化。

  簡單地說,sql語句的優化就是將效能低下的sql語句轉換成達到同樣目的的效能更好的sql語句。 優化sql語句的原因 資料庫系統的生命週期可以分成: 設計、開發和成品三個階段。在設計階段進行優化的成本最低,收益最大。

  在成品階段進行優化的成本最高,收益最小。如果將一個資料庫系統比喻成一座樓房,在樓房建好後進行矯正往往成本很高而收效很小(甚至可能根本無法矯正),而在樓房設計、生產階段控制好每塊磚瓦的質量就能達到花費小而見效高的目的。 為了獲得最大效益,人們常需要對資料庫進行優化。

  資料庫的優化通常可以通過對網路、硬體、作業系統、資料庫引數和應用程式的優化來進行。根據統計,對網路、硬體、作業系統、資料庫引數進行優化所獲得的效能提升全部加起來只佔資料庫應用系統效能提升的40%左右,其餘60%的系統效能提升全部來自對應用程式的優化。許多優化專家甚至認為對應用程式的優化可以得到80%的系統效能提升。因此可以肯定,通過優化應用程式來對資料庫系統進行優化能獲得更大的收益。 對應用程式的優化通常可分為兩個方面: 原始碼的優化和sql語句的優化。

 

  由於涉及到對程式邏輯的改變,原始碼的優化在時間成本和風險上代價很高(尤其是對正在使用中的系統進行優化) 。

  另一方面,原始碼的優化對資料庫系統效能的提升收效有限,因為應用程式對資料庫的操作最終要表現為sql語句對資料庫的操作。 對sql語句進行優化有以下一些直接原因:

 

 

  1. sql語句是對資料庫(資料) 進行操作的惟一途徑,應用程式的執行最終要歸結為sql語句的執行,sql語句的效率對資料庫系統的效能起到了決定性的作用。 

 

 

  2. sql語句消耗了70%~90%的資料庫資源。 

 

 

  3. sql語句獨立於程式設計邏輯,對sql語句進行優化不會影響程式邏輯,相對於對程式原始碼的優化,對sql語句的優化在時間成本和風險上的代價都很低。 

 

  4. sql語句可以有不同的寫法,不同的寫法在效能上的差異可能很大。 

 

  5. sql語句易學,難精通。sql語句的效能往往同實際執行系統的資料庫結構、記錄數量等有關,不存在普遍適用的規律來提升效能。 傳統的優化方法 sql程式人員在傳統上採用手工重寫來對sql語句進行優化。這主要依靠dba或資深程式設計師對sql語句執行計劃的分析,依靠經驗,嘗試重寫sql語句,然後對結果和效能進行比較以試圖找到效能較佳的sql語句。

 

 

  這種做法存在著以下不足: 

  1. 無法找出sql語句的所有可能寫法。很可能花費了大量的時間也無法找到效能較佳的sql語句。即便找到了某個效能較佳的sql語句也無法知道是否存在效能更好的寫法。 

 

  2. 非常依賴於人的經驗,經驗的多寡往往決定了優化後sql語句的效能。

 

  3. 非常耗時間。重寫--&gt校驗正確性--&gt比較效能,這一迴圈過程需要大量的時間。 根據傳統的sql優化工具的功能,人們一般將優化工具分為以下三代產品: 第一代的sql優化工具是執行計劃分析工具。這類工具對輸入的sql語句從資料庫提取執行計劃,並解釋執行計劃中關鍵字的含義。 第二代的sql優化工具只能提供增加索引的建議,它通過對輸入的sql語句的執行計劃的分析來產生是否要增加索引的建議。這類工具存在著致命的缺點——只分析了一條sql語句就得出增加某個索引的結論,根本不理會(實際上也無法評估到)增加的索引對整體資料庫系統效能的影響。 第三代工具是利用人工智慧實現自動sql優化。 人工智慧自動sql優化 隨著人工智慧技術的發展和在資料庫優化領域應用的深入,在20世紀90年代末優化技術取得了突破性的進展,出現了人工智慧自動sql優化。

  

  人工智慧自動sql優化的本質就是藉助人工智慧技術,自動對sql語句進行重寫,找到效能最好的等效sql語句。lecco sql expert就採用了這種人工智慧技術,其sql expert支援oracle、sybase、ms sql server和ibm db2資料庫平臺。其突出特點是自動優化sql語句。除此以外,還可以以人工智慧知識庫“反饋式搜尋引擎”來重寫sql語句,並找出所有等效的sql語句及可能的執行計劃,通過測試執行為應用程式和資料庫自動找到效能最好的sql語句,提供微秒級的計時; 能夠優化web應用程式和有大量使用者的線上事務處理中執行時間很短的sql語句; 能通過比較源sql和待選sql的不同之處,為開發人員提供“邊做邊學式訓練”,迅速提高開發人員的sql程式設計技能等等。 該工具針對資料庫應用的開發和維護階段提供了數個特別的模組:sql語法優化器、pl/sql整合化開發除錯環境(ide)、掃描器、資料庫監視器等。其核心模組之一“sql 語法優化器”的工作原理大致如下:輸入一條源sql語句,“人工智慧反饋式搜尋引擎”對輸入的sql語句結合檢測到的資料庫結構和索引進行重寫,產生n條等效的sql語句輸出,產生的n條等效sql語句再送入“人工智慧反饋式搜尋引擎”進行重寫,直至無法產生新的輸出或搜尋限額滿,接下來對輸出的sql語句進行過濾,選出具有不同執行計劃的sql語句(不同的執行計劃意味著不同的執行效率),最後,對得到的sql語句進行批量測試,找出效能最好的sql語句(參見下圖)。 lecco sql expert不僅能夠找到最佳的sql語句,它所提供的“邊做邊學式訓練”還能夠教會開發人員和資料庫管理員如何寫出效能最好的sql語句。lecco sql expert的sql語句自動優化功能使sql的優化變得極其簡單,只要能夠寫出sql語句,它就能幫開發人員找到最好效能的寫法。 

 

 

  小 結 

  sql語句是資料庫應用中一個非常關鍵的部分,它執行效能的高低直接影響著應用程式的執行效率。正因為如此,人們在sql語句的優化上投入了很大的精力,出現了許多sql語句優化工具。隨著人工智慧等相關技術的日益成熟, 肯定還會有更多更好的工具出現,這將會給開發人員提供更多的幫助。 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-520856/,如需轉載,請註明出處,否則將追究法律責任。

相關文章