Come terminare una transazione sospesa di SQL Server in attesa di IO_COMPLETION?


8

Abbiamo una transazione in esecuzione da più di 5 ore. Stiamo esaurendo lo spazio su disco. La sessione è stata interrotta ma è ancora in attesa di IO_COMPLETION. In realtà il wait_type è appena cambiato in PAGEIOLATCH_EX. Come posso terminare la transazione sospesa di SQL Server? Non sono preoccupato per la perdita di dati poiché è possibile ripopolarli tutti.

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

3
Lasciatelo finire .. altrimenti, se fate una scossa al ginocchio per togliere l'alimentazione o riavviare il servizio SQL Server, ci vorrà del tempo per il rollback. Dal momento che non sei preoccupato di perdere dati, che ne dici di ripristinare il database dall'ultimo backup e quindi ripopolare i dati? Inoltre, puoi utilizzare KILL 54 WITH STATUSONLYper scoprire quanto tempo impiegherà il rollback.
Kin Shah,

Ho eseguito KILL 54 WITH STATUSONLY e ho ricevuto questo: SPID 54: rollback della transazione in corso. Stima del completamento del rollback: 0%. Tempo rimanente stimato: 0 secondi. Non credo alla parte 0 secondi.
Tarzan,

2
Il rollback è un'operazione a thread singolo, quindi, ad esempio, se la transazione originale era in esecuzione con 8 thread paralleli fino alla sua interruzione, il rollback può richiedere 8 volte di più.
James Z,

@Tarzan KILL .. WITH STATUSONLYnon è preciso e vedo il tuo punto. Puoi provare Alter database .. set OFFLINE or single_User WITH ROLLBACK IMMEDIATE?
Kin Shah,

2
Ho finito per lasciarlo correre durante la notte. Finalmente è finito. Woohoo! Grazie per aver commentato.
Tarzan,

Risposte:


1

La prossima volta che ciò accade, esegui sp_WhoIsActive( download / documentazione ) e vedi chi esegue cosa e osserva la logica. Controlla se il TSQL può essere ottimizzato per essere eseguito più rapidamente o forse ridimensionarlo in transazioni più piccole.

Ho avuto casi in cui il registro delle transazioni di una query non valida da parte di autori di report, caricatori di dati, ecc. Aumentava il registro delle transazioni più grande della dimensione del file di dati, e di solito è una query mal funzionante, scritta male che non è ottimizzata o suddivisa in transazioni più piccole per restituire spazio libero una volta completata la transazione - anche su un SIMPLEdatabase del FULLmodello di recupero - i database del modello di recupero avrebbero dovuto completare i backup del registro delle transazioni per consentire il riutilizzo dello spazio del registro delle transazioni impegnate.

Il problema alla radice è probabilmente la query in modo da determinare chi sta facendo cosa e raggiungerli e segnalare il problema con le tue scoperte metterebbe la pressione su di loro per sistemare la loro logica per non riempire lo spazio su disco del server per quella partizione del disco - si spera che sia non la tua logica ma, se lo è, cerca di ottimizzare la logica per eseguire la query di ottimizzazione per le prestazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.