4種類の分離レベルの中で1番トランザクションの独立性を保つことができるのが「シリアライザブル」分離レベルです。シリアライザブル分離レベルに設定することで,複数トランザクション内のSQL文が入り混じって動作しないようになります。
その実装方法は,RDBMSによって異なります。その1つの実装方法は,一方のトランザクションが終了するまで,もう一方のトランザクションの処理を開始しない方法です。そうすれば,前回説明したファントムリードも起きないようになります。
すべてのトランザクションを何も考えずにシリアライザブル分離レベルにて実行すれば,ファジーリードやファントムリードなどの問題を引き起こす心配はありません。しかし,そのようなことをしたら,おそらく期待する処理性能を実現することは難しいでしょう。
これまでの説明の中で複数のトランザクションが同時に実行された場合において,発生する可能性があるいくつかの不都合な現象が登場しました。「ダーティーリード」「ファジーリード」「ファントムリード」の3つです。最後にまとめとして,この3つの不都合な現象と4つのトランザクション分離レベルの対応関係をまとめましたので参考にして下さい。
分離レベル | ダーティーリード | ファジーリード | ファントムリード |
---|---|---|---|
リードアンコミッティド | 発生する | 発生する | 発生する |
リードコミッティド | 発生しない | 発生する | 発生する |
リピータブルリード | 発生しない | 発生しない | 発生する |
シリアライザブル | 発生しない | 発生しない | 発生しない |
アプリケーション開発者は,実現すべきトランザクションの要件をしっかりと理解し,極力RDBMSに負担をかけないように適切なトランザクション分離レベルを設定する必要があります。そうすることで,高性能でありながら高品質なトランザクション処理のアプリケーションを実現できるようになります。
藤塚 勤也(ふじづか きんや) NTTデータ 基盤システム事業本部 オープンソース開発センタ 技術開発担当 シニアスペシャリスト |
沖電気工業,タンデムコンピューターズ(現日本HP)を経て,2003年より株式会社 NTTデータに勤務。現在は,オープンソース・ソフトウエアを活用したエンタープライズ・システム向けの技術開発・技術支援に従事しており,特にシステムの中核であるRDBMSに注力している。「RDBMS解剖学」(翔泳社)を共著 |