京都内閣データベースの「物理的同期」とは何ですか?
-
29-09-2019 - |
質問
関数 begin_transaction どのタイプの同期を行うべきかを示すブールの引数を取ります。物理的なときに真または論理的なときに論理的。
「物理的」、またはハードな同期を指す場合はどういう意味ですか?
解決
私はJava同等物については正確にはわかりませんが、:
論理同期とは、DBの変更がDBMSキャッシュからファイルシステムに書き込まれることを意味します。 cでは、fprintf/fwrite/write/etcを使用してそれを行います。
物理的同期とは、上記を意味し、OSにファイルシステムキャッシュに保持するのではなく、永久ストレージ(ハードドライブ、SSDなど)の変更をプッシュするように要求する追加の操作が追加されます。それは、不均等なことが起こった場合、それらの変更が失われないことを保証します。 fsync()またはfdatasync()システム呼び出しを呼び出すことを意味するLinux/posixシステムで。
編集:
どうやらjavaのfsync()に相当するものは、filedescriptor.sync()にfilededescriptor.sync()です。
http://download.oracle.com/javase/1.4.2/docs/api/java/io/filedescriptor.html#
ポイントは、DBの真の酸セマンティクスを実現するには、すべてのトランザクションを永久貯蔵媒体に同期する必要があることです。それ以外の場合、アプリケーションは静かに失敗したトランザクションに対処できる必要があります - DBMSはトランザクションをファイルシステムにプッシュし、正常に戻りますが、システムが電力を失った場合、変更は失われる可能性があります。
物理的同期の問題は、パフォーマンスに大きな影響を与える可能性があることです。ハードドライブは、毎秒限られた数のトランザクションを処理できます(SSDは 多く これでより速く)、そのため、DBパフォーマンスを改善するために最初に行うべきことは、より大きなトランザクションでインサートをバンドルすることです。