分離レベルとは? わかりやすく解説

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

(分離レベル から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/03/18 18:31 UTC 版)

トランザクション分離レベル (トランザクションぶんりレベル)または 分離レベル (英: Isolation) とは、データベース管理システム上での一括処理(トランザクション)が複数同時に行われた場合に、どれほどの一貫性、正確性で実行するかを4段階で定義したものである。隔離レベル独立性レベルとも呼ばれる。トランザクションを定義づけるACID特性のうち,I(Isolation; 分離性, 独立性)に関する概念である。

概要

データベースへの読み書き(トランザクション処理)には処理時間が発生する。複数のトランザクション処理依頼がデータベース管理システムへ行われたとき、これらを処理する1つの方法は逐次的(Serial)に1つずつトランザクションを処理する方法である。トランザクション処理に処理時間がかかることから、後に行われた処理は先に行われた処理が完了するまでの間「待ち」の状態になってしまう。

待ちを最小化するためにはデータベース管理システムが複数のトランザクションを並行(Concurrent)に処理すればよい。しかしトランザクションは必ずしも安全に並列化できるとは限らない。そのためデータベース管理システムは各並行トランザクションが互いに影響を受けず分離された安全な範囲内でトランザクションを並行化する。あるいは、異常な振る舞い(anomalies)を起こしうる分離レベルが低い並行化を許容し、代わりに並行性を高めてトランザクション処理性能を上昇させる[1]。この安全性・一貫性と性能のトレードオフを生む、並行性トランザクションの分離具合がトランザクション分離レベルである[2]

トランザクション分離レベルはシステム要件に合わせデータベースの設計者によって設定される。例えば一切の異常な振る舞いが許されない金融システムには高いトランザクション分離レベルが設定される(代わりに性能は低い)。またanomaliesの可能性がある分離レベルを選択してもanomaliesを起こしえないトランザクションのみを処理するように設計すれば一貫性を保ちながら高い性能を得ることが可能になる。

分離レベル

ANSI/ISO SQL標準で定められている分離レベルは、下記の4種類で定義されている。

SERIALIZABLE(直列化可能)
複数の並行に動作するトランザクションそれぞれの結果が、いかなる場合でも、それらのトランザクションを時間的重なりなく逐次実行した場合と同じ結果となる。このような性質を直列化可能性(Serializability)と呼ぶ.SERIALIZABLEは最も強い分離レベルであり、最も安全にデータを操作できるが、相対的に性能は低い。ただし同じ結果とされる逐次実行の順はトランザクション処理のレベルでは保証されない。
REPEATABLE READ(読み取り対象のデータを常に読み取る)
ひとつのトランザクションが実行中の間、読み取り対象のデータが途中で他のトランザクションによって変更される心配はない。同じトランザクション中では同じデータは何度読み取りしても毎回同じ値を読むことができる。
ただし ファントム・リード(Phantom Read) と呼ばれる現象が発生する可能性がある。ファントム・リードでは、並行して動作する他のトランザクションが追加したり削除したデータが途中で見えてしまうため、処理の結果が変わってしまう。
READ COMMITTED(確定した最新データを常に読み取る)
他のトランザクションによる更新については、常にコミット済みのデータのみを読み取る。 MVCC はREAD COMMITTEDを実現する実装の一つである。
ファントム・リード に加え、非再現リード(Non-Repeatable Read)と呼ばれる、同じトランザクション中でも同じデータを読み込むたびに値が変わってしまう現象が発生する可能性がある。
READ UNCOMMITTED(確定していないデータまで読み取る)
他の処理によって行われている、書きかけのデータまで読み取る。
PHANTOMNON-REPEATABLE READ 、さらに ダーティ・リード(Dirty Read) と呼ばれる現象(不完全なデータや、計算途中のデータを読み取ってしまう動作)が発生する。トランザクションの並行動作によってデータを破壊する可能性は高いが、その分性能は高い。

anomaliesとphenomena

並列トランザクションを並べた時に起こりうる正常ではない現象(phenomena)としてANSI SQLは以下を定義している[3]

  • Dirty Read
  • Non-repeatable Read
  • Phantom

