|
||||||||||||||
| 前のページ 1 2 3 4 | ||||||||||||||
| トランザクションの分離レベルの注意点 | ||||||||||||||
|
それぞれのトランザクション機能を使用する上で注意しなければならない点があります。 まず1つ目は、それぞれのトランザクション分離レベルのデフォルト設定が異なる点です。PostgreSQLのデフォルト設定はリードコミッティドであり、InnoDBエンジンのデフォルト設定はリピータブルリードです。 2つ目は、それぞれのトランザクションの分離レベルをシリアライザブルにした時の動作の違いです。 InnoDBエンジンのシリアライザブル状態は、図1のようにトランザクション1のSELECT文によって、テーブル「TEST」をロックしてしまうため、トランザクション2のDELETE文が実行できずロックの開放待ちになってしまいます。 ![]() 図1:トランザクション隔離レベル=シリアライザブルの動作(InnoDBエンジン) ロックを使用して完全なるシリアライザブルの状態を実現しています。ところがPostgreSQLは、トランザクションの分離レベルをシリアライザブル状態にしても図2のようにトランザクション1はロックを使用しないため、トランザクション2は待たされることなく完了することができます。 ![]() 図2:トランザクション隔離レベル=シリアライザブルの動作(PostgreSQL) このように、PostgreSQLとInnoDBエンジンそれぞれを同じトランザクションの分離レベルに設定したとしても、必ずしも同じ動作をするとは限りません。 |
||||||||||||||
| まとめ | ||||||||||||||
|
トランザクションをテーマにトランザクションログ並びにトランザクションの同時実行性に焦点を当て、PostgreSQLとMySQL+InnoDBエンジンそれぞれが、どのような仕組みで実現しているかを解説しました。 PostgreSQLは、最大の特徴である追記型構造を利用して実現しており、InnoDBエンジンは、比較的Oracleに近い仕組みを実現しています。 |
||||||||||||||
|
前のページ 1 2 3 4 |
||||||||||||||
|
|
||||||||||||||
|
|
||||||||||||||
|
||||||||||||||
|
|
||||||||||||||
|
||||||||||||||
|
|
||||||||||||||
|
||||||||||||||



