2011-01-24 61 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。 –