劉 暢
[摘要]通過對E-START股票交易系統(tǒng)的調(diào)整和優(yōu)化,實現(xiàn)縮短查詢響應(yīng)時間,系統(tǒng)的客戶端查詢速度也得到明顯的提高。
[關(guān)鍵詞]數(shù)據(jù)庫 性能優(yōu)化 SQL Server
中圖分類號:TP3 文獻標(biāo)識碼:A 文章編號:1671-7597(2009)0110051-01
隨著現(xiàn)代計算機科學(xué)技術(shù)的發(fā)展和信息應(yīng)用系統(tǒng)信息量的增大,數(shù)據(jù)庫已逐步成為計算機信息系統(tǒng)和計算機應(yīng)用系統(tǒng)的基礎(chǔ)和核心,而數(shù)據(jù)庫性能問題的重要性也越來越引起人們的關(guān)注。這樣,提出了基于SQL Server數(shù)據(jù)庫應(yīng)用系統(tǒng)如何進行性能調(diào)整的問題。性能調(diào)整的步驟如下:
1.優(yōu)化業(yè)務(wù)邏輯;2.調(diào)整數(shù)據(jù)結(jié)構(gòu)設(shè)計;3.調(diào)整應(yīng)用程序結(jié)構(gòu);4.優(yōu)化數(shù)據(jù)庫的邏輯結(jié)構(gòu);5.優(yōu)化數(shù)據(jù)庫的操作;6.數(shù)據(jù)庫服務(wù)器性能調(diào)整。
一、基于E-START股票交易系統(tǒng)的數(shù)據(jù)庫性能調(diào)整分析
針對在數(shù)據(jù)庫使用過程中出現(xiàn)的問題,結(jié)合現(xiàn)有的數(shù)據(jù)庫調(diào)整措施和優(yōu)化技術(shù),對原E-START系統(tǒng)數(shù)據(jù)庫制定了以下調(diào)整步驟:
1.優(yōu)化數(shù)據(jù)庫設(shè)計調(diào)整。針對出現(xiàn)的系統(tǒng)運行效率低的問題,結(jié)合已有的業(yè)務(wù)邏輯,對原系統(tǒng)的相應(yīng)數(shù)據(jù)庫邏輯設(shè)計和物理結(jié)構(gòu)做出合理的調(diào)整。
2.客戶端應(yīng)用程序調(diào)整。針對客戶的遇到的查詢等待問題,對應(yīng)用程序中影響查詢效率的不合理的設(shè)計進行調(diào)整,包括:SQL查詢語句的優(yōu)化、應(yīng)用程序的調(diào)整、合理地增加存儲過程。
3.服務(wù)器性能調(diào)整。針對使用過程中系統(tǒng)資源消耗大、運行成本高的問題,通過對數(shù)據(jù)庫服務(wù)器硬件性能瓶頸的分析和調(diào)整及對SQL Server與操作系統(tǒng)參數(shù)的合理配置優(yōu)化服務(wù)器性能。
二、數(shù)據(jù)庫設(shè)計調(diào)整
(一)邏輯數(shù)據(jù)庫設(shè)計調(diào)整
可以從以下幾個方面來精練數(shù)據(jù)庫的邏輯設(shè)計:
1.在適當(dāng)?shù)牡胤讲捎梅匆?guī)范形式;2.在適當(dāng)?shù)牡胤椒指畋恚?.在適當(dāng)?shù)牡胤桨驯磉M行分組放入數(shù)據(jù)庫;4.執(zhí)行完整性約束。
(二)調(diào)整物理數(shù)據(jù)庫設(shè)計
對本項目物理數(shù)據(jù)庫設(shè)計的調(diào)整兩條關(guān)鍵性的指導(dǎo)原則如下:將序列訪問的文件分離到專用的磁盤上,并通過將數(shù)據(jù)文件分散到各個磁盤上而允許并行I/O。
1.?dāng)?shù)據(jù)庫功能分配。該E-START股票交易系統(tǒng)升級項目采用的開發(fā)平臺為Windows 2000,數(shù)據(jù)庫為Microsoft SQL Server 2000。E-START系統(tǒng)的原數(shù)據(jù)庫包括兩個數(shù)據(jù)庫實例。
對SQL Sever 2000系統(tǒng)功能上可以按四種系統(tǒng)數(shù)據(jù)庫和應(yīng)用數(shù)據(jù)庫進行功能分配:master數(shù)據(jù)庫、tempdb數(shù)據(jù)庫,model數(shù)據(jù)庫、msdb數(shù)據(jù)庫、mbr_db應(yīng)用數(shù)據(jù)庫和E_START應(yīng)用數(shù)據(jù)庫。
master數(shù)據(jù)庫記錄SQL Server系統(tǒng)的所有系統(tǒng)級別信息。tempdb數(shù)據(jù)庫保存所有的臨時表和臨時存儲過程,還滿足任何其它的臨時存儲要求。默認(rèn)情況下,在SQL Server在運行時tempdb數(shù)據(jù)庫會根據(jù)需要自動增長。不過,與其它數(shù)據(jù)庫不同,每次啟動數(shù)據(jù)庫引擎時,它會重置為其初始大小。model數(shù)據(jù)庫用作在系統(tǒng)上創(chuàng)建的所有數(shù)據(jù)庫的模板。msdb數(shù)據(jù)庫供SQL Server代理程序調(diào)度警報和作業(yè)以及記錄操作員時使用。
2.優(yōu)化 tempdb 性能。對tempdb 數(shù)據(jù)庫的物理位置和數(shù)據(jù)庫選項設(shè)置的調(diào)整包括:
(1)使用SQL Server企業(yè)管理器將tempdb數(shù)據(jù)庫設(shè)為允許自動根據(jù)需求進行擴展。(2)將tempdb數(shù)據(jù)庫文件的初始大小由原來的16MB調(diào)整到30MB,這是比較合理的大小,避免了當(dāng)需要更多空間時文件自動擴展。(3)將文件增長增量百分比由原來的10%調(diào)整到20%,以避免tempdb數(shù)據(jù)庫文件按太小的值增長。(4)建議將tempdb數(shù)據(jù)庫放在快速I/O子系統(tǒng)上以確保好的性能。
(三)創(chuàng)建索引
可以在不影響數(shù)據(jù)庫架構(gòu)和應(yīng)用程序設(shè)計的情況下除去、添加和更改索引。高效的索引設(shè)計對獲得好的性能極為重要。正因為如此,應(yīng)該盡量試驗不同的索引。索引優(yōu)化向?qū)Э煞治霾樵儾⒔ㄗh應(yīng)該創(chuàng)建的索引。
關(guān)于創(chuàng)建索引的建議如下:
1.將更新盡可能多的行的查詢寫入單個語句內(nèi),而不要使用多個查詢更新相同的行。僅使用一個語句,就可以利用優(yōu)化的索引維護。
2.使用索引優(yōu)化向?qū)Х治霾樵儾@得索引建議。
3.對聚集索引使用整型鍵。另外,在唯一列、非空列或IDENTITY列上創(chuàng)建聚集索引可以獲得性能收益。
4.在查詢經(jīng)常用到的所有列上創(chuàng)建非聚集索引。這可以最大程度地利用隱蔽查詢。
5.物理創(chuàng)建索引所需的時間在很大程度上取決于磁盤子系統(tǒng)。
三、E-START股票交易系統(tǒng)客戶端應(yīng)用程序調(diào)整
(一)系統(tǒng)架構(gòu)的調(diào)整
由于本項目要將原有的VB6.0系統(tǒng)升級到VB.NET,必然導(dǎo)致整個系統(tǒng)架構(gòu)的調(diào)整,即把系統(tǒng)劃分為各種不同功能的層次結(jié)構(gòu),在對原有業(yè)務(wù)邏輯進行充分調(diào)研后,調(diào)整后的系統(tǒng)架構(gòu)包含以下幾個層次:
1. UI(用戶接口)層:保持與原VB6.0系統(tǒng)中E-Start客戶端界面一致;2. Controller(控制)層:主要功能是接收UI層的請求,根據(jù)請求調(diào)用相應(yīng)的業(yè)務(wù)邏輯,并把業(yè)務(wù)邏輯處理的結(jié)果返回給客戶端;3. Business(業(yè)務(wù))層:這層主要處理實際的業(yè)務(wù)邏輯,可以通過調(diào)用Entity(實體)層對數(shù)據(jù)庫進行訪問。本層可以重用;4. Entity(實體)層:處于業(yè)務(wù)層與數(shù)據(jù)庫之間,為業(yè)務(wù)層提供數(shù)據(jù)訪問操作;5. Framework(架構(gòu))層:提供必要的錯誤處理、日志、XML處理、通信服務(wù)、ExcelTalk和Spread的通用功能。
(二)優(yōu)化SQL語句
1.SQL語句的優(yōu)化分析。選擇最有效率的表名順序;WHERE子句中的連接順序;用EXISTS替代IN;優(yōu)化GROUP BY。
2.使用優(yōu)化器優(yōu)化SQL語句。由于SQL語言是面向結(jié)果而不是面向過程的查詢語言,所以一般支持SQL語言的大型關(guān)系型數(shù)據(jù)庫都需要使用一個基于成本的優(yōu)化器,為即時查詢提供一個最佳的執(zhí)行策略。對于優(yōu)化器,輸入是一條查詢語句,輸出是一個執(zhí)行策略。這個執(zhí)行策略是執(zhí)行這個查詢所需要的一系列步驟。數(shù)據(jù)庫的反應(yīng)速度經(jīng)常就體現(xiàn)在這一個優(yōu)化算法上。
四、結(jié)論
對數(shù)據(jù)庫性能問題進行深入研究,提出關(guān)于數(shù)據(jù)庫性能調(diào)整與優(yōu)化的具體方法和措施,對于解決數(shù)據(jù)庫瓶頸了保證數(shù)據(jù)庫穩(wěn)定高效運行具有關(guān)鍵作用,也有著良好的理論與應(yīng)用價值。從某一具體項目來看,服務(wù)器參數(shù)配置,SQL語句優(yōu)化和存儲過程使用都是常用的調(diào)整技術(shù),但就一般性的原則來說,數(shù)據(jù)庫性能調(diào)整問題是貫穿數(shù)據(jù)庫應(yīng)用系統(tǒng)整個生命周期的活動,從系統(tǒng)規(guī)劃、程序編寫、系統(tǒng)測試、運行維護都需要涉及性能調(diào)整技術(shù)。
參考文獻:
[1]Art Taylor著,JDBC數(shù)據(jù)庫編程與J2EE,電子工業(yè)出版社,2004.
[2]朱慶偉、吳宇紅,一種對象/關(guān)系映射框架的分析和應(yīng)用,電子科技,2004.
[3]田珂、謝世波、方馬,J2EE數(shù)據(jù)持久層的解決方案,計算機工程,2003.