Время ожидания запроса SQL Server
Стороннее приложение, обращающееся к базе данных SQL Server 2012, получает [Microsoft][ODBC SQL Server Driver]Query timeout expired
ошибки после выполнения около 20 минут.
Вот что я вижу в базе данных после того, как приложение начинает получать ошибки:
SPID 102 не показан в запросе выше. Это другое соединение из того же приложения для того же процесса. Мне удалось запечатлеть некоторые детали этого на скриншоте ниже. Это самый верхний ряд на этом скриншоте. Приносим свои извинения, что полоса прокрутки была перемещена вправо при съемке скриншота.
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/