sqlserver性能,sqlserver性能調優(yōu)實戰(zhàn)

sqlserver 怎么樣優(yōu)化性能

SQL Server數(shù)據(jù)庫查詢速度慢的原因有很多,常見的有以下幾種:

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供修武網(wǎng)站建設、修武做網(wǎng)站、修武網(wǎng)站設計、修武網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、修武企業(yè)網(wǎng)站模板建站服務,十年修武做網(wǎng)站經驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。

1、沒有索引或者沒有用到索引(這是查詢慢最常見的問題,是數(shù)據(jù)庫設計的缺陷)

2、I/O吞吐量小,形成了瓶頸效應。

3、沒有創(chuàng)建計算列導致查詢不優(yōu)化。

4、內存不足

5、網(wǎng)絡速度慢

6、查詢出的數(shù)據(jù)量過大(可以采用多次查詢,其他的方法降低數(shù)據(jù)量)

7、鎖或者死鎖(這也是查詢慢最常見的問題,是程序設計的缺陷)

8、sp_lock,sp_who,活動的用戶查看,原因是讀寫競爭資源。

9、返回了不必要的行和列

10、查詢語句不好,沒有優(yōu)化

●可以通過以下方法來優(yōu)化查詢 :

1、把數(shù)據(jù)、日志、索引放到不同的I/O設備上,增加讀取速度,以前可以將Tempdb應放在RAID0上,SQL2000不在支持。數(shù)據(jù)量(尺寸)越大,提高I/O越重要。

2、縱向、橫向分割表,減少表的尺寸(sp_spaceuse)

3、升級硬件

4、根據(jù)查詢條件,建立索引,優(yōu)化索引、優(yōu)化訪問方式,限制結果集的數(shù)據(jù)量。注意填充因子要適當(最好是使用默認值0)。索引應該盡量小,使用字節(jié)數(shù)小的列建索引好(參照索引的創(chuàng)建),不要對有限的幾個值的字段建單一索引如性別字段。

5、提高網(wǎng)速。

6、擴大服務器的內存,Windows 2000和SQL server 2000能支持4-8G的內存。

配置虛擬內存:虛擬內存大小應基于計算機上并發(fā)運行的服務進行配置。運行 Microsoft SQL Server? 2000時,可考慮將虛擬內存大小設置為計算機中安裝的物理內存的1.5倍。如果另外安裝了全文檢索功能,并打算運行Microsoft搜索服務以便執(zhí)行全文索引和查詢,可考慮:將虛擬內存大小配置為至少是計算機中安裝的物理內存的3倍。將SQL Server max server memory服務器配置選項配置為物理內存的1.5倍(虛擬內存大小設置的一半)。

7、增加服務器CPU個數(shù);但是必須 明白并行處理串行處理更需要資源例如內存。使用并行還是串行程是MSSQL自動評估選擇的。單個任務分解成多個任務,就可以在處理器上運行。例如耽擱查詢 的排序、連接、掃描和GROUP BY字句同時執(zhí)行,SQL SERVER根據(jù)系統(tǒng)的負載情況決定最優(yōu)的并行等級,復雜的需要消耗大量的CPU的查詢最適合并行處理。但是更新操作UPDATE,INSERT, DELETE還不能并行處理。

8、如果是使用like進行查詢的話,簡單的使用index是不行的,但是全文索引,耗空間。 like ''a%'' 使用索引 like ''%a'' 不使用索引用 like ''%a%'' 查詢時,查詢耗時和字段值總長度成正比,所以不能用CHAR類型,而是VARCHAR。對于字段的值很長的建全文索引。

9、DB Server 和APPLication Server 分離;OLTP和OLAP分離

10、分布式分區(qū)視圖可用于實現(xiàn)數(shù)據(jù)庫服務器聯(lián)合體。

聯(lián)合體是一組分開管理的服務器,但它們相互協(xié)作分擔系統(tǒng)的處理負荷。這種通過分區(qū)數(shù)據(jù)形成數(shù)據(jù)庫服務器聯(lián)合體的機制能夠擴大一組服務器,以支持大型的多層 Web 站點的處理需要。有關更多信息,參見設計聯(lián)合數(shù)據(jù)庫服務器。(參照SQL幫助文件''分區(qū)視圖'')

