|
||||||||||||||||||||||||||||||
| 1 2 3 4 次のページ | ||||||||||||||||||||||||||||||
| はじめに | ||||||||||||||||||||||||||||||
|
今回は、PostgreSQLとMySQLのトランザクション関連について両者がどのような特徴を持っているかを解説します。MySQLについては、ストレージエンジンの違いによっても異なるため、MyISAMとInnoDBそれぞれについて解説します。 |
||||||||||||||||||||||||||||||
| トランザクション関連機能 | ||||||||||||||||||||||||||||||
|
PostgreSQL、MySQLがサポートしているトランザクション関連機能を表1に示します。
表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つの現象という観点から定義され、それぞれでトランザクション処理の同時実行性に与える影響の度合いが異なります。
4つの分離レベルと3つの現象の関係は以下の通りです。
|
||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
|
1 2 3 4 次のページ |
||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||

