3

MySQLはトランザクションに何を使用しますか? MVCC (Multi Version Concurrency Control) または行レベルのロック
両方の場合、どうすれば一方から他方に移行できますか。

4

1 に答える 1

5

これは MySQL 自体には依存しませんが、InnoDB や MyIsam などの使用されるエンジンに依存します。


InnoDBトランザクション モデルの目標は、マルチ バージョン データベースの最良の特性と従来の 2 フェーズ ロックを組み合わせることです。InnoDB は行レベルでロックを行い、デフォルトでは、Oracle のスタイルで非ロックの一貫した読み取りとしてクエリを実行します。InnoDB のロック テーブルはスペース効率に優れた方法で格納されるため、ロックのエスカレーションは必要ありません。通常、複数のユーザーが InnoDB テーブルのすべての行、または行のランダムなサブセットをロックすることが許可されており、InnoDB のメモリが枯渇することはありません。

(ソース: http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html )


MySQL はMyISAM、MEMORY、および MERGE テーブルにテーブル レベルのロックを使用し、一度に 1 つのセッションのみがこれらのテーブルを更新できるようにするため、読み取り専用、ほとんど読み取り、またはシングル ユーザー アプリケーションにより適しています。

(ソース: http://dev.mysql.com/doc/refman/5.1/en/internal-locking.html )

于 2013-03-02T13:39:17.940 に答える