周勇
同濟大學軟件學院,上海 201804
ASE(Adaptive Server Enterprise) 是Sybase公司的性能優化的智能型數據庫管理系統。作為企業級關系型數據庫的典型代表,ASE提供了強大的聯機事務處理能力和部分決策支持功能,非常適合于任務關鍵型及交易密集型應用。ASE大多運行在世界級證券公司、銀行的關鍵核心系統中,如華爾街證券交易。選用ASE為數據庫的應用系統的規模比較大,所以效率就尤為重要。如何設計一個能夠滿足用戶當前與可預見的未來的各項應用要求、性能良好的數據庫成為數據庫應用系統設計中的一個核心問題。
性能是衡量一個應用程序或在同一環境下運行的多個應用程序的效率的尺度。性能通常以響應時間和吞吐量來衡量。ASE數據庫的優化主要就是指通過對響應時間、吞吐量、硬件、及其運行的操作系統和應用程序的優化來避免存儲器I/0瓶頸、提高CPU利用率和減少資源的競爭。但是我們不能用絕對的數量級指標來定義ASE數據庫的優化。然而,我們可以用優化前后數據庫的各種性能指標的對比來衡量數據庫優化的結果。特別是SQL語句的執行速度,SQL語句帶來的系統負擔,應用的響應速度。因此,數據庫實例級的調整,大多用來解決數據庫結構性故障,相應的也能解決因為結構性故障帶來的普遍性的性能問題。然而我們注意到,用戶所真正關心的,切身感受到的執行程序響應慢的問題往往是不良的SQL語句,過期的統計數據和其導致的不良的執行計劃,不良的數據表結構,不良的應用同步鎖造成的。
高性能的CPU為數據庫提供高承載和吞吐能力,來確保充分的I/O并行性,以支持大容量的并發事件;配置管家任務以提高CPU 利用率;足夠的內存,以支持大量并發用戶所需的緩沖池、代理程序和其他共享內存對象;以及足夠大的網絡帶寬以支持工作負載。
數據庫物理文件及邏輯對象的合理分布,將影響數據庫的讀寫速度。優秀的存儲結構和合理的存取路徑可以使系統在開銷最小的情況下達到最佳性能。例如,把一個表放在某個物理設備上,再通過SYBASE ASE段把它的非簇集索引放在一個不同的物理設備上,這樣能提高性能。尤其是系統采用了多個磁盤陣列和數據分離技術的情況下,這樣做的好處更加明顯。還可以通過靜態數據和業務數據相分離、將大的對象分割存放在多個磁盤上等措施來加快訪問速度、減少I/O競爭。對DOL表和APL表的使用要合理,以減少鎖定在存儲上的不良影響。
ASE雖然是自適應服務的,但是一個性能優良、可靠的操作系統能夠適用于 Adaptive Server 的文件系統,CPU 可用性和分配到 Adaptive Server,從而使ASE的各項功能發揮的淋漓盡致。若沒有優良的操作系統來保證ASE的運行效率,那么數據庫的一切調整都將失去了意義。
查詢的處理大都是基于SQL語句,SQL是用于存取數據的根本手段,因此,SQL語句的執行效率對數據庫系統的性能起著決定性影響。高效的SQL語句能夠成倍地提高應用程序能力。一個正確設計的數據庫,由于不合理的程序設計及SQL語句,會帶來大多數性能問題。所以,要根據數據操作類型對SQL語句進行分類,還應該對數據操作進行跟蹤,找到那些最耗費資源和時間的操作,并對這些操作進行分析,找到優化的辦法。
網絡層是與將用戶連接到 Adaptive Server 的一個網絡或多個網絡相關。實際上,所有 Adaptive Server 用戶都可通過網絡訪問其數據。網絡通信量,網絡瓶頸和網絡速度,都會造成Adaptive Server 使用網絡服務的效率低下。
在數據庫中,數據都是存儲在表空間中,所以對數據統計和分析的優化首先要對表空間設計和管理的優化。一般來說ASE表空間所跨的驅動器越多、越快,則潛在的性能將越好。在下面3種情況下,使用多個表空間就是很有用:1)控制I/O,如果這些表空間可以位于不同的驅動器上的話;2)使用大小不同的頁面;3)控制緩沖池。若ASE數據庫數據統計和分析系統建立時,設計良好的數據庫管理表空間能夠提供更好的性能。如果要以一種連續的方式來訪問數據,那么采用更大的頁面大小可以獲得更好的性能;相反,如果對數據的訪問采用的是隨機方式,那么最好使用盡可能小的頁面
充足的內存可減少磁盤I/O,因為內存訪問比磁盤訪問快很多,因此提高了性能。用戶發出查詢時,數據和索引頁必須在內存中,或被讀入內存中。如果頁已駐留在內存中,則 Adaptive Server 不需要執行磁盤I/O。配置 Adaptive Server 時,內存是最重要的考慮因素。內存被各種配置參數、過程高速緩存和數據高速緩存使用。正確設置配置參數和高速緩存的值是獲得良好系統性能的關鍵。合理分配內存緩沖區,可以大大加快數據查詢速度、減少系統I/O操作。比如在那些隨機訪問或者很少訪問的表之間共享一個緩沖池,就有可能將經常訪問的行擠出到磁盤上,這樣就會影響系統的效率。所以對內存緩沖區的合理設置,可以大大加快數據查詢速度以及內存區的命中率,提高系統性能。
索引是提高數據庫性能的最重要的物理設計元素:1)索引有助于避免表掃描。無需讀取許多數據頁,少數幾個索引頁和數據頁就可以滿足眾多查詢要求;2)對于某些查詢,無需訪問數據行即可從非聚簇索引中檢索到數據;3)聚簇索引可以隨機化數據插入,避免在表的最后一頁插入熱點;4)如果索引順序與order by子句中的列順序相匹配,索引可有助于避免排序;5)對于多數分區表,可以創建具有一個索引樹的全局索引以覆蓋整個表;也可以創建具有多個索引樹的本地索引,其中每個樹覆蓋一個表分區。
雖然索引可加速數據檢索,但由于多數數據更改要求更新索引,因此,它們會減慢數據修改的速度。要進行最佳索引編制,要求我們必須了解以下幾點:1)訪問非索引堆表、帶聚簇索引表和帶非聚簇索引表的查詢行為;2)在服務器上運行的混合查詢;3)分區表上本地和全局索引的相對優勢;4)Adaptive Server 優化程序。
良好的SQL語句可以被數據庫重復使用從而減少分析時間、改善一個系統的性能、對提高數據庫內存區的命中率、減少I/O訪問等有著非常重要的意義。根據SYBASE ASE的預處理規則,SQL語句的撰寫有如下幾個優化原則:表達式寫在計算符號的右邊;在可能的情況下,提供更多的查詢條件;盡量使用>=替代>,比如:>10,建議書寫為>=11;按照索引的順序書寫查詢條件。通常可以采用下面方法優化SQL對數據操作的表現。
1)模糊匹配的避免。雖然LIKE關鍵字支持通配符匹配,技術上稱為正則表達式。但這種匹配特別耗費時間,盡量避免使用模糊匹配;
2)邏輯表達式的等價變換。如將多個OR連接的表達式轉化為ANY表達式;將ANY或ALL轉化為簡單的比較表達式;將BETWEEN…AND轉化為AND連接的表達式;將IN謂詞表達式轉換為OR連接的謂詞表達式;
3)使用臨時表空間,把表的子集在臨時表中進行排序,有助于避免多重排序操作。為了加速SQL查詢至少應該創建一個表空間供臨時段單獨使用;
4)限制動態SQL的使用,雖然動態SQL很好用,但是即使在SQL共享池中有一個完全相同的查詢值,動態SQL也會重新進行語法分析;
5)盡量使用相同的或非常類似的SQL語句進行查詢,這樣不僅充分利用內存中的已經分析的語法樹,還能使要查詢的數據在緩沖池中命中的可能性也會大大增加。
異步預取通過預測某些為數據庫活動明確定義的類所需的頁(其訪問模式是可預測的)來改善性能。在查詢需要這些頁之前發出對它們的 I/O 請求,這樣大多數的頁在查詢處理需要訪問它們時已經處于高速緩存中。為緩沖池選擇最佳池大小和預取百分比是通過異步預取獲得性能改善的關鍵。當多個應用程序同時運行時,一個經良好調優的預取系統可平衡緩沖池大小和預取限制,從而實現以下目標:1)改善系統吞吐量;2)提高使用異步預取的應用程序的性能;3)不降低未使用異步預取的應用程序的性能。
數據庫設計過程中一般會受到多種因素的制約,有些要求往往是彼此矛盾的。因此,設計結果常常是有得有失。所以設計者必須根據相應的實際情況,綜合應用以上技術,在基本合理的總體設計的基礎上,做一些優化調整,力求最大限度地滿足用戶各種各樣的需求,實現數據庫的優化設計。影響性能的因素是如此的多,而實際的應用又各不相同,設計出一個通用的優化方案是不現實的,因此在實際系統開發和維護的過程中必須針對具體運行的情況,不斷加以調整。
[1]周輝君.數據庫系統優化方法研究[J].科技信息:科學教研,2008(17).
[2]袁長河.Sybase SQLserver性能優化技術初探[J].計算機系統應用,2001.
[3]劉斌,湯曉兵,劉震,李盛恩.基于數據庫優化技術的查詢應用[J].信息技術與信息化,2008(5).