2011-01-24 5 views
0

У меня есть приложение на основе C#, которое выполняет различные операции с экземпляром базы данных на базе SQL Server 2008 R2.Мониторинг производительности и нагрузки SQL

Это сценарий:

  • Существует один экземпляр SQL.
  • Существует несколько баз данных (около 50).
  • Приложение выполняет различные операции, включая операции ввода-вывода и ЦП (на сервере SQL).
  • Код является многопоточным, что означает, что несколько потоков обращаются к экземпляру SQL одновременно.
  • SQL-сервер не является на том же компьютере, что и сервер приложений.

Теперь у меня проблема с тем, что SQL становится узким местом (как IO, так и CPU), и я бы хотел, чтобы у него была проверка процесса, если SQL «слишком занят», прежде чем он начнет новый процесс, и если он слишком занят, отложите процесс на некоторое время и снова проверьте его позже.

Можно получить с помощью простого/базового SQL-запроса информацию о текущей загрузке экземпляра SQL? Загрузка процессора как процент использования? IO загружается как очередь диска r/w?

Любая помощь будет оценена по достоинству.

Gilad.

+0

Вы использовали SQL Profiler для определения того, что вызывает узкое место? Возможно, лучше оптимизировать работу, которую выполняет сервер, чем управлять загрузкой из вашего приложения. – Tony

ответ

2

Производительность всегда многогранная. Как вы определили, что SQL является узким местом? Вы пробовали лучшие индексы, а также оптимизировали свои запросы?

Чтобы ответить на ваш вопрос, его довольно просто запросить счетчики монитора производительности, а SQL Server устанавливает кучу счетчиков при установке продукта.

Перейдите в меню «Пуск» и запустите «perfmon», а затем добавьте некоторые счетчики, чтобы посмотреть в различных категориях SQL Server или даже в более основных категориях памяти и ЦП.

Из этого вы можете видеть, какие счетчики должны контролировать. Вы можете использовать внешние инструменты для мониторинга счетчиков, чтобы узнать, превышают ли они пороговые значения или записывают собранные данные в таблицу 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: Вы можете запросить таблицу sys.dm_os_performance_counters в экземпляре sql. –

Смежные вопросы