翻譯|使用教程|編輯:莫成敏|2019-09-18 11:24:44.527|閱讀 1112 次
概述:本文主要介紹創建一個簡單的自定義指標來跟蹤最近對數據庫進行讀取或寫入的會話數。建立了指標的基線后,您將能夠發現并調查任何與偏離正常行為的異常行為的原因。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
SQL Monitor是一個SQL Server監控工具。它可以監控SQL Servers的健康狀況和活動,并通過電子郵件為您發送監測結果和建議。
本文主要介紹創建一個簡單的自定義指標來跟蹤最近對數據庫進行讀取或寫入的會話數。建立了指標的基線后,您將能夠發現并調查任何與偏離正常行為的異常行為的原因。
了解服務器上每個數據庫的活動會話數非常有用。通過一些SQL,我們可以創建一個自定義指標來跟蹤最近在數據庫上執行讀取或寫入的會話數,例如在過去十分鐘內。一旦SQL Monitor適應了這個圖中常見的退潮和流程,你就會擁有每個數據庫的基線,并且能夠發現可疑或不尋常的使用模式。此時,SQL中有很多方法可以詳細了解哪些用戶處于活動狀態,以及他們正在做什么。
我已經通過跟蹤這個指標發現了問題,其中一個我認為已禁用的進程以某種方式重新啟動,另一個數據庫本應該顯示一些活動,卻沒有顯示任何活動!
誰在使用您的數據庫以及他們在做什么?
您的數據庫中有多少用戶?好吧,可能只有一個用戶(登錄)使用很多會話做了大量的事情。如果您在一個用戶ID下具有與應用程序的共享連接,則尤其如此,因此有許多人或進程使用一個登錄名。
理想情況下,這不應該發生;每個用戶都應該使用他們獨特的Windows登錄,從而使您能夠正確審核正在進行的操作。您的安全性越高,您可能與會話成比例的用戶就越多,因為這意味著用戶不會共享登錄。
可悲的是,我們并不總是生活在一個理想的世界,特別是在IT領域。因此,我們需要跟蹤SPID和登錄。清單1顯示了一個快速查詢,告訴您服務器上每個數據庫的每個登錄名使用了多少個會話。
SELECT Db_Name(Database_id), String_Agg(Login_Name + ' (' + Convert(VARCHAR(8), No_Sessions) + ')', ', ') FROM ( SELECT database_id, login_name, Count(*) AS No_Sessions FROM sys.dm_exec_connections AS A INNER JOIN sys.dm_exec_sessions AS B ON A.session_id = B.session_id GROUP BY login_name, database_id ) AS f(Database_id, Login_Name, No_Sessions) GROUP BY Database_id;
清單1
您還想知道每個會話執行的最后一個SQL嗎?清單2將告訴你。
SELECT A.session_id, Db_Name(database_id) AS [database], DateDiff(MINUTE, A.connect_time, GetDate()) AS [Connected (mins)], num_reads, num_writes, login_name, Text AS SQL FROM sys.dm_exec_connections AS A INNER JOIN sys.dm_exec_sessions AS B ON A.session_id = B.session_id INNER JOIN sys.sysprocesses AS s ON s.spid = A.session_id OUTER APPLY::fn_get_sql(sql_handle);
清單2
這可能很有趣,但首先我們要找出每個數據庫的“通常”活動會話數,以便我們可以判斷活動會話數是否因任何原因或突然降至零而跳躍(永遠不是一個好兆頭)。然后,我們可以使用上述查詢進一步調查。
跟蹤最近活動的會話數
SQL Monitor的內置用戶連接度量標準隨時為我們提供了連接總數的實例級數據。連接和會話之間通常但不總是1:1的關系。在數據庫級別,內置的Active Transactions度量標準僅為我們提供當前正在運行的事務;它將錯過讀取,可能包括許多系統事務。此外,它只是一個時間點測量。
我們想要的是一個數據庫級度量標準,告訴我們有多少會話在最近一段時間內主動閱讀或寫入。清單3顯示了一個查詢,它告訴我們在過去的十分鐘內在連接的數據庫上完成讀取或寫入的會話數。
SELECT Count(*) AS Active_Sessions FROM sys.dm_exec_connections AS A INNER JOIN sys.dm_exec_sessions AS B ON A.session_id = B.session_id WHERE database_id = Db_Id() AND A.session_id <> @@Spid AND ( DateDiff(MINUTE, last_read, GetDate()) < 10 OR DateDiff(MINUTE, last_write, GetDate()) < 10 );
清單3
當然,相當簡單;根據您自己對“主動”的定義,很容易對其進行調整。為了被認為是“最近的”,讀或寫應該有多近?你只對寫作感興趣嗎?它還具有從結果中消除您自己的會話(SPID)的必要調整。您不想衡量自己的監控活動!
我們現在有一個返回整數的數據庫,因此很容易使用它來為SQL Monitor創建自定義指標。
安裝自定義指標
如果您在SQL Monitor中,則打開“配置”窗口,然后單擊“自定義度量標準”,然后單擊“創建自定義度量標準”按鈕。現在,我們可以填寫“當前活動會話”度量標準的所有詳細信息,以跟蹤在過去10分鐘內執行讀取或寫入的會話數。我每五分鐘收集一次,因為在資源方面,查詢非常簡單。
一旦您跟蹤了指標一段時間,并了解數據庫的基線,您可能還希望為任何可疑的高級別活動創建關聯的警報,或相反地為任何零活動期間創建關聯的警報。
最終屏幕僅確認所有設置。單擊“確定”,將創建度量標準和警報并開始跟蹤數據。
以下是自定義指標的Analysis圖,用于監控服務器上的數據庫。
知道您的數據庫中有多少用戶和會話,這些用戶的身份以及他們一直在做什么,這總是讓人放心。最近活動會話的數量是指標的一個很好的示例,該指標需要基線來告訴您測量是合理的還是問題的跡象。它也是一個度量標準,很少顯示需要經常進行人工檢查的問題,因此是SQL Monitor的理想選擇。
這就是這篇教程的內容了,感興趣的朋友可以下載SQL Monitor的試用版哦~
金喜正規買球相關的文章:
專用SQL監控工具SQL Monitor監視服務器和數據庫,具有三個突出優點
使用SQL Server監控工具SQL Monitor,監視Azure SQL數據庫的性能問題(上)
使用SQL Server監控工具SQL Monitor,監視Azure SQL數據庫的性能問題(下)
監控工具SQL Monitor的兩個新功能,PowerShell Alert API和服務器權限概述
想要購買SQL Monitor正版授權,或了解更多產品信息請點擊
掃描關注慧聚IT微信公眾號,及時獲取最新動態及最新資訊
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn