李佳鐵嶺衛(wèi)生職業(yè)學院信息技術(shù)教研室
談SQL Server數(shù)據(jù)庫的性能優(yōu)化
李佳
鐵嶺衛(wèi)生職業(yè)學院信息技術(shù)教研室
在當前這個數(shù)據(jù)化、信息化的時代下,數(shù)據(jù)信息的存儲成為了一個關(guān)鍵的問題。由于數(shù)據(jù)信惠量的不斷增多,以及數(shù)據(jù)信息之間的關(guān)系日益復雜,所以傳統(tǒng)以人工的方式進行數(shù)據(jù)管理,在今天已經(jīng)完全不使用,取而代之的是數(shù)據(jù)庫來幫助人們進行數(shù)據(jù)信息的存儲與管理。數(shù)據(jù)庫最早出現(xiàn)在上世紀的五十年代早期,發(fā)展至今日,它已經(jīng)得到了非常廣泛的應用,而且相關(guān)的技術(shù)與理念較早期相比,也越來越成熟。在數(shù)據(jù)庫的應用過程當中,必須要重視其性能的優(yōu)化與發(fā)揮,這樣才能提高數(shù)據(jù)庫信息存儲與管理的效率。本文基于作者自身對數(shù)據(jù)庫的認識與應用經(jīng)驗,主要SQI Server數(shù)據(jù)庫為例,對如何進行數(shù)據(jù)庫性能優(yōu)化提出了部分探討性建議。
SQL Server 數(shù)據(jù)庫性能優(yōu)化
數(shù)據(jù)庫是一種能夠高效存儲、管理、挖掘以及分享數(shù)據(jù)信息的軟件,在當前這個數(shù)據(jù)化、信息化的時代下,各行各業(yè)都必須要應用到數(shù)據(jù)庫, 因此研究與探討如何提高數(shù)據(jù)庫的性能就具有重要的作用有意義。
1.1 提升運行效率
之所以要采用數(shù)據(jù)庫代替人工進行數(shù)據(jù)存儲與管理,一個非常重要的原因就是數(shù)據(jù)越多,人工效率就越慢,而如今的數(shù)據(jù)又越來越多,所以人工數(shù)據(jù)管理的方式注定被淘汰。人們之所以選擇數(shù)據(jù)庫來代替人工進行數(shù)據(jù)管理,就是因為數(shù)據(jù)庫的效率比人工高出很多,看中的就是數(shù)據(jù)庫的效率。不過,如果對數(shù)據(jù)庫的應用不合理,就會降低數(shù)據(jù)庫的運行效率,這就違背了人們選擇數(shù)據(jù)庫的初衷,因此必須要通過優(yōu)化數(shù)據(jù)庫性能,來保障與提升數(shù)據(jù)庫的運行效率。
1.2 提高用戶體驗
如今,人們通過互聯(lián)網(wǎng)訪問數(shù)據(jù)庫的操作越來越多,例如人們在網(wǎng)上購物的時候,有許多的數(shù)據(jù)信息都會從數(shù)據(jù)庫中提取出來,如果數(shù)據(jù)庫的性能低,就會導致用戶獲得數(shù)據(jù)信息的時間延長,降低用戶體驗,造成用戶流失。因此,必須要通過優(yōu)化數(shù)據(jù)庫性能,縮短用戶獲得數(shù)據(jù)信息的時間,提高用戶體驗,來留住用戶,保住效益[2]。
1.3 減少不必要的硬件開銷
數(shù)據(jù)庫的運行是基于硬件的,如果數(shù)據(jù)庫的性能過低,就必須要求更多的硬件作為支撐,從而加大數(shù)據(jù)庫的成本開銷。因此,必須要通過優(yōu)化數(shù)據(jù)庫性能,在有限的硬件平臺上,發(fā)揮出高效的運行效率,以減少不必要的硬件開銷。
2.1 數(shù)據(jù)庫表的優(yōu)化
在進行數(shù)據(jù)庫表的設計時,首先要遵循標準化、規(guī)范化的基本原則,如3NF標準(第三范式),這能夠在一定程度上降低數(shù)據(jù)庫的數(shù)據(jù)冗余程度,有助于數(shù)據(jù)庫的系統(tǒng)擴展,提高數(shù)據(jù)庫的性能:其次,要盡可能減少對硬性編碼的應用,而應當多用數(shù)據(jù)驅(qū)動,因為前者過于死板,既不利于擴展也不利于維護;第三,表索引的設計與選擇也對數(shù)據(jù)庫性能的影響非常大,所以必須要重視這個問題,并采用妥善的方法進行索引設計,這樣才能使數(shù)據(jù)庫的整體性能得到保障。
在簇索引(Clustered Index)的設計與建立上, 由于每一張數(shù)據(jù)庫基本表都最多只能具有一個簇索引, 且這個索引所決定的是數(shù)據(jù)信息存儲的物理順序, 所以必須要在建立非簇索引之前將簇索引建立起來, 同時還要在建立簇索引的過程當中,應遵循以下原則:
a.包含較多完全不同數(shù)據(jù)的列:
b.返回大量結(jié)果的查詢;
c.使用“BETwEEN”及關(guān)系運算符返回的查詢:
d.需要對單個的行進行快速掃描的OLTP類型的應用;
e.經(jīng)常被包含有連接或GROUP BY子句查詢進行訪問的列。而對于經(jīng)常作更新和較寬的鍵值,則不適合選擇簇索引[2]。
在非簇索引(Nonclustered Index)的設計與建立上,要考慮到它與簇索引的不同,簇索引影響著數(shù)據(jù)信息存儲的物理位置,而非簇索引則與數(shù)據(jù)信息的物理位置無關(guān), 同時非簇索引只存放數(shù)據(jù)行的引用。所以,非簇索引需要存放在一個堆上或簇索引上。在實際的數(shù)據(jù)庫應用過程當中,只要有需要通過不同的途徑來進行數(shù)據(jù)搜索,通過建立非簇索引,就能夠在很大程度上提升數(shù)據(jù)搜索速度,增強數(shù)據(jù)庫性能。在實際的操作中,在符合以下條件的情況下,都可以建立非簇索引:
a.不會返回大量結(jié)果的查詢:
b.經(jīng)常在返回精確匹配的條件查詢被引用的列;
c.包含大量完全不同數(shù)據(jù)的列,并且在某個列上己建立了簇索引;
d.系統(tǒng)應用中經(jīng)常使用分組和連接:
e.覆蓋整個表的所有列的查詢。值得一提的是,雖然通過建立索引能夠提高數(shù)據(jù)庫的性能,但是這也會增加一部分的空間與時問開銷,所以在索引的設計過程當中,必須要考慮到建立索引能夠得到的優(yōu)化程度是否可以超過其開銷,要避免建立無效索引,如果建立索引的負面影響確實過大, 可以通過使用臨時表來增強數(shù)據(jù)庫性能。
2.2 其它對象的存放優(yōu)化
在數(shù)據(jù)庫當中,除了主要的基本表之外,還有多種其他對象,這些對象的存放也影響著數(shù)據(jù)庫的性能, 因此必須要重視對數(shù)據(jù)庫其它對象的存放優(yōu)化。首先, 大型系統(tǒng)通常使用多個磁盤,要避免系統(tǒng)I/0瓶頸,就要充分利用硬件系統(tǒng)的并行I /0機制, 因此數(shù)據(jù)存放應跨越多個設備,不同性質(zhì)訪問的數(shù)據(jù)要分別存放;其次,大型信息系統(tǒng)的事務日志是影響系統(tǒng)性能的重要環(huán)節(jié)之一,無論是從減少系統(tǒng)開銷角度,還是從系統(tǒng)障礙恢復的角度出發(fā), 都應存放在單獨的磁盤上,即將系統(tǒng)的日志文件與數(shù)據(jù)文件分開存儲;第三,將訪問頻度高低不同的表分別存儲,可以充分利用系統(tǒng)的并行機制,提高系統(tǒng)的I/0性能。
2.3 數(shù)據(jù)庫查詢優(yōu)化
在一個數(shù)據(jù)庫當中,被執(zhí)行最多的操作就是查詢,因為數(shù)據(jù)庫的存在最主要的目的就是存放數(shù)據(jù)信息,并在需要時快速、準確的對相關(guān)數(shù)據(jù)信息進行調(diào)閱或處理,所以查詢效率是評價數(shù)據(jù)庫性能的一個重要指標。
在實際的查詢過程當中,已經(jīng)當從以下幾個方面來對查詢進行優(yōu)化:
a.相比于普通的SOL查詢語句而言,存儲過程的效率更高,所以應當盡可能的使用存儲過程:
b.合理使用查詢優(yōu)化器的自動優(yōu)化功能,這同樣能夠提高查詢效率;
c.合理的應用臨時表,盡可能不要進行大量排序:
d.限制對游標的使用;
e.在where子旬當中,最好是不要應用“僳”連接,也不要使用其他復雜的表達式;
f.合理的使用批處理語句。
2.4 鎖的優(yōu)化
一般情況下,數(shù)據(jù)庫都是對若干用戶共同開放的,但是在多個用戶同時查詢或操作同一條數(shù)據(jù)信息時,就可能會出現(xiàn)數(shù)據(jù)的一致性與完整性受到破壞,因此必須要有一個機制來確保多用戶同時查詢或操作同一條數(shù)據(jù)信息時的數(shù)據(jù)一致性與完整性,這就是數(shù)據(jù)庫鎖。鎖的使用雖然能夠起到保護數(shù)據(jù)信息安全的作用,但使用不合理則會影響到數(shù)據(jù)庫的性能,因此必須要注意以下兩點問題:
a.根據(jù)實際問題對長事務進行分解,從而有效減少排它鎖的占用時間;
b.充分利用批處理語句,減少在事務執(zhí)行過程中的交互,避免人為控制事務的長短;
c.對于訪問頻繁、并發(fā)度較高的數(shù)據(jù)庫應用系統(tǒng),可采用相應的優(yōu)化措施從而避免死鎖,如:對每個查詢使用超時機制、使用帶約束的連接、適度平衡使用行鎖、頁鎖及表鎖等,從而有效避免死鎖。
數(shù)據(jù)庫是存儲和管理數(shù)據(jù)信息的一個重要平臺,必須要積極探討與實踐如何優(yōu)化數(shù)據(jù)庫性能,提高數(shù)據(jù)庫運行效率,將數(shù)據(jù)庫的優(yōu)勢全面發(fā)揮出來,進一步推動當前的數(shù)據(jù)化、信息化發(fā)展。
[1]沈海峰.關(guān)于如何優(yōu)化SQL數(shù)據(jù)庫的性能的幾點分析[J].電腦知識與技術(shù),2012,03:517—518.
[2]甘潔靜.SQL數(shù)據(jù)庫的建立與管理[J].計算機光盤軟件與應用,2012,04:109—110.
[3]陳忠菊.SQLServer數(shù)據(jù)庫應用技巧探討[J].電腦編程技巧與維護,2014,18:45.
[4]雷琳.SQL查詢語句優(yōu)化的研究[J].武漢船舶職業(yè)技術(shù)學院學報,2011,03:31—33