Como finalizar uma transação do SQL Server suspensa aguardando IO_COMPLETION?


8

Temos uma transação em execução há mais de 5 horas. Estamos ficando sem espaço em disco. A sessão foi encerrada, mas ainda está aguardando IO_COMPLETION. Na verdade, o wait_type acabou de mudar para PAGEIOLATCH_EX. Como posso encerrar a transação do SQL Server suspensa? Não estou preocupado com a perda de dados, pois tudo pode ser preenchido novamente.

session_id: 54
STATUS: suspended
blocked by: 0
wait_type: PAGEIOLATCH_EX
Elapsed Time (in Sec): 19750.420000
open_transaction_count: 2

3
Deixe-o terminar ... caso contrário, se você tentar extrair a fonte de alimentação ou reiniciar o serviço do servidor sql, levará algum tempo para reverter. Como você não está preocupado com a perda de dados, que tal restaurar o banco de dados do último backup e repovoar os dados? Além disso, você pode usar KILL 54 WITH STATUSONLYpara descobrir quanto tempo vai demorar para reverter.
Kin Shah

Executei KILL 54 WITH STATUSONLY e recebi o seguinte: SPID 54: reversão de transação em andamento. Conclusão estimada de reversão: 0%. Tempo estimado restante: 0 segundos. Não acredito na parte dos 0 segundos.
Tarzan

2
A reversão é uma operação de encadeamento único; portanto, por exemplo, se sua transação original estava sendo executada com 8 encadeamentos paralelos até serem eliminados, a reversão pode demorar 8 vezes mais.
James Z

@ Tarzan KILL .. WITH STATUSONLYnão é preciso e entendo o seu ponto. Você pode tentar Alter database .. set OFFLINE or single_User WITH ROLLBACK IMMEDIATE?
Kin Shah

2
Acabei deixando funcionar durante a noite. Finalmente terminou. Woohoo! Obrigado por comentar.
Tarzan

Respostas:


1

Da próxima vez que isso acontecer, execute sp_WhoIsActive( download / documentação ) e veja quem está executando o quê e veja a lógica. Verifique se o TSQL pode ser otimizado para executar mais rapidamente ou talvez dividi-lo em transações menores.

Eu já tive casos em que o log de transações de uma consulta incorreta feita por redatores de relatórios, carregadores de dados etc. aumentaria o log de transações maior que o tamanho do arquivo de dados e, geralmente, é uma consulta de baixo desempenho e mal escrita que não é otimizada ou fragmentada em transações menores para devolver espaço livre assim que a transação for concluída - também em um SIMPLEbanco de dados do FULLmodelo de recuperação - os bancos de dados do modelo de recuperação precisariam ter backups do log de transações concluídos para permitir a reutilização do espaço do log de transações das transações confirmadas.

O problema raiz provavelmente é a consulta, portanto, determinar quem está fazendo o quê, entrar em contato com eles e relatar o problema com suas descobertas pressionaria eles a corrigir sua lógica para não aumentar o espaço em disco do servidor para essa partição de disco - espero que seja não é sua lógica, mas se for, procure otimizar a lógica para consultar o desempenho.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.