TOPサーバ構築・運用> トランザクションの分離レベルの注意点
徹底比較!! PostgreSQL vs MySQL
徹底比較!! PostgreSQL vs MySQL

第3回:トランザクションの比較
著者:NTTデータ   藤塚 勤也   2006/5/8
前のページ  1  2  3  4
トランザクションの分離レベルの注意点

   それぞれのトランザクション機能を使用する上で注意しなければならない点があります。

   まず1つ目は、それぞれのトランザクション分離レベルのデフォルト設定が異なる点です。PostgreSQLのデフォルト設定はリードコミッティドであり、InnoDBエンジンのデフォルト設定はリピータブルリードです。

   2つ目は、それぞれのトランザクションの分離レベルをシリアライザブルにした時の動作の違いです。

   InnoDBエンジンのシリアライザブル状態は、図1のようにトランザクション1のSELECT文によって、テーブル「TEST」をロックしてしまうため、トランザクション2のDELETE文が実行できずロックの開放待ちになってしまいます。

トランザクション隔離レベル=シリアライザブルの動作(InnoDBエンジン)
図1:トランザクション隔離レベル=シリアライザブルの動作(InnoDBエンジン)

   ロックを使用して完全なるシリアライザブルの状態を実現しています。ところがPostgreSQLは、トランザクションの分離レベルをシリアライザブル状態にしても図2のようにトランザクション1はロックを使用しないため、トランザクション2は待たされることなく完了することができます。

トランザクション隔離レベル=シリアライザブルの動作(PostgreSQL)
図2:トランザクション隔離レベル=シリアライザブルの動作(PostgreSQL)

   このように、PostgreSQLとInnoDBエンジンそれぞれを同じトランザクションの分離レベルに設定したとしても、必ずしも同じ動作をするとは限りません。


まとめ

   トランザクションをテーマにトランザクションログ並びにトランザクションの同時実行性に焦点を当て、PostgreSQLとMySQL+InnoDBエンジンそれぞれが、どのような仕組みで実現しているかを解説しました。

   PostgreSQLは、最大の特徴である追記型構造を利用して実現しており、InnoDBエンジンは、比較的Oracleに近い仕組みを実現しています。

前のページ  1  2  3  4


NTTデータ  藤塚 勤也
著者プロフィール
株式会社NTTデータ   藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。

INDEX
第3回:トランザクションの比較
  はじめに
  トランザクション機能を持たないMySQL+MyISAMエンジン
  複数トランザクションの同時実行性
トランザクションの分離レベルの注意点