a、在實現(xiàn)分區(qū)視圖之前,必須先水平分區(qū)表

b、 在創(chuàng)建成員表后,在每個成員服務器上定義一個分布式分區(qū)視圖,并且每個視圖具有相同的名稱。這樣,引用分布式分區(qū)視圖名的查詢可以在任何一個成員服務器上 運行。系統(tǒng)操作如同每個成員服務器上都有一個原始表的復本一樣,但其實每個服務器上只有一個成員表和一個分布式分區(qū)視圖。數(shù)據(jù)的位置對應用程序是透明的。

11、重建索引 DBCC REINDEX ,DBCC INDEXDEFRAG,收縮數(shù)據(jù)和日志 DBCC SHRINKDB,DBCC SHRINKFILE. 設置自動收縮日志.對于大的數(shù)據(jù)庫不要設置數(shù)據(jù)庫自動增長,它會降低服務器的性能。

在T-sql的寫法上有很大的講究,下面列出常見的要點:首先,DBMS處理查詢計劃的過程是這樣的:

1、 查詢語句的詞法、語法檢查

2、 將語句提交給DBMS的查詢優(yōu)化器

3、 優(yōu)化器做代數(shù)優(yōu)化和存取路徑的優(yōu)化

4、 由預編譯模塊生成查詢規(guī)劃

5、 然后在合適的時間提交給系統(tǒng)處理執(zhí)行

6、 最后將執(zhí)行結果返回給用戶。

其次,看一下SQL SERVER的數(shù)據(jù)存放的結構:一個頁面的大小為8K(8060)字節(jié),8個頁面為一個盤區(qū),按照B樹存放。

怎樣查出SQLServer的性能瓶頸

SQLServer性能監(jiān)控

這套性能優(yōu)化的清單將至少準科學的幫助你找出你的SQLServer任何明顯的性能問題。說是這樣說,SQLServer的性能調優(yōu)仍然是很困難的。我試圖用這套清單去找出“容易”的sqlserver性能問題,困難的留待稍后。我這樣做是因為很容易將容易和困難的的性能調優(yōu)問題搞混。通過列出一個“容易”的性能調優(yōu)范圍,就很容易的將這些問題解決,一旦解決了這些容易的問題,那么你就能集中去解決更困難的問題。

使用這個SQLServer性能調優(yōu)清單的一個好處是,它將不僅僅告訴你目前最容易解決的性能問題是什么,而且還幫助你正確的去解決。在某種程度上,你可以選擇不同的順序進行。換句話說,你可以故意做出特殊的決定而不是按照清單通常的順序進行。某種意義上說你是對的,不是所有的性能調優(yōu)建議都適合所有的情形。另外,你的決定是基于你的資源限制,例如沒有足夠的錢去買滿足負荷的硬件。如果真是那樣的話,你就別無選擇了。還有,你的決定可能基于一些政治原因,那是你不得不作出的改變。不管怎樣,你需要知道你能做什么,使用這個性能調優(yōu)清單找出你能改變的范圍并做出相應的改變提升你的SQLServer的性能。

一般來說,你將在你的每一個SQL服務器上執(zhí)行這個清單。如果遇到清單中的一些問題,這會花掉你一些時間。我建議你從目前性能問題最多的的服務器開始,然后當你有時間的時候按照自己的思路去解決其他服務器。

一旦你完成了,可仍然有很多事情要去做。記住,這些只是一些容易的。一旦你完成了這些容易的,接下來你需要花時間去解決更困難問題。這個是另一篇文章要解決的問題了。

怎樣進行你的SQLServer性能調優(yōu)呢?

為了使其變得容易,我把它們分成了以下幾個部分:

? 使用性能監(jiān)視器找出硬件瓶頸

? SQLServer硬件性能監(jiān)控列表

? 操作系統(tǒng)性能監(jiān)控列表

? SQLServer2000配置性能監(jiān)控列表

? 數(shù)據(jù)庫配置設置性能監(jiān)控列表

? 索引性能監(jiān)控列表

? 應用程序和T-SQL性能監(jiān)控列表

? SQLServer數(shù)據(jù)庫作業(yè)性能監(jiān)控列表

? 使用Profiler找出低效的查詢

? 怎樣最好的實現(xiàn)SQLServer性能監(jiān)控

管理你的SQLServe性能的最好方法是首先回顧上面每一部分的內容,把它們打印出來。然后完成每一部分的內容,寫下你收集到的結果。你也可以按照你喜歡的順序進行。上面的步驟僅僅列出了我執(zhí)行的順序,因為那樣通常能達到一個比較好的效果。

性能監(jiān)控列表

計數(shù)器名稱 均值 最小值 最大值

Memory: Pages/sec

Memory: Available Bytes

Physical Disk: % Disk time

Physical Disk: Avg. Disk Queue Length

Processor: % Processor Time

System: Processor Queue Length

SQL Server Buffer: Buffer Cache Hit Ratio

SQL Server General: User Connections

在上表輸入你的結果.

使用性能監(jiān)視器找出SQLServer硬件瓶頸

開始SQLServer性能調優(yōu)的最佳地方就是從性能監(jiān)視器(系統(tǒng)監(jiān)視器)開始。通過一個24小時的周期對一些關鍵的計數(shù)器進行監(jiān)控,你將對你SQLServer服務器的硬件瓶頸了如指掌。

一般來說,使用性能監(jiān)視器去創(chuàng)建一個一些關鍵的計數(shù)器的24小時周期的監(jiān)控日志。當你決定創(chuàng)建這個日志的時候,你需要選擇一個典型的24小時的周期,例如,選擇一個典型的比較忙的日期,而不是周日或節(jié)假日。

一旦你將這些捕獲的數(shù)據(jù)形成日志后,在性能監(jiān)視器的圖形界面下會顯示計數(shù)器的推薦值。你在上表中記下均值、最小值、峰值。做完這些后,用你的結果跟下面的分析比較。通過你的結果和下面的建議值進行比較,你將能快速的找到你的SQLServe正在經歷的潛在的硬件瓶頸。

關鍵性能計數(shù)器說明

下面是不同關鍵性能計數(shù)器的一個討論,它們的建議值和為了幫助解決硬件瓶頸問題的一些選項。注意我已經限制了性能監(jiān)視器需要監(jiān)視的一些關鍵計數(shù)器。我這么做是因為在本文我們的目的是為了容易的找到顯而易見的性能問題,許多其他的性能監(jiān)視器計數(shù)器你能在本網(wǎng)站其他地方找到。

Memory: Pages/sec

這個計數(shù)器記錄的是每秒鐘內存和磁盤之間交換的頁面數(shù)。交換更多的頁面、超過你服務器承受的更多的I/O,將輪流降低你SQLserver的性能。你的目的就是盡量將頁面減少到最小,而不是消除它。

如果你的服務器上SQLServer是最主要的應用程序,那么這個值的理想范圍是0~20之間。可能很多時候你看到的值都會超過20。這個值一般要保持在每秒的平均頁數(shù)在20以下。

如果這個值平均總是超過20,其中最大的一個可能是內存瓶頸問題,需要增加內存。通常來說,更多的內存意味著需要執(zhí)行的頁面更少。

在大多數(shù)情況下,服務器決定SQLServer使用的適當內存的大小,頁面將平均小于20。給SQLServer適當?shù)膬却嬉馕吨掌鞯木彺婷新剩˙uffer Hit Cache Ratio 這個稍后會講到)達到99%或者更高。如果在一個24小時的周期里你的sqlserver的緩存命中率達到99%或者更高,但是在這個期間你的頁面數(shù)總是超過20,這意味著你或許運行了其他的程序。如果是這樣的情況,建議你移除這些程序,使SQLServer是你的服務器的最主要的程序。

如果你的sqlserver服務器沒有運行其他程序,并且在一個24小時的周期里頁面數(shù)總是超過20,這說明你應該修改你對SQLServer的內存設置了。將其設置為“動態(tài)配置SQLServer的內存”,并且最大內存設置得高一些。為了達到最優(yōu),SQLServer將盡可能的獲得多的內存以完成自己的工作,而不是去和其他的程序爭奪內存。

Memory: Available Bytes

另一個檢查SQLServer是否有足夠的物理內存的方法是檢查Memory Object: Available Bytes計數(shù)器。 這個值至少大于5M,否則需要添加更多的物理內存。在一個專門的SQLServer服務器上,SQLServer試圖維持4-10M的自由物理內存,其余的物理內存被操作系統(tǒng)和SQLServer使用。當可用的物理內存接近5M或者更低時,SQLServer最可能因為缺少內存而遇到性能瓶頸。遇此情況,你需要增加物理內存以減少服務器的負荷,或者給SQLServer配置一個合適的內存。

Physical Disk: % Disk Time

這個計數(shù)器度量磁盤陣列繁忙程度(不是邏輯分區(qū)或磁盤陣列上獨立的磁盤)。它提供一個對磁盤陣列繁忙程度相對較好的度量。原則上計數(shù)器% Disk Time的值應該小于55%。如果持續(xù)超過55%(在你24小時的監(jiān)控周期里大約超過10分鐘),說明你的SQLServer有I/O瓶頸。如果你只是偶爾看到,也不必太擔心。但是,如果經常發(fā)生的話(也就是說,一個小時出現(xiàn)好幾次),就應該著手尋找增加服務器I/O性能或者減少服務器負荷的解決之道了。一般是為磁盤陣列增加磁盤,或者更好更快的磁盤,或者給控制器卡增加緩存,或者使用不同版本的RAID,或者更換更快的控制器。

在NT4.0上使用該計數(shù)器之前,確認在NT命令提示符下輸入diskperf -y,重啟服務器,以便手動打開。在NT4.0下第一次必須將該計數(shù)器打開,Windows2000默認是打開的。

Physical Disk: Avg. Disk Queue Length

除了觀察物理磁盤的% Disk Time計數(shù)器外,還可以用Avg. Disk Queue Length計數(shù)器。磁盤陣列中的各個磁盤的該值如果超過2(在你24小時的監(jiān)控周期里大約超過10分鐘),那么你的磁盤陣列存在I/O瓶頸問題。象計數(shù)器% Disk Time一樣,如果只是偶爾看到,也不必太擔心。但是,如果經常發(fā)生的話,就應該著手尋找增加服務器I/O性能的解決之道了。如前所述。

你需要計算這個值,因為性能監(jiān)視器不知道你的磁盤陣列中有多少物理磁盤。例如,如果你有一個6個物理磁盤組成的磁盤陣列,它的Avg.

Disk Queue Length值為10,那么實際每個磁盤的值為1.66(10/6=1.66),它們都在建議值2以內。

在NT4.0上使用該計數(shù)器之前,確認在NT命令提示符下輸入diskperf -y,重啟服務器,以便手動打開。在NT4.0下第一次必須將該計數(shù)器打開,Windows2000默認是打開的。

一起使用這兩個計數(shù)器將幫助你找出I/O瓶頸。例如,如果% Disk Time的值超過55%,Avg. Disk Queue Length計數(shù)器值超過2,服務器則存在I/O瓶頸。

Processor: % Processor Time

處理器對象: % Processor Time計數(shù)器對每一個CPU可用,并針對每一個CPU進行檢測。同樣對于所有的CPU也可用。這是一個觀察CPU利用率的關鍵計數(shù)器。如果% Total Processor Time計數(shù)器的值持續(xù)超過80%(在你24小時的監(jiān)控周期里大約超過10分鐘),說明CPU存在瓶頸問題。如果只是偶爾發(fā)生,并且你認為對你的服務器影響不大,那沒問題。如果經常發(fā)生,你應該減少服務器的負載,更換更高頻率的CPU,或者增加CPU的數(shù)量或者增加CPU的2級緩存(L2 cache)。

System: Processor Queue Length

