布合力其木·艾爾
摘要:當(dāng)前,企事業(yè)單位日常工作越來越離不開各種信息管理系統(tǒng)的支持,而數(shù)據(jù)庫性能優(yōu)化問題則長期得不到良好解決。該文針對(duì)信息管理系統(tǒng)運(yùn)行中SQL Server 2008數(shù)據(jù)庫瓶頸問題進(jìn)行分析研究,提出數(shù)據(jù)庫性能優(yōu)化和性能調(diào)整方案,對(duì)促進(jìn)信息管理系統(tǒng)的高效應(yīng)用有著十分重要的現(xiàn)實(shí)意義。
關(guān)鍵詞:SQL Server 2008數(shù)據(jù)庫;數(shù)據(jù)庫優(yōu)化;性能優(yōu)化
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)06-0003-03
SQL Server 2008數(shù)據(jù)庫性能對(duì)其可用性和可靠性有著重要影響,大部分?jǐn)?shù)據(jù)庫系統(tǒng)在長期運(yùn)行的環(huán)境下都會(huì)產(chǎn)生性能問題,這些性能問題包括數(shù)據(jù)庫服務(wù)器、內(nèi)存、硬件設(shè)備、軟件系統(tǒng)等多個(gè)方面。由此,對(duì)SQL Server 2008數(shù)據(jù)庫系統(tǒng)進(jìn)行性能優(yōu)化和調(diào)整,對(duì)于促進(jìn)數(shù)據(jù)庫系統(tǒng)的高效運(yùn)行有著重要左右。SQL Server 2008數(shù)據(jù)庫的性能優(yōu)化與調(diào)整設(shè)計(jì)多個(gè)層次和不同方面,必須進(jìn)行統(tǒng)一規(guī)劃,分步實(shí)施,再根據(jù)系統(tǒng)分析做出適當(dāng)調(diào)著,這樣能夠有效提高數(shù)據(jù)庫系統(tǒng)的可用性和穩(wěn)定性,徹底解決性能瓶頸問題,從根本上節(jié)約系統(tǒng)開銷。
1 SQL Server 2008數(shù)據(jù)庫優(yōu)化的目標(biāo)
1.1 提高吞吐量
SQL Server 2008數(shù)據(jù)庫系統(tǒng)吞吐量指的是規(guī)定時(shí)間內(nèi)服務(wù)器能夠處理的數(shù)據(jù)總數(shù),即每個(gè)單元時(shí)間內(nèi)實(shí)現(xiàn)的工作量,單元時(shí)間以秒計(jì)算,該值越高代表吞吐量越高。數(shù)據(jù)庫系統(tǒng)吞吐量的提高主要包括兩種方法:一是在相同的數(shù)據(jù)資源環(huán)境下產(chǎn)生更多工作量;二是降低總體反應(yīng)時(shí)間,實(shí)現(xiàn)完成工作量速度的提高,此時(shí)可以增加用戶等待的資源,例如增加CPU數(shù)量等。在同一個(gè)SQL Server 2008數(shù)據(jù)庫系統(tǒng)中,提高吞吐量和縮短反應(yīng)時(shí)間相互對(duì)立。如果延長反應(yīng)時(shí)間,則吞吐量高;如果縮短反應(yīng)時(shí)間,則吞吐量低。多個(gè)用戶在相同時(shí)間內(nèi)使用數(shù)據(jù)庫系統(tǒng),每個(gè)用戶的吞吐事務(wù)量量會(huì)更大,但要等待的時(shí)間卻需要延長。相反,如果減少在相同時(shí)間內(nèi)使用數(shù)據(jù)庫系統(tǒng)的用戶數(shù)量,每個(gè)用戶的反應(yīng)時(shí)間會(huì)縮短,但吞吐事務(wù)量的總數(shù)也將降低。
1.2 縮短響應(yīng)時(shí)間
SQL Server 2008數(shù)據(jù)庫系統(tǒng)響應(yīng)時(shí)間指的當(dāng)用戶完成最后一個(gè)提交指令動(dòng)作后,全部數(shù)據(jù)呈現(xiàn)在顯示器上的所需時(shí)間。系統(tǒng)響應(yīng)時(shí)間通常以秒計(jì)算,數(shù)值越低越好。數(shù)據(jù)庫系統(tǒng)的響應(yīng)時(shí)間本質(zhì)是用戶等待終端后臺(tái)處理事務(wù)量耗費(fèi)的時(shí)間,也是用戶當(dāng)用戶出現(xiàn)被處理事務(wù)直觀反應(yīng)時(shí)的時(shí)間量。SQL Server 2008數(shù)據(jù)庫系統(tǒng)的響應(yīng)時(shí)間包括服務(wù)時(shí)間和等待時(shí)間,系統(tǒng)服務(wù)時(shí)間與用戶等待時(shí)間的總和作為系統(tǒng)響應(yīng)時(shí)間。由此可見,縮短數(shù)據(jù)庫系統(tǒng)響應(yīng)時(shí)間主要包括兩種方法:一是提高數(shù)據(jù)庫的吞吐量,降低系統(tǒng)服務(wù)時(shí)間;減少同時(shí)訪問數(shù)據(jù)庫的用戶數(shù)量,降低用戶等段時(shí)間。
1.3 支持更多用戶
在對(duì)SQL Server 2008數(shù)據(jù)庫系統(tǒng)進(jìn)行調(diào)整配置時(shí),必須考慮到該數(shù)據(jù)庫系統(tǒng)與其他系統(tǒng)、客戶端的連通能力。對(duì)于為了提高與大量客戶連通能力而調(diào)整數(shù)據(jù)庫系統(tǒng)的操作來說,終端內(nèi)存也是不可忽視的重點(diǎn)因素。管理員需要明確了解用戶對(duì)終端內(nèi)存的使用需求,保證在高峰時(shí)期內(nèi)用戶對(duì)數(shù)據(jù)庫系統(tǒng)的操作不會(huì)溢出。此時(shí),系統(tǒng)管理員可以增加一些內(nèi)存配置,以滿足用戶的訪問需求,但需要實(shí)時(shí)監(jiān)控操作系統(tǒng)資源變化情況。同時(shí),系統(tǒng)管理員也可以根據(jù)自己的實(shí)際工作經(jīng)驗(yàn)對(duì)用戶所需系統(tǒng)資源進(jìn)行判斷,盡量控制用戶對(duì)系統(tǒng)資源的需求量,時(shí)刻監(jiān)控資源使用情況。隨著用戶數(shù)量的不斷增加,系統(tǒng)管理員要重新調(diào)整資源分配量,確保做到心中有數(shù)。
1.4 提高容錯(cuò)能力
對(duì)于SQL Server 2008數(shù)據(jù)庫系統(tǒng)來說,容錯(cuò)能力是體現(xiàn)系統(tǒng)性能的重點(diǎn)。對(duì)于中大型企業(yè)來說,數(shù)據(jù)庫系統(tǒng)的停止運(yùn)行在任何情況下都是災(zāi)難性的。因此,系統(tǒng)管理員需要做到定期檢查和備份數(shù)據(jù)庫,以此來提高數(shù)據(jù)庫系統(tǒng)的容錯(cuò)能力。當(dāng)對(duì)SQL Server 2008數(shù)據(jù)庫系統(tǒng)的容錯(cuò)能力要求較高時(shí),數(shù)據(jù)庫系統(tǒng)的優(yōu)化調(diào)整必須注意以下兩點(diǎn):一是數(shù)據(jù)庫系統(tǒng)的配置應(yīng)該選擇RAID磁盤陣列,減少磁盤陣列發(fā)生故障的次數(shù);二是應(yīng)該配置ECC內(nèi)存來確保數(shù)據(jù)庫系統(tǒng)的容錯(cuò)性。對(duì)于要求SQL Server 2008數(shù)據(jù)庫7*24小時(shí)不間斷運(yùn)行的企業(yè)來說,系統(tǒng)管理員要及時(shí)配置冗余備份系統(tǒng),確保當(dāng)主機(jī)停機(jī)時(shí)備用系統(tǒng)能夠立刻啟動(dòng)。
1.5 縮短加載時(shí)間
很多SQL Server 2008數(shù)據(jù)庫系統(tǒng)運(yùn)行有著以下需求:白天數(shù)據(jù)庫系統(tǒng)正常運(yùn)行,夜間某個(gè)時(shí)段將部分?jǐn)?shù)據(jù)量上載到系統(tǒng)中,使系統(tǒng)能在第二天對(duì)其進(jìn)行處理。通常情況下,數(shù)據(jù)上載時(shí)間是有限且固定的,在這段時(shí)間內(nèi)必須完成。如果要確保系統(tǒng)上載數(shù)據(jù)對(duì)時(shí)間控制的要求,系統(tǒng)管理員需要額外配置硬件設(shè)備,導(dǎo)致整體成本的提高。因此,系統(tǒng)管理員需要對(duì)I/O子系統(tǒng)進(jìn)行適當(dāng)調(diào)整,進(jìn)而縮短數(shù)據(jù)加載耗費(fèi)的時(shí)間。但是,I/O子系統(tǒng)的調(diào)整也可能會(huì)對(duì)系統(tǒng)其他方面帶來影響,在縮短數(shù)據(jù)加載的同時(shí),及時(shí)優(yōu)化數(shù)據(jù)庫系統(tǒng)運(yùn)行性能,其影響程度可降至最低。
2 SQL Server 2008數(shù)據(jù)庫常見的瓶頸問題
2.1 CPU問題
CPU是支持終端運(yùn)行的重要設(shè)備,如果CPU運(yùn)行長期處于極限狀態(tài),那么CPU就成為了整個(gè)系統(tǒng)的瓶頸問題,尤其是同一時(shí)間內(nèi)用戶對(duì)系統(tǒng)資源進(jìn)行訪問時(shí),CPU的計(jì)算處理能力至關(guān)重要。一般情況下,雖然由操作系統(tǒng)內(nèi)核負(fù)責(zé)分配CPU資源給SQL Server 2008數(shù)據(jù)庫系統(tǒng)使用,但當(dāng)進(jìn)程較多時(shí),很容易帶來CPU“卡死”的問題。
2.2 內(nèi)存問題
當(dāng)計(jì)算機(jī)系統(tǒng)運(yùn)行時(shí),請(qǐng)求數(shù)據(jù)和等待數(shù)據(jù)全都暫時(shí)存儲(chǔ)在系統(tǒng)內(nèi)存中。如果系統(tǒng)內(nèi)存不足,很容易造成高速緩沖區(qū)命中率低,用戶請(qǐng)求的數(shù)據(jù)不再緩沖區(qū)中,使計(jì)算機(jī)操作系統(tǒng)頻繁換頁,進(jìn)一步增加了I/O子系統(tǒng)的開銷,最終出現(xiàn)數(shù)據(jù)庫系統(tǒng)瓶頸問題。
2.3 存儲(chǔ)設(shè)備問題
存儲(chǔ)SQL Server 2008數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)信息的設(shè)備包括CD-ROM驅(qū)動(dòng)器、硬盤驅(qū)動(dòng)器等。系統(tǒng)在單元時(shí)間內(nèi)處理I/O數(shù)量是固定不變的,當(dāng)CPU運(yùn)行中要求I/O速率超過系統(tǒng)速率時(shí),就會(huì)帶來存儲(chǔ)設(shè)備瓶頸問題的發(fā)生。
2.4 網(wǎng)絡(luò)傳輸問題
當(dāng)網(wǎng)絡(luò)負(fù)荷量過大,網(wǎng)絡(luò)數(shù)據(jù)傳輸速度無法達(dá)到網(wǎng)絡(luò)部件提出的需求時(shí),網(wǎng)絡(luò)瓶頸問題就會(huì)出現(xiàn)。只有降低SQL Server 2008數(shù)據(jù)庫系統(tǒng)的吞吐量,延長響應(yīng)時(shí)間,才能解決該問題。
3 SQL Server 2008數(shù)據(jù)庫數(shù)性能優(yōu)化的實(shí)施
3.1 優(yōu)化數(shù)據(jù)庫設(shè)計(jì)
要實(shí)現(xiàn)SQL Server 2008數(shù)據(jù)庫系統(tǒng)的最佳性能,關(guān)鍵在數(shù)據(jù)庫設(shè)計(jì)時(shí)要有一個(gè)完善的設(shè)計(jì)方案。數(shù)據(jù)庫設(shè)計(jì)方案要先于信息管理系統(tǒng)開發(fā)之前完成。雖然SQL Server 2008數(shù)據(jù)庫系統(tǒng)本身已經(jīng)針對(duì)自身進(jìn)行了性能調(diào)節(jié),但如果數(shù)據(jù)庫設(shè)計(jì)存在結(jié)構(gòu)問題,后期無論如何對(duì)數(shù)據(jù)庫系統(tǒng)進(jìn)行性能優(yōu)化和調(diào)整都無法取得良好效果。因此,只有確保數(shù)據(jù)庫設(shè)計(jì)的邏輯設(shè)計(jì)與物理設(shè)計(jì)功能完善,結(jié)構(gòu)合理,才能真正提高SQL Server 2008數(shù)據(jù)庫系統(tǒng)性能。
3.2 優(yōu)化應(yīng)用程序結(jié)構(gòu)
在信息管理系統(tǒng)開發(fā)之前,要根據(jù)用戶實(shí)際需求設(shè)計(jì)SQL Server 2008數(shù)據(jù)庫體系結(jié)構(gòu)。傳統(tǒng)的C/S架構(gòu)模式適用于用戶數(shù)量少、開發(fā)規(guī)模小、網(wǎng)絡(luò)運(yùn)行環(huán)境安全的單一數(shù)據(jù)庫設(shè)計(jì);如果用戶數(shù)量較多,系統(tǒng)資源有限,不能時(shí)刻確保網(wǎng)絡(luò)運(yùn)行環(huán)境安全,在高峰時(shí)期會(huì)出現(xiàn)大量客戶提出訪問請(qǐng)求的情況下,可以采用多體系B/S架構(gòu)模式完成數(shù)據(jù)庫設(shè)計(jì)。
3.3 優(yōu)化應(yīng)用程序
據(jù)調(diào)查研究顯示,對(duì)SQL Server 2008數(shù)據(jù)庫硬件設(shè)備、操作系統(tǒng)、網(wǎng)絡(luò)環(huán)境和數(shù)據(jù)參數(shù)的優(yōu)化獲得的性能提升只占總體性能提升的40%左右,剩余60%左右的數(shù)據(jù)庫系統(tǒng)性能提升全部來源于對(duì)應(yīng)用程序的優(yōu)化和調(diào)整。應(yīng)用程序的性能優(yōu)化包括兩個(gè)方面:SQL語句和源代碼。SQL語句占用數(shù)據(jù)庫系統(tǒng)資源的80%左右,應(yīng)用程序?qū)?shù)據(jù)庫系統(tǒng)的請(qǐng)求的實(shí)質(zhì)是SQL語句對(duì)數(shù)據(jù)庫系統(tǒng)的請(qǐng)求,SQL語句的處理效率直接對(duì)數(shù)據(jù)庫系統(tǒng)性能產(chǎn)生影響。因此,對(duì)不合理的SQL語句進(jìn)行優(yōu)化調(diào)整能夠切實(shí)提高數(shù)據(jù)庫系統(tǒng)的內(nèi)存命中率,降低網(wǎng)絡(luò)帶寬占用比,從而進(jìn)一步顯著改善數(shù)據(jù)庫系統(tǒng)性能。
3.4 調(diào)整內(nèi)存分配
SQL Server 2008數(shù)據(jù)庫系統(tǒng)內(nèi)存包括可共享內(nèi)存、運(yùn)行時(shí)內(nèi)存和永久性內(nèi)存,這三種內(nèi)存的合理分配使用才能實(shí)現(xiàn)最優(yōu)性能。通常情況下包括兩條調(diào)整原則:一是使分配的內(nèi)存獲得最大收益,致力于解決利益最大化的問題;二是使分配的內(nèi)存之間競(jìng)爭最小化,數(shù)據(jù)庫瓶頸問題主要是延遲等待,應(yīng)該盡可能解決這個(gè)問題。
3.5 優(yōu)化操作系統(tǒng)性能
SQL Server 2008數(shù)據(jù)庫服務(wù)器的性能與操作系統(tǒng)實(shí)際性能有著直接聯(lián)系。因此,針對(duì)操作系統(tǒng)進(jìn)行優(yōu)化調(diào)整的目的是為了減少內(nèi)存交換和分頁。如果必須以增加內(nèi)存交換和分頁來達(dá)到獲取更多內(nèi)存的目的,不但無法產(chǎn)生良好效果,甚至?xí)M(jìn)一步降低數(shù)據(jù)庫系統(tǒng)性能。由此可見,對(duì)操作系統(tǒng)的優(yōu)化調(diào)整包括以下幾個(gè)方面:首先,為SQL Server 2008數(shù)據(jù)庫規(guī)劃資源;其次,更換調(diào)整系統(tǒng)內(nèi)存配置;最后,在數(shù)據(jù)庫服務(wù)器中設(shè)置進(jìn)程優(yōu)先級(jí)別。
4 產(chǎn)品訂單信息管理系統(tǒng)數(shù)據(jù)庫優(yōu)化設(shè)計(jì)方案
4.1 系統(tǒng)開發(fā)模式
本文以某企業(yè)產(chǎn)品訂單信息管理系統(tǒng)為例,分析了在系統(tǒng)開發(fā)設(shè)計(jì)中如何做到優(yōu)化數(shù)據(jù)庫性能。
目前,在信息管理系統(tǒng)設(shè)計(jì)中普遍采用的開發(fā)模式包括C/S模式和B/S模式兩種,分別是客戶機(jī)/服務(wù)器和瀏覽器/服務(wù)器模式。C/S開發(fā)模式能夠?qū)⑷蝿?wù)進(jìn)行合理分配,在分別給客戶機(jī)端和服務(wù)器端,這種方式充分利用了兩端硬件設(shè)備資源,同時(shí)降低了系統(tǒng)資源開銷,早期開發(fā)的信息管理系統(tǒng)大多采用C/S開發(fā)模式。B/S開發(fā)模式是針對(duì)C/S模式的改進(jìn),可以實(shí)現(xiàn)通過瀏覽器呈現(xiàn)用戶界面,部分事務(wù)邏輯能夠在瀏覽器前端實(shí)現(xiàn),主要事務(wù)邏輯在服務(wù)器后端實(shí)現(xiàn),以此形成了三層體系架構(gòu)方式。因此,產(chǎn)品訂單信息管理系統(tǒng)應(yīng)該采用B/S開發(fā)模式,確保系統(tǒng)界面友好,可靠性強(qiáng),易于維護(hù)。
4.2 系統(tǒng)開發(fā)平臺(tái)
1)服務(wù)器端
操作系統(tǒng):Windows 7
數(shù)據(jù)庫系統(tǒng):SQL Server 2008
2)客戶端
操作系統(tǒng):Windows 7
開發(fā)語言:SQL Server 2008
4.3 數(shù)據(jù)庫設(shè)計(jì)
企業(yè)產(chǎn)品訂單信息管理系統(tǒng)的數(shù)據(jù)庫設(shè)計(jì)是否完善對(duì)系統(tǒng)性能有著重大影響。由此,系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)應(yīng)該借鑒大型數(shù)據(jù)庫的設(shè)計(jì)原則和流程。在數(shù)據(jù)庫系統(tǒng)的整個(gè)生命周期中,設(shè)計(jì)最初時(shí)期要爭取實(shí)現(xiàn)數(shù)據(jù)庫性能優(yōu)化的效益最大化,因此,企業(yè)產(chǎn)品訂單信息管理系統(tǒng)的數(shù)據(jù)庫模式采用3NF標(biāo)準(zhǔn),允許出現(xiàn)部分冗余數(shù)據(jù)。
數(shù)據(jù)庫表設(shè)計(jì)中包括用戶基本信息表、用戶詳細(xì)信息表、產(chǎn)品基本信息表、產(chǎn)品詳細(xì)信息表、訂單基本信息表和訂單詳細(xì)信息表,這6張數(shù)據(jù)庫表共占1M存儲(chǔ)空間。
用戶基本信息表:主鍵是用戶編號(hào)。表中包括了在該企業(yè)訂購過產(chǎn)品的用戶信息。
用戶詳細(xì)信息表:主鍵和外鍵都是用戶編號(hào)。該表存儲(chǔ)在企業(yè)訂購過產(chǎn)品的用戶的個(gè)人信息,包括姓名、性別、手機(jī)號(hào)碼、收貨地址和郵箱等。
產(chǎn)品基本信息表:主鍵是產(chǎn)品編號(hào)。表中包括各種產(chǎn)品的采購時(shí)間、采購數(shù)量、庫存數(shù)量、采購人員信息。
產(chǎn)品詳細(xì)信息表:主鍵和外鍵都是產(chǎn)品編號(hào)。該表用于存儲(chǔ)產(chǎn)品詳細(xì)信息,包括產(chǎn)品名稱、所屬類別、保質(zhì)時(shí)間、價(jià)格變動(dòng)等。
訂單基本信息表:主鍵是訂單編號(hào),外鍵是用戶編號(hào)。該表用于存儲(chǔ)每個(gè)訂單產(chǎn)生的精確時(shí)間、用戶編號(hào)、訂單受理人員等信息。
訂單詳細(xì)信息表:主鍵和外鍵都是訂單編號(hào)和產(chǎn)品編號(hào)。該表用于存儲(chǔ)每一筆訂單生成時(shí)產(chǎn)生的產(chǎn)品編號(hào)、產(chǎn)品名稱、產(chǎn)品訂購數(shù)量等信息。
參考文獻(xiàn):
[1] 陳忠菊. 試論SQL server數(shù)據(jù)庫的優(yōu)化探索[J]. 科技創(chuàng)新導(dǎo)報(bào),2015(14):41.
[2] 王強(qiáng). 大數(shù)據(jù)背景下基于B-樹結(jié)構(gòu)的SQL Server數(shù)據(jù)優(yōu)化策略研究[J]. 電腦知識(shí)與技術(shù),2015(14):4-5.
[3] 陳林琳. SQL Server數(shù)據(jù)庫系統(tǒng)的性能優(yōu)化策略研究[J]. 網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2014(12):37+39.
[4] 王學(xué)慧. 基于SQL Server的數(shù)據(jù)庫應(yīng)用系統(tǒng)性能優(yōu)化研究[J]. 電子科學(xué)技術(shù),2015(1):95-99.
[5] 周濤,楊麗紅,張軍, 等. SQL Server2005大型數(shù)據(jù)庫優(yōu)化之表分區(qū)詳解[J]. 云南大學(xué)學(xué)報(bào):自然科學(xué)版,2013(S2):59-62.