資料庫伺服器的監控可大致分為兩類:
(1) 狀態監控:資料庫伺服器有沒有在健康地執行?
(2) 效能監控:健康執行的同時,有沒有效能問題?可不可以更快些?
一.伺服器
1.狀態監控
(1) 伺服器是否可訪問?
(2) 資料庫服務是否啟用?
(3) 作業系統事件日誌中的錯誤或告警
(4) 磁碟可用空間
2.效能監控
(1) io壓力
(2) 記憶體使用
(3) cpu使用
(4) 網路頻寬占用
這1,2,3,4是按照容易出現瓶頸的順序排列的,由於磁碟的讀寫速度限制,通常io是最容易出現瓶頸的地方,我們所做的很多優化,也都是針對io的,比如:索引優化,讀寫分離等等。
二.資料庫
1.狀態監控
(1) 資料庫可否開啟 (資料庫狀態)
(2) sql server/sql server agent錯誤日誌中的錯誤或告警
(3) 資料庫/檔案組可用空間
(4) sql agent 作業執行狀態
(5) 資料庫備份有沒有成功
(6) 資料庫還原測試的結果
(7) 資料庫一致性檢查的結果 (dbcc checkdb)
以下幾條狀態監控,通常需要和系統平均值/基線值比較才有意義,否則沒有告警的標準。
(8) 連線數、請求數、事務數、執行緒數
(9) 資料庫/檔案/表的大小
(10) 表使用、行數
2.效能監控
(1) 有沒有長時間執行的查詢 (一般指沒有被任何請求阻塞,效率很差的查詢)
(2) 有沒有被阻塞的查詢 (可能單獨執行很快,但和別的請求一起,由於有鎖等待,耗時很長)
(3) 有沒有死鎖 (開發人員/使用者口中說的」死鎖」 通常是阻塞/等待,資料庫死鎖通常很少讓使用者感覺到等待,一般是請求被中斷,因為被kill掉了)
(4) 有沒有等待 (一般指各種資源的等待,等待和阻塞的交集就是鎖等待)
(5) 有沒有缺失的/未被使用的/效率不高的索引,以及索引碎片
(6) 有沒有過期的統計資訊
(7) 有沒有資料庫檔案的爭用 (比如:日誌檔案,tempdb爭用)
(8) 有沒有消耗cpu較大、io讀寫較多的查詢 (通常io消耗大的,也就是記憶體消耗大的查詢)
三.其他
(1). 如果有部署高可用的策略,會有映象、複製、日誌傳送、集群狀態的監控;
(2). 某些業務資料有嚴格的一致性要求,業務資料的校驗,最好也做在監控的告警裡面;
(3). 對於資料庫/例項的選項、引數設定,鏈結伺服器等物件的可用性,通常在每年/每季度的health check裡檢查過就可以了,如果不放心,當然也可以放到監控的告警中來。
四.如何部署監控?
1.不要選擇依賴性的指令碼/命令
以監視服務是否啟動為例,指令碼如下:
(1) sql擴充套件儲存過程
--引數1: querystate 檢查服務狀態/ start啟動服務/ stop停掉服務
--引數2: 服務名
exec master.dbo.xp_servicecontrol '
querystate
', '
mssqlserver
'exec master.dbo.xp_servicecontrol '
querystate
', '
sqlserveragent
'exec master.dbo.xp_servicecontrol '
querystate
', '
sqlbrowser
'exec master.dbo.xp_servicecontrol '
querystate
', '
netlogon
'exec xp_servicecontrol n'
stop
', n'
sqlserveragent
'exec xp_servicecontrol n'
start
',n'
sqlserveragent
'
(2) sql呼叫作業系統命令
ifobject_id('
tempdb..#tmp_started_services
') is
notnull
drop
table
#tmp_started_services
create
table #tmp_started_services (started_services varchar(255
))insert
into
#tmp_started_services(started_services)
exec master..xp_cmdshell '
net start
'select
*from
#tmp_started_services
where
ltrim(rtrim(started_services)) like
'sql%
'
如果sql server沒啟動,這些指令碼根本就跑不了,又怎麼監控呢?
也許,又會有這麼乙個思路,伺服器正常時,發出郵件通知,如果沒有收到郵件就說明伺服器不正常了,可如果有很多伺服器時,怎麼知道誰沒發郵件呢?
2.部署在專門的一台/多台監控機上
伺服器狀態監控,不管使用第三方工具,還是使用自定義指令碼,都建議部署在專門的監控機上,遠端監視目標機器。
因為:如果伺服器down了或者故障了,可能本機的程式/指令碼就無法執行了,又怎麼監控呢?
最後
基於上面的監控列表,還需要將監測工作自動化,並在發現問題時告警。
0 SQL Server監控清單
一.伺服器 1.狀態監控 1 伺服器是否可訪問?2 相應的資料庫服務是否啟用?3 作業系統事件日誌中的錯誤或告警 4 磁碟可用空間 伺服器狀態監控,不管使用第三方工具,還是使用自定義指令碼,都建議部署在專門的一台 多台監控機上,因為如果伺服器down了或者故障了,任何本機的程式 指令碼可能就無法執行...
SQL Server監控清單
一.伺服器 1.狀態監控 1 伺服器是否可訪問?2 相應的資料庫服務是否啟用?3 作業系統事件日誌中的錯誤或告警 4 磁碟可用空間 伺服器狀態監控,不管使用第三方工具,還是使用自定義指令碼,都建議部署在專門的一台 多台監控機上,因為如果伺服器down了或者故障了,任何本機的程式 指令碼可能就無法執行...
免費的SQL Server監控工具
sql 資料庫監控 研發實踐 檢測和監控網路上的sql伺服器。spiceworks公司的免費的sql server監控工具來檢視定製的部件和訪問伺服器的健康細節。spiceworks還在自動檢索網路上的sql資料庫 sql server 2005及更高版本 的資訊。衛生檢查,每分鐘執行一次,以確保資...