|
||||||||||||||||||||||||||||||||||||||||||||||||||
| 1 2 3 4 次のページ | ||||||||||||||||||||||||||||||||||||||||||||||||||
| トランザクションの分離レベル | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
これまでの連載でGUIツールを使用したデータベース構築を比較してきました。今回は、運用まわりに主眼をおきそれぞれの機能比較を紹介していく。 まずロックとトランザクションの分離についてだが、これはアプリケーションから見たデータの整合性を維持する機能であり、データベースにとって重要な機能である。なぜならば、複数のユーザが同時にデータを参照・更新を行った時に、変更中のデータ参照や同じデータへの同時更新を防止するからだ。 トランザクションの分離に関してはANSI/ISO SQL規格(SQL92)で規定されており、4つの分離レベルが定義されている。トランザクションは「開始宣言→データの操作→コミット命令」の流れで行うことが基本であり、コミットを行うまでデータ操作が確定しない仕組みである。トランザクションの分離レベルは、あるユーザがトランザクションを行っている途中で同じデータを別のユーザが読み出す時に発生する現象の組み合わせで分類されており、項番が大きいほど分離レベルが高く、一般的にパフォーマンスが低下する(表1)。
表1:SQL92のトランザクション分離レベル
表2:表1の各リードの注 各データベースの対応状況を表3に示す。
表3:各データベースの対応状況 (◎:デフォルト値) SQL Server 2005とMySQLは4つの分離レベルに対応した機能を実装している。一方、PostgreSQLは「READ COMMITTED」と「SERIALIZABLE」を実装し、「READ UNCOMMITTED」や「REPEATABLE READ」が指定された場合は、上位のトランザクションの分離レベルで動作する仕様となっている。 PostgreSQLのマニュアルでも記述されているが、標準SQLの許される範囲である。また、分離レベルに関して先駆者的な存在であるOracleもすべてを対応しているわけではなく、網羅性が優劣を決めるものではない。むしろ分離レベルのデフォルトが何になっているかと、分離レベルとパフォーマンスの関係が重要である。 |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
1 2 3 4 次のページ |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||

