2010-05-05 4 views
-1

Я знаю, что я не могу получить конкретный ответ на мой вопрос, но я хотел бы знать, могу ли я найти инструменты для ответа на мой вопрос.Sql Производительность сервера

Хорошо, у нас есть база данных Sql Server 2008, которая в течение последних 4 дней имела моменты, когда в течение 5-20 минут перестает отвечать на запросы.

например. Следующие запросы выполняются в разных окнах запросов одновременно имеют следующие результаты

SELECT * FROM Assignment --hangs indefinitely 

SELECT * FROM Invoice -- works fine 

Многие из таблиц имеют некластерных индексы, чтобы помочь ускорить ВЫБИРАЕТ

Вот что я знаю: 1) Тот же самый запрос будет либо вешать бесконечно, либо работать нормально. 2) В Activity Monitor на вкладке процессы там, как правило, около 80-100 процессов, запущенных

Я думаю, что то, что происходит, 1) Пользователь обновляет таблицу 2) Это вызывает один или несколько индексов, чтобы получить обновленную 3) Другой пользователь выдает выбор при обновлении индекса

Есть ли способ выяснить, почему в определенный момент времени SQL Server не отвечает за конкретный запрос?

+1

Есть ли что-нибудь еще в системе, в которой размещен экземпляр SQL Server? Я рекомендую ознакомиться с SQL Server Profiler (http://msdn.microsoft.com/en-us/library/ms187929.aspx) в течение определенного периода времени, чтобы увидеть, что на самом деле вызывает зависание. –

ответ

3

Система хранимой процедуры sp_who сообщит вам, заблокировано ли соединение из-за другого запроса.

1

Когда запрос (например, ваши примеры) зависает, наиболее распространенной причиной (по моему опыту) является то, что другой запрос блокирует его. Это может быть очевидным.

Чтобы диагностировать это, я просто использую Activity Monitor в Sql server Management Studio.

Найдите узел, который заблокирован, и через него вы можете найти то, что вызывает блок. Тогда, по крайней мере, вы изолируете проблему. Следующий шаг - предотвратить блокировку ... Это, безусловно, будет зависеть.

Для меня это длинный пробег BEGIN TRAN.

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