Время ожидания запроса SQL Server

Стороннее приложение, обращающееся к базе данных SQL Server 2012, получает [Microsoft][ODBC SQL Server Driver]Query timeout expired ошибки после выполнения около 20 минут.

Вот что я вижу в базе данных после того, как приложение начинает получать ошибки:

Скриншот запроса -1

SPID 102 не показан в запросе выше. Это другое соединение из того же приложения для того же процесса. Мне удалось запечатлеть некоторые детали этого на скриншоте ниже. Это самый верхний ряд на этом скриншоте. Приносим свои извинения, что полоса прокрутки была перемещена вправо при съемке скриншота.

Скриншот запроса - 2

AutoShrink был установлен на TRUE в этой базе данных, когда это произошло.

Это выглядит как:

  • несколько подключений из стороннего приложения, которое началось позже, ожидают SPID 27, который является командой AUTOSHIRNK

  • SPID 27 ожидает SPID 102, который является другим соединением от того же стороннего приложения

Вопрос:

  • Есть ли способ узнать, если соединение с SPID 27 создано с AutoShirnk был установлен на TRUE в базе данных?

  • Если да, то почему он ожидает SPID 102 и почему другие соединения (83,85,86,88 и 90) ожидают 27?

Согласно статье TechNet по ссылке ниже, AutoShrink не должен влиять на какую-либо активность в базе данных.

Если в базе данных для параметра AUTO_SHRINK установлено значение ON, компонент Database Engine уменьшает размер файлов в базе данных. Это действие происходит в фоновом режиме и не влияет на активность пользователя в базе данных.

Сжатие базы данных

Заметки:

  • В настоящее время он работает на SQL Server 2012 с пакетом обновления 1 (SP1), где возникает эта проблема.

  • Этот процесс в приложении работает нормально, когда приложение запускает базу данных в SQL Server 2008 с пакетом обновления 3 (SP3).

1 ответ

Решение

AUTO SHRINK работает по принципу циклического перебора и, если он видит свободное место в любой БД, он освобождает его.

Хотя он не имеет никакого эффекта, как долгосрочная блокировка, он требует много ресурсов, как ввода-вывода, так и процессора. Он также перемещает большой объем данных через буферный пул и, таким образом, может вызывать выталкивание горячих страниц на диск, что еще больше замедляет работу. Если сервер уже выдвигает пределы подсистемы ввода-вывода, запуск сжатия может привести к его превышению, что приводит к большой длине дисковой очереди и, возможно, к истечению времени ожидания ввода-вывода.

Вы получите много ответов и разъяснений здесь - http://www.sqlskills.com/blogs/paul/auto-shrink-turn-it-off/

Другие вопросы по тегам