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