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