SQL Server 2008 R2では、これら2つのロールバックの違いは次のとおりです。
ALTER
数分間ステートメントを実行し、「実行のキャンセル」を押します。完全にロールバックするには数分かかります。同じ
ALTER
ステートメントを実行しますが、これはLDF
ファイルが正常に完了するのに十分な大きさでないことを確認します。いったんLDF
制限が満たされるとNO「自動拡張」が許されない、クエリの実行はすぐに停止します(またはロールバックが起こる)、このエラーメッセージが表示されて:
The statement has been terminated.
Msg 9002, Level 17, State 4, Line 1
The transaction log for database 'SampleDB' is full.
To find out why space in the log cannot be reused, see the
log_reuse_wait_desc column in sys.databases
次の点で、これら2つの違いは何ですか?
2番目の「ロールバック」が瞬時に行われるのはなぜですか?ロールバックと呼べるかどうかは完全にはわかりません。私の推測では、トランザクションログは実行の進行とともに書き込まれ、タスクを完全に完了するための十分なスペースがないことがわかると、コミットせずに「終了」メッセージで停止します。
最初のロールバックに非常に長い時間がかかるとどうなりますか(ロールバックはシングルスレッドです)。
2.1。SQL Serverは戻って、LDF
ファイルに作成されたエントリを元に戻しますか?
2.2。LDF
ファイルサイズは(からのロールバックの終わりに小さくなりますDBCC SQLPERF(LOGSPACE)
)もう1つの質問:2番目のシナリオでは、SQL Serverが
LDF
ファイルをすぐに消費し始めます。私の場合、最初の数分(<4分)で使用率が18%から90%に増加しました。しかし、99%に達すると、さらに8分間そこに留まり、使用率は99.1%から99.8%の間で変動します。エラーがスローされる前に、数回(99.8%)上下し(99.2%)、再度上昇(99.7%)し、下降(99.5%)します。舞台裏で何が起こっていますか?
これをさらに説明するのに役立つMSDNリンクを歓迎します。
アリラゼギの提案で、perfmonを追加しています。 Disk Bytes/sec