What happens to running queries when stopping a Microsoft SQL Server instance?

Consider that a MS SQL Server instance is executing a long-running query the service is stopped via services.msc or - as it actually happening - a system shutdown triggered by a UPS as the server is in a developing country which experiences rolling power blackouts.

When this happens, the service stays in the 'Stopping' state for some time and CPU and disk I/O remains high for that process.

What happens to the queries that are being run? Are they allowed to complete before the service enters the 'Stopped' state or are they cancelled and rolled back?

Ideally, I am looking for an authoritative source (Microsoft documentation) as the answer as I suspect different behavior depending on a factor unknown to me. i.e. sometimes we see queries roll back, sometimes we see them complete. Perhaps the service makes a call as to how far through the transaction it is and if it is quicker to rollback or complete.

If it makes a difference, this is SQL 2012.

Thanks in advance!

3
задан 18 March 2016 в 15:59
1 ответ

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

Из MSDN :

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

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

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

Что касается выключения WITH NOWAIT:

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

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

2
ответ дан 3 December 2019 в 06:58

Теги

Похожие вопросы