监控工具SQL Monitor:使用SQL Monitor跟踪数据库上的活动会话数

本文主要介绍创建一个简单的自定义指标来跟踪最近对数据库进行读取或写入的会话数。建立了指标的基线后,您将能够发现并调查任何与偏离正常行为的异常行为的原因。

SQL Monitor是一个SQL Server监控工具。它可以监控SQL Servers的健康状况和活动,并通过电子邮件为您发送监测结果和建议。

SQL Monitor最新版

本文主要介绍创建一个简单的自定义指标来跟踪最近对数据库进行读取或写入的会话数。建立了指标的基线后,您将能够发现并调查任何与偏离正常行为的异常行为的原因。

了解服务器上每个数据库的活动会话数非常有用。通过一些SQL,我们可以创建一个自定义指标来跟踪最近在数据库上执行读取或写入的会话数,例如在过去十分钟内。一旦SQL Monitor适应了这个图中常见的退潮和流程,你就会拥有每个数据库的基线,并且能够发现可疑或不寻常的使用模式。此时,SQL中有很多方法可以详细了解哪些用户处于活动状态,以及他们正在做什么。

我已经通过跟踪这个指标发现了问题,其中一个我认为已禁用的进程以某种方式重新启动,另一个数据库本应该显示一些活动,却没有显示任何活动!

谁在使用您的数据库以及他们在做什么/strong>

您的数据库中有多少用户吧,可能只有一个用户(登录)使用很多会话做了大量的事情。如果您在一个用户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分钟内执行读取或写入的会话数。我每五分钟收集一次,因为在资源方面,查询非常简单。

20word-image-36.png

一旦您跟踪了指标一段时间,并了解数据库的基线,您可能还希望为任何可疑的高级别活动创建关联的警报,或相反地为任何零活动期间创建关联的警报。

21word-image-37.png

最终屏幕仅确认所有设置。单击“确定”,将创建度量标准和警报并开始跟踪数据。

以下是自定义指标的Analysis图,用于监控服务器上的数据库。

22word-image-38.png

知道您的数据库中有多少用户和会话,这些用户的身份以及他们一直在做什么,这总是让人放心。最近活动会话的数量是指标的一个很好的示例,该指标需要基线来告诉您测量是合理的还是问题的迹象。它也是一个度量标准,很少显示需要经常进行人工检查的问题,因此是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微信公众号,及时获取最新动态及最新资讯

1563778777.jpg

840-100.jpg

标签:

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年8月15日
下一篇 2019年8月15日

相关推荐

发表回复

登录后才能评论