O que acontece com a execução de consultas ao parar uma instância do Microsoft SQL Server?

3

Considere que uma instância do MS SQL Server está executando uma consulta demorada que o serviço é interrompido via services.msc ou - como está acontecendo - um desligamento do sistema acionado por um no-break, pois o servidor está em um país em desenvolvimento blecautes de energia.

Quando isso acontece, o serviço permanece no estado 'Parando' por algum tempo e a E / S da CPU e do disco permanece alta para esse processo.

O que acontece com as consultas que estão sendo executadas? Eles podem concluir antes que o serviço entre no estado "Interrompido" ou sejam cancelados e revertidos?

O ideal é que eu esteja procurando uma fonte autorizada (documentação da Microsoft) como a resposta, pois suspeito de um comportamento diferente, dependendo de um fator desconhecido para mim. Por exemplo, às vezes vemos as consultas revertidas, às vezes as vemos concluídas. Talvez o serviço faça uma chamada para saber até onde a transação é feita e se é mais rápida a reversão ou conclusão.

Se isso faz diferença, isso é o SQL 2012.

Obrigado antecipadamente!

    
por alifen 18.03.2016 / 14:59

1 resposta

2

Depende se você encerra o servidor com ou sem o NOWAIT.

Em MSDN :

Unless the WITH NOWAIT option is used, SHUTDOWN shuts down SQL Server by:

  • Disabling logins (except for members of the sysadmin and serveradmin fixed server roles).
  • Waiting for currently running Transact-SQL statements or stored procedures to finish. To display a list of all active processes and locks, run sp_who and sp_lock, respectively.
  • Inserting a checkpoint in every database.

Using the SHUTDOWN statement minimizes the amount of automatic recovery work needed when members of the sysadmin fixed server role restart SQL Server.

Quanto a encerrar COM NOWAIT:

Optional. Shuts down SQL Server without performing checkpoints in every database. SQL Server exits after attempting to terminate all user processes. When the server restarts, a rollback operation occurs for uncompleted transactions.

O padrão é aguardar o término das transações atualmente em execução (NOWAIT é opcional).

    
por 18.03.2016 / 15:16