一. 第三方工具;
二. 性能螢幕可以用來做監控嗎?
對于伺服器的監控,和對資料庫的監控,很少有合二為一的工具,如果有的話,一般是付費軟體,或者自行開發的工具。
是以如果不想購買軟體,也不想花精力去開發的話,可以結合一些免費/開源的工具、自定義腳本,來完成對資料庫伺服器的監控。
一. 第三方工具
1. 開源工具
比如:CACTI,Nagios,Zabbix等等,除了主機外,對于網絡上的其他裝置,比如路由器等也可以一并監控。
以CACTI為例(CACTI可以在windows下安裝),伺服器監控的圖示:
(1) 裝置狀态

(2) SQL Server服務狀态
(3) 伺服器事件日志
(4) 磁盤空間
(5) 記憶體使用
(6) CPU使用
(7) 網卡使用
(8) 交換機流量
從圖檔中可以發現,伺服器狀态監控沒問題,不過對于伺服器性能的監控,僅僅是在磁盤空間/記憶體/CPU/網絡帶寬的使用量上面,沒有細緻的性能計數器資訊。
這些開源的工具,大多基于SNMP協定(Simple Network Management Protocol,簡單網絡管理協定),該協定用以監測連接配接到網絡上的裝置狀态,對于裝置自身的詳細性能參數,通常需要安裝額外的插件來完成(這也是unix的思想 ),比如上面用到的syslog插件,用于接收windows事件日志;比如有人內建了snmptools插件,用于接受windows性能計數器資訊。
2. 付費工具
不同工具,側重點也不一樣:
(1) 有的偏向主機監控,比如:MOM(Microsoft Operations Manager),SCOM(System Center Operations Manager,SCOM是MOM的更新版,就像lync是communicator的更新版一樣),whatsup gold;
(2) 有的偏向SQL Server資料庫監控,比如:Idera SQL Diagnostic Manager,SQL Sentry,Red-gate SQL Monitor;
(3) 有的是工具套件,不同功能選擇其中某一款,比如:Quest Spotlight,BMC Patrol(已改名為BMC Performance Manager)
這些Windows平台的工具,大多對性能計數器支援的很好,通常是基于WMI實作的。
WMI :Windows Management Instrumentation,Windows 管理規範,WMI允許通過一個公共的接口通路多種作業系統構成單元,使用者可以使用工具軟體和腳本程式,調用 WMI 管理本地和遠端計算機。
以sql monitor為例,伺服器監控的圖示:
(1) 有限的windows監控選項
(2) 對性能計數器支援的很直接
關于性能監控,很多人可能想過在SQL語句裡,把性能計數器的值一并讀出來,不過從權限/安全的角度來說,SQL Server(應用程式)不應該也不能反向關心windows(作業系統)沒有配置設定給它的資源,是以在sys.dm_os_performance_counters裡能查到的也隻是SQL Server自己的性能計數器值。
不過話說回來,有些DMV/SQL語句确實是可以檢視作業系統資源使用情況的,僅限部分,應該是SQL Server自身做了實作,畢竟是自家的東西。
如果想要自己做基于性能計數器的監視,不會使用開發工具,隻會寫點SQL語句,怎麼辦?
把性能計數器的日志記錄儲存出來,導入到資料庫裡用SQL語句分析,做告警。
1. 如何取性能計數器的值?
(1) 直接檢視性能計數器的界面,僅限于檢視,無法儲存日志記錄;
(2) 事先定義一個檔案來儲存性能計數器,打開性能螢幕,裡面有這個功能,windows 2003叫counter logs,windows 2008叫data collector,如圖:
如果要自動化的話,可以用指令行工具typeperf,功能和圖形界面是一樣的。
2. 如何分析性能計數器日志?
(1) 直接檢視日志,可以借助perfmon/excel/PAL等工具來分析,但這些工具隻能幫忙生成圖表,不能做自動化,不能做告警;
(2) 導入資料庫做分析,可使用 Log Parser/SSIS等任何能自動把性能計數器日志導入資料庫的工具,然後利用SQL 語句來做分析,既然是監控,那就得實時點,導入的頻率得高些。
第三方工具通常都有頁面告警,短信,郵件等等告警方式,如果自己做開發,告警這塊也需要自己來實作,通常資料庫這端都是用郵件來告警。
設定告警的閥值需要有系統的性能基線,如果不是很确定的話,就設的高一點,至少性能日志已經被記錄了,追溯也不是問題。
小結
伺服器監控推薦使用開源工具,如果對于開源工具的性能監控不太滿意,可以:
(1) 擴充開源工具的插件 (如果有預算,也許可以選擇付費工具);
(2) 自行開發,要麼基于性能計數器日志 (适合隻會資料庫開發的人),要麼基于WMI接口 (個人覺得基于WMI更簡便,但得有點程式設計基礎,起碼知道程式/腳本裡怎麼去調用WMI)。