2011-01-24 42 views
0

我有一个基于C#的应用程序,它在基于SQL Server 2008 R2的数据库实例上执行不同的操作。监视SQL性能和加载

这是情景:

  • 有一个单独的SQL实例。
  • 有多个数据库(大约50个)。
  • 应用程序执行不同的操作,包括IO和CPU操作(在SQL服务器上)。
  • 代码是多线程的,这意味着多个线程一次访问SQL实例。
  • 在与应用程序服务器相同的计算机上,SQL服务器不是

现在,我遇到了SQL成为瓶颈(IO和CPU)的问题,我希望能够让进程线程检查SQL在启动之前是否“过于占用”一个新的过程,如果它被占用太多,推迟一段时间过程并稍后再检查。

可以使用简单/基本SQL查询接收有关SQL实例当前负载的信息吗? CPU负载如使用率? IO负载如磁盘r/w队列?

任何帮助,将不胜感激。

吉拉德。

+0

您是否使用过SQL Profiler来识别造成瓶颈的原因?优化服务器的工作可能比管理应用程序的负载要好。 – Tony

回答

2

表现总是一个多面区域。你如何确定SQL是瓶颈?你有没有尝试过更好的索引,并优化你的查询?

要回答你的问题,它实际上很容易查询性能监视器计数器,并且SQL Server在产品安装时安装一堆计数器。

转到开始菜单并运行'perfmon',然后添加一些计数器以查看各种SQL Server类别甚至更基本的内存和CPU类别。

由此可以看到要监视的计数器。您可以使用外部工具来监视计数器,以查看它们是否超出阈值,或者将收集的数据写入SQL表,文件甚至通过代码监视计数器。

有关更多信息,请参阅以下帖子。

http://blogs.msdn.com/b/granth/archive/2008/11/07/querying-perfmon-data-from-sql.aspx

http://www.mssqltips.com/tip.asp?tip=1039

http://www.brentozar.com/archive/2006/12/dba-101-using-perfmon-for-sql-performance-tuning/

此外,System.Diagnostics命名空间包含性能计数器类监视/通过代码来改变这些东西。

+0

SQL是瓶颈,问题不在于如何改进SQL,而是现在要监控。我不能使用系统计数器,因为应用程序位于不同的计算机上,并且从远程计算机访问性能计数器存在主要安全问题。我需要一个只使用SQL查询的方法。 – Gilad

+2

@Gilad:您可以在sql实例上查询表sys.dm_os_performance_counters。 –