Назад | Перейти на главную страницу

Что происходит с выполнением запросов при остановке экземпляра Microsoft SQL Server?

Учтите, что экземпляр MS SQL Server выполняет длительный запрос, служба останавливается через services.msc или, как это происходит на самом деле, завершение работы системы, инициированное ИБП, поскольку сервер находится в развивающейся стране, в которой происходят постепенные отключения электроэнергии.

Когда это происходит, служба остается в состоянии «Остановка» в течение некоторого времени, а объем операций ввода-вывода ЦП и диска остается высоким для этого процесса.

Что происходит с выполняемыми запросами? Разрешено ли им завершиться до того, как служба перейдет в состояние «Остановлена», или они отменяются и откатываются?

В идеале я ищу авторитетный источник (документацию Microsoft) в качестве ответа, поскольку я подозреваю, что поведение зависит от неизвестного мне фактора. то есть иногда мы видим откат запросов, иногда мы видим их завершенными. Возможно, служба запрашивает информацию о том, как далеко продвинулась транзакция, и быстрее ли ее откатить или завершить.

Если это имеет значение, это SQL 2012.

Заранее спасибо!

Это зависит от того, выключили ли вы сервер с помощью NOWAIT или без него.

Из MSDN:

Если не используется параметр WITH NOWAIT, SHUTDOWN завершает работу SQL Server следующими способами:

  • Отключение входа в систему (за исключением членов фиксированных серверных ролей sysadmin и serveradmin).
  • Ожидание завершения выполняющихся в данный момент операторов Transact-SQL или хранимых процедур. Чтобы отобразить список всех активных процессов и блокировок, запустите sp_who и sp_lock соответственно.
  • Вставка контрольной точки в каждую базу данных.

Использование оператора SHUTDOWN сводит к минимуму объем работы по автоматическому восстановлению, необходимой при перезапуске SQL Server членами фиксированной серверной роли sysadmin.

Что касается завершения работы С ТЕПЕРЬ:

По желанию. Завершает работу SQL Server без выполнения контрольных точек в каждой базе данных. SQL Server завершает работу после попытки завершить все пользовательские процессы. Когда сервер перезагружается, выполняется откат для незавершенных транзакций.

По умолчанию выполняется ожидание завершения текущих транзакций (NOWAIT не является обязательным).