SQL Server状态监视器

时间:2011-04-14 06:19:51

标签: sql service monitoring

我的应用程序同时连接3个SQL服务器和5个数据库。我需要在状态栏上显示状态{running|stopped|not found}

我可以在这里使用任何想法/代码示例吗?此代码不应影响应用程序的速度或SQL服务器的开销。

菩提

5 个答案:

答案 0 :(得分:1)

  

“此代码不应影响速度   应用程序或SQL的开销   服务器“

这是Schroedinger的Cat场景:为了了解给定远程服务或进程的当前状态,您必须将消息序列化到网络上,等待响应,对响应进行反序列化并对其进行操作。所有这些都需要所有相关机器的一些工作和资源。

但是,该工作可能在调用者的后台线程中完成,如果不经常调用,可能不会以任何可测量的方式影响目标服务器。

您可以使用SMO (SQL Server Management Objects)连接到远程服务器,并通过SQL管理工具执行您可以执行的任何操作,因为他们也使用SMO来完成他们的魔术。这是一个非常简单的API,可以在正确的手中非常强大。

不出所料,SMO要求您拥有对要监控的方框的适当权利。如果您没有/不能拥有足够的权限,您可能需要让友好的SQL amin团队发布一个简单的数据源,公开您需要的一些数据。

HTH。

答案 1 :(得分:1)

在连接(验证连接)或连接失败(验证没有连接)时,应用程序中会有一些开销,但是你可以通过异常检查来防止等待时间。

答案 2 :(得分:1)

我认为您应该使用WMI(使用ServiceController类(使用this构造函数)。您基本上查询sql server所在的服务器并检查其状态。

以下示例假设您的应用程序是用c#编写的:

ServiceController sc = new ServiceController("MSSQLSERVER", serverName); 
string status = sc.Status.ToString();

答案 3 :(得分:0)

我们使用以下SQL查询来检查特定数据库的status

SELECT 'myDatabase status is:' AS Description, ISNULL((select state_desc FROM sys.databases WITH (NOLOCK) WHERE name ='myDatabase'),'Not Found') AS [DBStatus]

这应该只有很少的开销,特别是当与背景或异步线程等最佳实践配对时

答案 4 :(得分:0)

完全披露,我是Cotega

的创始人

如果您对服务感兴趣,我们的服务可以监控SQL Server的正常运行时间和性能。此外,您可以设置数据库不可用,性能下降,数据库大小或用户计数问题等的通知。