即視即得的Oracle資料庫效能調校工具
精簡SQL指令效能管理
突破以人工try and error建立索引的傳統方式

幾乎所有的SQL指令,都可以透過等效的其他SQL指令來表示。而SQL指令可以經由調整,以便加快擷取資料速度。影響SQL指令執行效率的因素包括資料庫中資料量多寡,及資料物件的增減改變。因此在SQL語句益趨複雜,資料庫物件彼此關連性越多時,越有必要定期調整程式內的SQL敘述。DB Expert for Oracle做到分析、預測、改善等功能,便於管理資料庫效能,進而提升應用系統。它對資料庫的調校,分為兩部份,一是前端對於SQL指令的最佳化分析建議,另一項是後端資料庫內部索引(index)的規畫調整。

前端部份,首先使用Plan Version Tracker建立Master Snapshot,作為SQL Repository的參照腳本,備分第一份SQL 執行計畫(execution plan)予以分析與記錄。接著以SQL Scanner找出資料庫物件、未編譯程式或已編譯(Binary file)等文件中可執行的SQL指令;或使用SQL Inspector搜尋系統全域區(SGA,System Global Area),和前端應用程式動態產生的SQL,在不同資料庫環境中監視效能的變動,例如經歷一段時間後的資料變化量或資料庫版本更新與移植,做出第二份快照(Snapshot),並比較兩份快照,提供最佳的Oracle資料庫設定參數與索引調校。SQL Scanner可偵測的程式類型包括PowerBuilder、Java、C/C++、Delphi、VB等程式語言及其他.EXE、.DLL檔案。

SQL Editor則以獨特的Feedback Search Engine,利用樹狀結構逐一拆解SQL指令內各段敘述,提供所有語意相同、執行結果相同的SQL語法及較佳的SQL 執行計畫。解析結果會提供Oracle Cost數值:意指經由Oracle的SQL Engine拆解SQL語法所得出的成本數值;第二步,執行時間統計分析(Run Time Statistics),得出各SQL語法在模擬執行後的第一筆結果回覆時間(Response Time),和回覆結果總消耗時間(Elapsed Time),顯示該SQL指令回覆速度,再讓使用者決定如何最佳化調整。

Oracle 8i以後的版本提供存取Stored Outline的功能,其目的是在資料庫環境改變時,藉著穩定SQL 執行計畫以避免SQL效能不穩定。Stored Outlines Manager以圖形化介面管理,可最佳化處理Stored Outline,並予以群組管理與部署。

倘若針對常做全域搜尋(Full Scan)的單一欄位建立索引,調校Oracle資料庫的效果有限,一旦建立多欄位的索引,DBA很難立即做出最佳化處理,考量新的索引對既有SQL指令的影響,甚至可能必須拆解表格(Table)減低複雜度,以避免使用多重欄位索引,如此,使得索引形態受限。

DB Expert中包含了Virtual Index Simulator,模擬索引建立,分析Oracle實體索引所對應的執行計劃,節省人工逐一測試每一種索引組合的時間。它使索引組合可以方便地被測試、評估或執行,所有的索引組合都可以一併送測,找出何者可以產生最佳的SQL效能。

Multi-Set index Generator,則提供任一SQL指令的所有索引組合,每個索引組合可各自產生獨特的執行計畫,並分析Oracle實體索引所對應的執行計畫與相應的效能。

Index Impact Analyzer在不影響資料庫效能的情況下,使用Virtual Index Simulator模擬索引建立對資料庫效能產生的影響,無須實際建立索引,立即指出SQL 語法因為哪個索引的建立而受到影響,也可以指出哪一組索引能為資料庫帶來最高的效能結果;Index Impact Analyzer提供兩種索引建立最佳化的細部選項,第一種是最佳影響(Best Impact),找出可提升整體效能的索引,適用在發展中,處於壓力測試時期,或系統嚴重負載不堪的Oracle資料庫;第二種是最小影響(Less Impact),優先考慮既有資料的安全性與可靠度,提供對原先SQL指令影響最小的索引設定值,適用於已經上線的資料庫及重要的資訊應用系統。內建資料庫管理與開發工具
效能視覺化
效能調校工具的發展空間

Database Explorer提供詳盡的資料庫物件資訊,藉著滑鼠點選瀏覽就可以清楚地了解Definition、Columns、Indexes、Constraints、Privileges、Dependents、Data、Text(DB Expert 內含Object Extractor萃取該物件的資料庫定義語言(DDL))等。配合Code Finder尋找個別資料庫物件,包括Tables、Packages、Indexes、Procedures、Views、Types、Sequences、Synonyms、Functions內的文字或SQL指令。

SQL Formatter格式化SQL指令,提高可維護性,方便閱讀,它可以利用顏色區分,突顯變數、註解和不合規則的字段名稱,也可以檢查語法格式。

PL/SQL Coder是DB Expert的PL/SQL編輯工具,從Code Templates的既定語法結構或Code Store裡儲存可重複使用的程式碼,點選物件加入 (Drag and Drop) PL/SQL程式碼內;引數參考(Argument Lookup)與成員參考(Member Lookup)利用熱鍵帶出語法的提示(Hint),類似Delphi等快速應用程式開發環境(RAD)提供的Code Insight,提供相關語法的替代選擇或屬性清單;PL/SQL Debugger設置程式中斷點(Breakpoint),可依程式流程執行逐步除錯。

Oracle對於系統調校提供EXPLAIN PLAN和SQL_TRACE兩項指令,前者記錄Oracle執行SQL的方式,後者計算SQL真正執行時耗費的資源;另外是在執行時期(Run Time)由DBA啟動任一階段(session)的追蹤(trace),然而記錄檔(trace file)非常麻煩,無法以直覺的方式立即分析。

Visual Inspector 協助DBA檢視哪些SQL語法的使用正大量消耗系統效能。DB Expert異於同類產品的特色是強烈視覺,效能評比更能透過2D/3D的圖表一目了然,DBA只要透過滑鼠點選的方式,就可以立即找到降低系統效能的問題。根源上述的各項分析與模擬功能都使用Visual Inspector顯示模擬執行的結果。

在資訊系統設計初期,由於測試資料量少,即使SQL語法未經檢驗、預測與評比,貿然為程式設計師使用,也不會對資料庫產生太顯著的影響;然而步入導入階段後,資料開始大量進駐資料庫內,當初未予以最佳化調整的SQL指令,可能連累資訊系統效能。想要更動系統程式內含的SQL 指令,可能因為彈性不佳的程式設計,無法簡易地更動程式內含的SQL指令,另一方面也無法預估此一更動的SQL指令對其他的SQL指令的影響幅度。往後資料庫效能動輒得咎,DBA與程式設計師互相推卸責任,影響不可謂不大。為了防患未然,使用者需要介面更友善、效能越強大的效能調校工具,從系統的前後端著手改善,從系統開發初期到導入,全程參與,隨時調整。

我們期望這樣的效能調校工具,除了提升效能診斷的技術層面,也能關切不當SQL指令對資料庫安全的影響,目前雖然已經有偵測資料庫本身安全漏洞的軟體,卻無法防範危害系統安全的SQL指令。近年來SQL的安全威脅時有所聞,如資料隱碼(SQL Injection)是一種未做好輸入查驗(Input Validation)的問題,撰寫應用程式時,沒有對使用者的輸入做過濾與處理,程式流程將其組合成SQL指令。使用者輸入含有某些對資料庫系統有特殊意義的符號或命令時,便可能讓使用者有機會對資料庫系統下達指令,造成入侵與損失。事實上,這樣的疏漏並不是資料庫系統本身的錯誤和漏洞,而是SQL語法的彈性和程式設計師的疏忽所產生的。效能與安全是資訊系統開發人員的責任,SQL指令的正確、效率與安全,應該是資料庫效能調校工具所關切的共同焦點。文⊙李宗翰

熱門新聞

Advertisement