IO_COMPLETIONを待機している中断されたSQL Serverトランザクションを終了する方法は?


8

5時間以上実行されているトランザクションがあります。ディスク領域が不足しています。セッションは強制終了されましたが、IO_COMPLETIONを待機しています。実際、wait_typeはPAGEIOLATCH_EXに変更されました。一時停止したSQL Serverトランザクションを終了するにはどうすればよいですか?データはすべて再入力できるため、データが失われる心配はありません。

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

3
それを終了させて​​ください..さもなければ、電源を引き出すか、SQLサーバーサービスを再起動するというちょっとしたことをすると、ロールバックに時間がかかります。データが失われる心配はないので、最後のバックアップからデータベースを復元してから、データを再入力しますか?さらに、を使用KILL 54 WITH STATUSONLYして、ロールバックにかかる時間を調べることができます。
Kin Shah

KILL 54 WITH STATUSONLYを実行して、次のメッセージを受け取りました。SPID54:トランザクションのロールバックが進行中です。推定ロールバック完了:0%。推定残り時間:0秒。0秒の部分は信じられません。
ターザン

2
ロールバックはシングルスレッド操作であるため、たとえば、元のトランザクションが強制終了されるまで8つのスレッドで並行して実行されていた場合、ロールバックには8倍の時間がかかる可能性があります。
James Z

@ターザンKILL .. WITH STATUSONLYは正確ではなく、私はあなたの意見を理解しています。やってみAlter database .. set OFFLINE or single_User WITH ROLLBACK IMMEDIATEませんか?
Kin Shah

2
私はそれを一晩実行させることになりました。いよいよ終わりました。ウフー!コメントありがとうございます。
ターザン

回答:


1

次回これが発生した場合、実行sp_WhoIsActiveダウンロード/ドキュメント)して、誰が何を実行しているかを確認し、ロジックを確認します。TSQLを最適化してより高速に実行できるかどうか、または小さいトランザクションに分割できるかどうかを確認します。

レポートライター、データローダーなどによる不適切なクエリのトランザクションログがトランザクションログをデータファイルのサイズより大きくする場合がありましたが、通常はパフォーマンスが低く、書き込みが不十分で、最適化またはチャンク化されていません。トランザクションが完了したら、小さなトランザクションに空き領域を戻しSIMPLEます-ちなみにこれも復旧モデルデータベース上でした-コミットされたFULLトランザクションのトランザクションログスペースを再利用できるようにするには、復旧モデルデータベースでトランザクションログのバックアップを完了する必要があります。

根本的な問題はクエリである可能性が高いので、だれが何をしていて、彼らに連絡し、調査結果で問題を報告すると、そのディスクパーティションのサーバーディスクスペースを無駄にしないようにロジックを修正するように圧力がかかります-うまくいけばロジックではありませんが、そうである場合は、ロジックを最適化してパフォーマンスのチューニングを照会します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.