TOPサーバ構築・運用> はじめに
徹底比較!! PostgreSQL vs MySQL
徹底比較!! PostgreSQL vs MySQL

第3回:トランザクションの比較
著者:NTTデータ   藤塚 勤也   2006/5/8
1   2  3  4  次のページ
はじめに

   今回は、PostgreSQLとMySQLのトランザクション関連について両者がどのような特徴を持っているかを解説します。MySQLについては、ストレージエンジンの違いによっても異なるため、MyISAMとInnoDBそれぞれについて解説します。
トランザクション関連機能

   PostgreSQL、MySQLがサポートしているトランザクション関連機能を表1に示します。

項目 PostgreSQL MySQL
MyISAM InnoDB
トランザクション機能の有無 Yes No Yes
トランザクションの分離レベル 2レベル No 4レベル
MVCC Yes No Yes
ロックのレベル テーブル
デッドロック検出 Yes No Yes
参照整合性 Yes No Yes

表1:トランザクション関連機能


トランザクション機能の有無

   トランザクション機能をサポートしているのは、PostgreSQLとMySQL+InnoDBエンジンであり、MySQL+MyISAMエンジンはトランザクション機能をサポートしていません。ここでのトランザクション機能とは、複数のテーブルやレコードに影響をおよぼす処理を1つの単位とみなし、この単位での処理結果を保証する機能を指します。

   具体的には、BEGIN文にてトランザクションを開始していくつかの処理を行った後、処理を確定する場合はCOMMIT文、処理を取り消す場合はROLLBACK文を使用し、トランザクションを終了させるまでの処理です。


トランザクションの分離レベル

   トランザクション分離レベルとは、複数のトランザクションが同時に実行された場合に、他のトランザクションからの影響がどのくらい分離するかのレベルを意味します。

   ANSI/ISO SQL規格(SQL92)では4つの分離レベル(下記コラム参照)が定義されています。PostgreSQLはこの4つの分離レベルの内、リードコミッティドとシリアライザブルの2つをサポートしており、MySQL+InnoDBエンジンは、4つすべての分離レベルをサポートしています。

   なおOracleはPostgreSQLと同様に、リードコミッティドとシリアライザブルの2つとOracleオリジナルの読み取り専用モードと呼ぶ分離レベルの計3つをサポートしています。


ロックレベル

   ロックレベルとは、ロックを獲得する最小単位のことです。PostgreSQLとMySQL+InnoDBエンジンともに、行レベルのロック機能をサポートしています。ロックはできるだけ小さい単位で獲得したほうが、処理の同時実行性が向上します。

   なお、PostgreSQLもMySQLも行レベルのロック量が増えることによって、自動的にテーブルロックに変更されるロックのエスカレーションは発生しません。

   このように、PostgreSQLとMySQL+InnoDBエンジンは、ほぼ同等のトランザクション関連機能をサポートしていますが、MySQL+MyISAMエンジンはトランザクション関連機能そのものをサポートしていません。実際のシステムを設計する際には、この仕様の違いを十分に理解しておく必要があります。

ANSI/ISO SQL 規格(SQL92)による4つの分離レベル

   4つの分離レベルとは以下の通りです。

  • リードアンコミッティド
  • リードコミッティド
  • リピータブルリード
  • シリアライザブル

   これらの分離レベルは、複数のトランザクションを同時に実行する場合に防ぐ必要がある3つの現象という観点から定義され、それぞれでトランザクション処理の同時実行性に与える影響の度合いが異なります。

ダーティーリード
まだコミットされていないトランザクションが書き込んだデータを、別のトランザクションが読み込む現象。

ファジーリード
あるトランザクションが以前に読み込んだデータをもう一度読み込んだときに、コミットされた別のトランザクションによってそのデータが変更または削除される現象。

ファントムリード
あるトランザクションが検索条件を満たす一連の行を返却する問合せを2度実行する間に、コミットされた別のトランザクションによってその条件を満たす新しい行が挿入される現象。

   4つの分離レベルと3つの現象の関係は以下の通りです。

分離レベル ダーティー
リード
ファジー
リード
ファントム
リード
リードアンコミッティド あり あり あり
リードコミッティド なし あり あり
リピータブルリード なし なし あり
シリアライザブル なし なし なし

1   2  3  4  次のページ


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

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