SQL Server數(shù)據(jù)庫訪問速度慢可能的原因有很多,中培偉業(yè)《SQL Server2014高級管理與性能調(diào)優(yōu)最佳實踐》專家秦老師在這里詳細(xì)介紹了影響SQL Server數(shù)據(jù)庫訪問速度的因素。
秦老師指出,常見的影響數(shù)據(jù)訪問速度的因素有以下幾種:
(1)沒有索引或者沒有用到索引 數(shù)據(jù)庫索引就像書籍中目錄一樣,使用戶在訪問數(shù)據(jù)庫數(shù)據(jù)時,不必遍歷所有數(shù)據(jù)就可以找到需要的數(shù)據(jù)。創(chuàng)建索引后,可以保證每行數(shù)據(jù)的唯一性,極大地提高數(shù)據(jù)檢索效率,這是一中犧牲空間換取性能的方法。沒有索引或者沒有用到索引是數(shù)據(jù)訪問速度慢最常見的因素,也是程序設(shè)計的一個缺陷所在。
(2)I/O吞吐量小,形成了瓶頸效應(yīng) I/O吞吐量是影響數(shù)據(jù)訪問速度的客觀因素(硬件因素)。在一定的硬件環(huán)境下,利用優(yōu)化的部署方案可適當(dāng)提高I/O吞吐量。
(3)沒有創(chuàng)建計算列導(dǎo)致查詢不優(yōu)化 計算列是一個比較特殊的列,不填寫任何設(shè)計類型,用戶不可以改變該列的值。計算列的值是通過一定的函數(shù)公式等以另一個或多個列的值為輸入值計算出的結(jié)果。如果沒相應(yīng)的計算列,在一些數(shù)據(jù)查詢的時候需要對已有數(shù)據(jù)進行計算,從而浪費一部分性能。
(4)內(nèi)存不足 對數(shù)據(jù)庫數(shù)據(jù)的查詢訪問毫無疑問會占用大量的內(nèi)存空間,當(dāng)內(nèi)存不足的情況下,數(shù)據(jù)的訪問速度會受到明顯的影響甚至訪問出現(xiàn)超時情況,是影響數(shù)據(jù)訪問速度的客觀因素。
(5)網(wǎng)絡(luò)速度慢 網(wǎng)絡(luò)速度慢是影響數(shù)據(jù)訪問速度的客觀因素。可通過提高網(wǎng)絡(luò)訪問的位寬來解決。
(6)查詢出的數(shù)據(jù)量過大 當(dāng)查詢出的數(shù)據(jù)量過大時,內(nèi)存的占用、系統(tǒng)時間的占用等都影響數(shù)據(jù)訪問的速度。可以采用多次查詢、定位查詢、和查詢數(shù)據(jù)量控制來解決。
(7)鎖或者死鎖 鎖或者死鎖在數(shù)據(jù)庫數(shù)據(jù)訪問時會造成訪問者等待時間過程或者永久無法獲取到資源。這是查詢慢最常見的因素之一,是程序設(shè)計的缺陷,要盡量避免。
(8)返回不必要的行和列 在一般的數(shù)據(jù)查詢中,都盡可能多的獲取數(shù)據(jù)信息,這樣造成了不必要的數(shù)據(jù)遍歷,大大的增加了數(shù)據(jù)訪問的響應(yīng)的時間。所以在一般的查詢中,盡量查詢少的行和列,將數(shù)據(jù)遍歷時間降到最低以滿足數(shù)據(jù)輸出需求。
(9)查詢語句不夠優(yōu)化 在數(shù)據(jù)查詢訪問過程中,使用最頻繁的是使用自定義的查詢語句進行數(shù)據(jù)輸出的。所以編寫優(yōu)化的查詢語句能夠很大程度上提高數(shù)據(jù)查詢訪問的速度。
數(shù)據(jù)庫性能優(yōu)化主要是提高數(shù)據(jù)訪問的速度,即提高數(shù)據(jù)庫響應(yīng)速度的性能指標(biāo)。性能優(yōu)化主要分為主觀因素和客觀因素兩部分的優(yōu)化,秦老師這里主要針對影響性能的客觀因素進行優(yōu)化。客觀因素主要是指服務(wù)器的硬件環(huán)境,其主要有以下幾個方面的優(yōu)化措施:
(1)把數(shù)據(jù)、日志、索引放到不同的I/O設(shè)備上,增加讀取速度,數(shù)據(jù)量越大,提高I/O吞吐量越重要;
(2)縱向、橫向分割表,減少表的尺寸(sp_spaceuse);
(3)升級硬件;
(4)提高網(wǎng)絡(luò)訪問速度;
(5)擴大服務(wù)器的內(nèi)存;配置虛擬內(nèi)存:虛擬內(nèi)存大小應(yīng)基于計算機上并發(fā)運行的服務(wù)進行配置,一般設(shè)置為物理內(nèi)存的1.5倍;如果安裝了全文檢索功能,并打算運行Microsoft搜索服務(wù)以便執(zhí)行全文索引和查詢,可考慮將虛擬內(nèi)存大小設(shè)置為至少計算機中物理內(nèi)存的3倍;
(6)增加服務(wù)器CPU個數(shù);其中并行處理比串行處理更需要資源。SQL SERVER根據(jù)系統(tǒng)負(fù)載情況決定最優(yōu)的并行等級,復(fù)雜的需要消耗大量的CPU的查詢適合并行處理。不過更新操作UPDATE、INSERT、DELETE不能進行并行處理。