またANSI SQLでは指摘されなかった並行トランザクションの起こしうるanomaliesとして以下が挙げられる。

  • Dirty Write
  • Cursor Lost Update
  • Lost Update: read/writeからなるトランザクションが、read/writeの間に行われた別トランザクションのwriteを上書きする異常[4]
  • Fuzzy Read
  • Read Skew
  • Write Skew

分離レベルによって発生しうるanomaliesが異なり、開発者は受け入れられるanomaliesと性能のトレードオフを設計することができる[5]

脚注

[脚注の使い方]
  1. ^ Lower isolation levels increase transaction concurrency but risk showing transactions a fuzzy or incorrect database. doi: 10.1145/568271.223785
  2. ^ Running concurrent transactions at different isolation levels allows application designers to trade throughput for correctness. doi: 10.1145/568271.223785
  3. ^ These levels are defined with the classical serializability definition, plus three prohibited action subsequences, called phenomena: Dirty Read, Non-repeatable Read, and Phantom. doi: 10.1145/568271.223785
  4. ^ The problem, as illustrated in history H4, is that even if T2 commits, T2's update will be lost. doi: 10.1145/568271.223785
  5. ^ Running concurrent transactions at different isolation levels allows application designers to trade throughput for correctness doi: 10.1145/568271.223785

参考文献

  • Berenson, Hal; Bernstein, Phil; Gray, Jim; Melton,Jim; O'Neil, Elizabeth; O'Neil, Patrick (1995-05-22). “A critique of ANSI SQL isolation levels” (英語). ACM SIGMOD Record 24 (2): 1–10.doi:10.1145/568271.223785.

関連項目


分離レベル

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/03/18 18:31 UTC 版)

トランザクション分離レベル」の記事における「分離レベル」の解説

ANSI/ISO SQL標準定められている分離レベルは、下記4種類定義されている。 SERIALIZABLE直列化可能) 複数並行動作するトランザクションそれぞれの結果が、いかなる場合でも、それらのトランザクション時間的重なりなく逐次実行した場合と同じ結果となる。このような性質直列化可能性Serializability)と呼ぶ.SERIALIZABLEは最も強い分離レベルであり、最も安全にデータ操作できるが、相対的に性能は低い。ただし同じ結果とされる逐次実行の順はトランザクション処理レベルでは保証されないREPEATABLE READ読み取り対象データを常に読み取る) ひとつのトランザクション実行中の間、読み取り対象データ途中で他のトランザクションによって変更される心配はない。同じトランザクション中では同じデータ何度読み取りしても毎回同じ値を読むことができる。 ただし ファントム・リード(Phantom Read) と呼ばれる現象発生する可能性がある。ファントム・リードでは、並行して動作する他のトランザクション追加した削除したデータ途中で見えてしまうため、処理の結果変わってしまう。 READ COMMITTED確定した最新データを常に読み取る) 他のトランザクションによる更新については、常にコミット済みデータのみを読み取るMVCCREAD COMMITTED実現する実装一つである。 ファントム・リード に加え、非再現リード(Non-Repeatable Read)と呼ばれる、同じトランザクション中でも同じデータ読み込むたびに値が変わってしまう現象発生する可能性がある。 READ UNCOMMITTED確定していないデータまで読み取る) 他の処理によって行われている、書きかけのデータまで読み取るPHANTOM 、 NON-REPEATABLE READ 、さらに ダーティ・リード(Dirty Read) と呼ばれる現象不完全なデータや、計算途中データ読み取ってしまう動作)が発生するトランザクション並行動作によってデータ破壊する可能性は高いが、その分性能は高い。

※この「分離レベル」の解説は、「トランザクション分離レベル」の解説の一部です。
「分離レベル」を含む「トランザクション分離レベル」の記事については、「トランザクション分離レベル」の概要を参照ください。

ウィキペディア小見出し辞書の「分離レベル」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「分離レベル」の関連用語

分離レベルのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



分離レベルのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのトランザクション分離レベル (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのトランザクション分離レベル (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS