背景:
sql server效能和優化是我們經常討論的乙個話題,也是要經常面對的乙個問題,當sql server大型資料庫遇到效能瓶頸時,我們不得不查詢原因,分析問題,解決問題。
在處理效能問題時,資料庫專家傾向於關注系統的技術層面,如資源佇列、資源利用率等。而一般使用者只把效能問題簡單地認為是等待時間,他們發出乙個請求,然後等待返回結果。使用者通常認為在互動請求後,超過三秒才得到響應,就算存在性問題了,他們並不關心平均每個磁碟轉軸上有多少命令在待,或者快取命中率(cache hit ratio)是多少,也不關心阻塞、cup利用率、快取中資料頁的平均停留時間(page life expectancy)等。他們只關心等待時間,這正是優化效能應該著手的地方。
sql server 2008引入的資料收集器元件正用來分析以上問題,本篇不討論各種優化方式,僅認識資料收集器和使用方法。
資料收集器簡介:
sql server 2008引入了乙個稱為資料收集器(data collector)的元件,用於從多種**收集不同型別的資料(效能方面的資料或其他資料),並將這些效能資訊儲存在稱為管理資料倉儲(management data warehouse)的關聯式資料庫中。
資料收集器會安裝三個系統資料收集組(system data collection set),分別用於收集磁碟使用情況、伺服器活動、查詢統計資訊。新的資料收集平台可以幫助你自動收集效能和其他資訊,也可以通過預先配置的報表,以圖表方式對資料進行分析。
通過以上簡單介紹,不難看出裡面提到到幾個核心的東西,即【資料倉儲】【資料收集】【統計分析報表】。要得到各種資料,需要有地方來儲存,以備後期分析報表,這就需要資料倉儲。有了資料倉儲還需要設定資料收集過程,如收集頻率等等,這就是資料收集。資料已經收集到了資料倉儲,需要通過分析報表檢視分析結果,以便於進一步對症下藥。說了這麼多,還是先動手從例項中體驗結果。
配置管理資料倉儲
首先要確保sql server**要啟動,然後例項上 -> 管理 -> 資料收集 -> 配置管理資料倉儲
配置承載資料倉儲的例項及資料庫:
圖例:
繼續下一步,直到完成。
配置當前資料庫做資料倉儲的監視物件:
上一套配置步驟已經準備好了承載資料倉儲,現在就要將當前的例項繫結到以上資料倉儲。下面同樣使用以上嚮導,但選項不同。
圖例:
繼續下一步,直到完成。
到此資料倉儲和資料收集建立完成,將看到下圖的狀態。
通過以上步驟自動建立的三個資料收集組,各資料收集組有預設的屬性,比如資料倉儲中的資料保留時間,資料上載計畫等。資料上載計畫帶有一些預設的值,如每小時自動上載一次,每10分鐘自動上載一次...也可以自定義,按照這些時間點,當前例項的系統效能資料自動上載到資料倉儲中。看如下圖:
通過報表結果能看出哪些等待類別、哪個時間點占用資源最高,比如通過柱狀圖能分析出占用資源的系統型別和高峰期等。對於三種資料收集組的資料詳細的結果,我正在進一步研究,計畫專門寫篇博文分析介紹詳情。
msdn:
動態管理檢視(dmv)sys.dm_os_wait_stats
也可以通過動態管理檢視(dmv)sys.dm_os_wait_stats,查出各等待型別。
它包含以下屬性:
wait_type 等待類別。
waiting_task_count 表示該類待的數量。
wait_time_ms 以毫秒為單位的該類等待的總等待時間(該時間包含signal_wait_time_ms)。
max_wait_time_ms 最大等待時間。
signal_wait_time_ms 它是正在等待的執行緒從收到訊號通知到其開始執行之間的時差。
注:對於sql server之前的版本沒有資料收集器元件,也可以通過此dmv查詢分析相關值。
SQL Server 管理資料收集
背景 sql server效能和優化是我們經常討論的乙個話題,也是要經常面對的乙個問題,當sql server大型資料庫遇到效能瓶頸時,我們不得不查詢原因,分析問題,解決問題。在處理效能問題時,資料庫專家傾向於關注系統的技術層面,如資源佇列 資源利用率等。而一般使用者只把效能問題簡單地認為是等待時間...
收集學習SQL server資料庫時間函式
datediff 返回跨兩個指定日期的日期和時間邊界數。語法datediff datepart startdate enddate sqlserver時間日期函式詳解,sqlserver,時間日期,當前系統日期 時間 select getdate select dateadd day,2,2004 ...
sql server與mysql差異收集
之後會陸續收集,先寫一點 sql server中的identity在mysql中的表現形式。mysql中沒有identity 函式,要設定自動編號的話應當是用 auto increment 例如 create table tbl topic topicid int not null auto inc...