Приостановленный статус в SQL Activity Monitor - PullRequest
10 голосов
/ 25 августа 2009

Что может привести к приостановке выполнения запроса в Management Studio?

  1. Я выполняю простой выбор топ 60000 из таблицы (в которой 11 миллионов строк), и результаты возвращаются в течение секунды или двух.
  2. Я меняю запрос на топ 70000, и результаты занимают до 40 минут.

После небольшого поиска другой, но связанной проблемы я наткнулся на кого-то, кто использовал DBCC FREEPROCCACHE, чтобы исправить это.

  1. Я запускаю DBCC FREEPROCCACHE, а затем повторяю запрос для 70000, и, похоже, он работает.

Однако проблема по-прежнему возникает с другим запросом.

  1. Я увеличиваю до 90000 или, если я пытаюсь открыть таблицу, используя [Right-> Open Table], она вытягивает около 8000 записей и останавливается.

Проверка журнала активности на наличие открытых таблиц показывает, что сеанс был приостановлен с типом ожидания «Async_Network_IO». Для сеанса, в котором выполняется выбор 90000, статус «Спящий», это тот же статус, что и для указанного выше запроса 70000, который вернулся, но через 45 минут. Мне странно, что статус показывает «Спящий» и не меняется на «Запускаемый» (у меня монитор activiy обновляется каждые 30 секунд).

Дополнительные примечания:

  • Я не запускаю одновременно Open Table и не выбираю 90000 одновременно. Все запросы выполняются по одному.
  • Я использую 32-разрядную версию SQL Server 2005 с пакетом обновления 2 (SP2) CU9. Я попытался обновить SP3, но столкнулся с ошибками установки. Проблемы возникали до того, как я попробовал это обновление.
  • Настройка сервера - это активный / активный кластер, проблема возникает на любом узле, а на другом экземпляре такой проблемы нет.
  • У меня есть ~ 20 других баз данных на этом же экземпляре сервера, но только эта одна БД видит проблему.
  • Эта база данных становится довольно большой. Это в настоящее время в 76756.19MB. Файл данных имеет размер 11 513 МБ.
  • Я вошел в систему локально на сервере с помощью удаленного рабочего стола.

Ответы [ 2 ]

9 голосов
/ 25 августа 2009

Тип ожидания «Async_Network_IO» означает, что он ожидает, пока клиент получит набор результатов, поскольку сетевой буфер SQL Server заполнен. Почему ваш клиент не собирает данные своевременно, я не могу сказать.

Другой случай, когда это возможно, связан со связанными серверами, когда SQL Server запрашивает удаленную таблицу, в этом случае SQL Server ожидает ответа от удаленного сервера.

Что-то, на что стоит обратить внимание, это антивирусные сканеры, если они контролируют сетевые соединения, иногда они могут запаздывать, что часто становится очевидным, если они загружают весь процессор.

2 голосов
/ 25 августа 2009

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

Попробуйте следующее:

  1. Используйте NOLOCK или установите УРОВЕНЬ ИЗОЛЯЦИИ СДЕЛКИ в верхней части запроса
  2. Проверьте ваш план выполнения и настройте запрос, чтобы быть более эффективным
...