性能计数器:“数据库缓存%命中”

时间:2014-10-14 08:08:52

标签: c# performancecounter

我使用这段代码来检索我想要监控的机器上的可用性能计数器:

        var allCounters = new List<PerformanceCounter>();
        foreach (var category in PerformanceCounterCategory.GetCategories("machine-name"))
        {
            var names = category.GetInstanceNames();
            if (names.Length > 0)
            {
                foreach (var name in names)
                {
                    allCounters.AddRange(category.GetCounters(name));
                }
            }
            else
            {
                allCounters.AddRange(category.GetCounters());
            }
        }

我找到了一个我要监控的计数器:Database Cache % Hit。它没有任何实例名称所以我只是这样得到它:

new PerformanceCounter("Database", "Database Cache % Hit", null, "machine-name"); //null or "" for the third argument

此操作有效,直到我在其上调用NextValue方法,这会引发InvalidOperationException

Counter is not single instance, an instance name needs to be specified.

我尝试将我要监控的SQL Server数据库名称的名称,但它也不起作用(它在实例化期间失败)。

如何在C#应用程序中使用此性能计数器?

1 个答案:

答案 0 :(得分:1)

不幸的是,&#34;数据库&#34;计数器组与SQL服务器无关。它是ESENT基础架构的一部分。

对于SQL Server统计信息,查找MSSQL$instance_name个计数器。可能您正在寻找缓冲区管理器缓存命中率,但是还有其他缓存(如查询计划缓存)。

此外,您可能希望直接从sys.dm_os_performance_counters视图查询统计信息,绕过此过多的Windows计数器层......