RAMまたは物理ファイルのトランザクションログ?


9

私はトランザクションの初心者ですが、トランザクションログに関する質問です。トランザクションをコミットすると、変更はトランザクションログに書き込まれますが、トランザクションログはRAMまたは物理ファイルにありますか?RAM内にあり、システム障害が発生した場合、明らかにRAMが再消去されるため、トランザクション情報が失われるので、コミットを回復するにはどうすればよいでしょうか。

回答:


15

この質問のかなり包括的なガイドはここにありますが、要約すると、SQL Serverは、トランザクションがディスクに強化されるまで、トランザクションをコミットしたアプリケーションに制御を返しません。具体的には、トランザクションログファイルに強化されたら、制御を戻すことができます。

この時点では、データはデータファイルに組み込まれていない可能性があり、データバッファーキャッシュに残っている可能性がありますが、トランザクションログに組み込まれているため、障害が発生した場合、データベースの回復によってこれを回復できます。トランザクションと変更を安全に永続化します。

トランザクションログへの順次書き込みのパフォーマンスへの影響を減らすために使用されるメモリには、ログバッファキャッシュがあります。バッファーはいくつかの条件でディスクにフラッシュされますが、その1つはトランザクションのコミットです。このデータが強化されるまで、制御は呼び出し元に返されないため、このバッファーのフラッシュ中に障害が発生した場合でも、このトランザクションはまだコミットされているとは見なされないため、トランザクションの一貫性は維持されます。そのトランザクションでのデータ変更は失われますが、コミットされなかったため、コミットが完了していないため、アプリケーションはそれらの変更が失われたと見なします。



4

データベースは、データファイルとトランザクションログファイルの2つのファイルで構成されます。これらはディスクに保存されます。

各データベースのRAMにはログキャッシュがあり、トランザクションがコミットされると、ディスクへのフラッシュを待機しているログキャッシュに移動されます。したがって、一時的に変換がコミットされてディスクにフラッシュされるのを待機している場合、変換はメモリ内にありますが、最終的にはRAMではなくファイル内のディスクに保存されます。

ここでは単純化しすぎています。トランザクションログを読むことをお勧めします。ここでは、Paul Randalsの講義の1つをお勧めします

https://youtu.be/LvlFgxZZOj4


@kevinwhatご回答ありがとうございます。したがって、1つのトランザクションをコミットし、それがログキャッシュで更新された場合、ログキャッシュがディスクにフラッシュされる前にシステムが失敗するので、トランザクションをどのように回復できますか?

1
その場合、@ slowjamsはトランザクションが行った変更がロールバックされます。クラッシュが発生したときにログのディスク上で安定していないためです。
Sean Gallardy-退職したユーザー

3
スロージャムあなたがdesrcibe何が起こらないか。コミットは同期的です。その時点までのすべてのログレコードがディスクに書き込まれる(「強化」される)まで、コミットは完了しません。
Tibor Karaszi、

0

他の人々から書かれたように、トランザクションログは常にCOMMITコントロールがアプリケーションに戻る前にディスクに書き込まれます。このため、ログファイルは常に高速SSDに配置する必要があります。

ただし、完全を期すために、少なくともWindows Server 2016とSQL Server 2016では、サーバーにNVDIMM(不揮発性DIMM =フラッシュまたはバッテリーバックアップRAM)を追加できました。この場合、SQL ServerはこのNVDIMMを使用して、NVDIMMに「ホット」トランザクションログテールを配置します。これは、定義に従って電源オフイベントが発生しても存続するためです。

これにより、書き込みの速度が大幅に向上します(RAMはSSDよりもはるかに高速であるため)。ただし、小さな書き込み/コミットが多いデータベース(例:忙しいオンラインショップの背後にあるデータベースまたは多くのオンラインゲームの背後にあるデータベース)でのみ言及します。同時プレーヤー)。


3
これは実際には質問に対する答えではなく、より高速なディスク用のプラグです。ログは常に高速ストレージにある必要はありません。ログを保存しないことには多くのビジネス上の理由があります。速く購入したいなら、速くする必要はありません...
James Jenkins
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.