根據(jù)% Processor Time計數(shù)器,你可以監(jiān)控Processor Queue Length計數(shù)器。每個CPU的該值如果持續(xù)超過2(在你24小時的監(jiān)控周期里大約超過10分鐘),那么你的CPU存在瓶頸問題。例如,如果你的服務器有4個CPU,Processor Queue Length計數(shù)器的值總共不應超過8。

如果Processor Queue Length計數(shù)器的值有規(guī)律的超過建議的最大值,但是CPU利用率相對不是很高,那么考慮減少SQLServer的"max worker threads"的配置值。Processor Queue Length計數(shù)器的值高的可能原因是有太多的工作線程等待處理。通過減少"maximum worker threads"的值,強迫線程池踢掉某些線程,從而使線程池得到最大的利用。

一起使用計數(shù)器Processor Queue Length和計數(shù)器% Total Process Time,你可以找到CPU瓶頸,如果都顯示超過它們的建議值,可以確信存在CPU瓶頸問題。

SQL Server Buffer: Buffer Cache Hit Ratio

SQL Server Buffer中的計數(shù)器Buffer Cache Hit Ratio用來指出SQLServer從緩存中而不是磁盤中獲得數(shù)據(jù)的頻率。在一個OLTP程序中,該比率應該超過90%,理想值是超過99%。如果你的buffer cache hit ratio低于90%,你需要立即增加內存。如果該比率在90%和99%之間,你應該認真考慮購買更多的內存了。如果接近99%,你的SQLServer性能是比較快的了。某些情況下,如果你的數(shù)據(jù)庫非常大,你不可能達到99%,即使你在服務器上配置了最大的內存。你所能做的就是盡可能的添加內存。

在OLAP程序中,由于其本身的工作原理,該比率大大減少。不管怎樣,更多的內存總是能提高SQLServer的性能。

SQL Server General: User Connections

既然sqlserver的使用人數(shù)會影響它的性能,你就需要專注于sqlserver的General Statistics Object: User Connections計數(shù)器。它顯示sqlserver目前連接的數(shù)量,而不是用戶數(shù)。

如果該計數(shù)器超過255,那么你需要將sqlserver的"Maximum Worker Threads" 的配置值設置得比缺省值255高。如果連接的數(shù)量超過可用的線程數(shù),那么sqlserver將共享線程,這樣會影響性能。"Maximum Worker Threads"需要設置得比你服務器曾經達到的最大連接數(shù)更高。

如何測試sqlserver性能

1、打開sql server studio management

2、打開"工具"-"sql server profiler"

3、點擊連接

4、點擊運行

5、可以看到捕捉到的一些訪問數(shù)據(jù)庫的事件,其中有讀寫,點用cpu,持續(xù)時間等信息可以參考

6、點擊某個事件,可以查看具體執(zhí)行了什么sql腳本,進一步分析相關邏輯

MySQL和SQLServer相比,哪個性能更好

MySQL和SQLServer相比,哪個性能更好

主要差別,SQL Server是微軟的,只在Windows里能用。MySQL,各種操作系統(tǒng)都能用。要說性能,Sun公司已經把MySQL做到很好了,可以支持大型系統(tǒng)。但是Oracle以后會不會把MySQL做到能夠威脅Oracle數(shù)據(jù)庫的程度,就不知道了。

sql server和mysql性能對比

1.性能: 這可能是所有DBA最關心的。mysql的讀寫性能確實一流,即使針對大數(shù)據(jù)...

2.對機器配置的要求 mysql對機器配置要求不高(于sqlserver相比)。...

3.安全性 感覺mysql5+linux2.6的安全性高于win2ksp4+sqls...

4.可配置性 mysql可配置性很好,基于文本文件,很細很清晰。而sqlse...

5.功能 這點mysql與sqlserver確實沒法比,如存儲過程/觸發(fā)器/豐富的函數(shù)/...

當前文章:sqlserver性能,sqlserver性能調優(yōu)實戰(zhàn)
文章出自:http://muchs.cn/article44/hcjoee.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、企業(yè)建站、ChatGPT標簽優(yōu)化、網(wǎng)站設計公司自適應網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網(wǎng)站制作