3

私の質問は、SQL Server でトランザクションがどのように処理されるかに関するものです。

大量のデータを含むユーザー定義のトランザクションがあるとします。そのデータは、そのプロセス中にどこに保存されますか? トランザクションが成功した場合にのみデータベースファイルにコミットされますが、事前にどこに存在しますか。

  • トランザクションを作成するプログラムのメモリに残りますか
  • SQL サーバーのメモリ プロセスに
  • データベースのトランザクション ログに書き込まれますか。
  • 一時ファイルまたはその他のディスクの場所?
4

2 に答える 2

2

コミットされていないデータは問題のテーブルに書き込まれ、トランザクションがコミットされるまでコミット済みとしてマークされません。トランザクションがロールバックされると、影響を受けるページを必要とする書き込みが次に発生したときにデータが上書きされます。トランザクションがコミットされると、テーブル内のデータはコミットされ、上書きできなくなります。ログには、データベース内で起こっていることの進行中の記録が含まれているため、システムがクラッシュした後、またはトランザクションがロールバックされた場合にトランザクションをロールバックまたはフォワードできます。

于 2013-04-03T18:56:02.127 に答える
2

SQL Server は、ARIES先行書き込みログを使用します。詳細はHow It Works: Bob Dorr's SQL Server I/O Presentationで説明されています。先行書き込みロギングでは、データに加えられたすべての変更がログ レコードによって記述される必要があるため、クラッシュ リカバリでデータベースを再構築できます。トランザクションをロールバックするには、ログをさかのぼって、トランザクションによって生成されたすべてのレコードに対して補正アクションを生成するだけです。これにより、トランザクションによって行われたすべてが事実上取り消されます。2 段階ロックにより、補償操作が常に自由に進行できるようになります。

Inside the SQL Server Transaction Logと、もちろんARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Loggingも参照してください。

于 2013-04-03T18:56:38.413 に答える