Upgrade to Pro — share decks privately, control downloads, hide ads and more …

トランザクションの分離レベル(Isolation Level)について

トランザクションの分離レベル(Isolation Level)について

Avatar for vividmuimui

vividmuimui

June 07, 2017
Tweet

More Decks by vividmuimui

Other Decks in Programming

Transcript

  1. 分離レベルとは(2) 分離レベルとは(2) ANSI の定義だと、4 つの種類がある。 READ UNCOMMITTED READ COMMITTED REPEATABLE

    READ SERIALIZABLE READ UNCOMMITTED が一番独立性が低い、下に行くほど高い ( という話もある) Web 開発者が知っておくべき八つの分離レベル 4
  2. READ UNCOMMITTED READ COMMITTED PostgreSQL, Oracle, SQL Server REPEATABLE READ

    Mysql, MariaDB SERIALIZABLE は性能は良いが独立性が低い、 は独立性は高いが性能が低い より http://qiita.com/kumagi/items/1dc1a91ec007365ac694 5
  3. READ COMMITTED READ COMMITTED コミット済みのものはread する。 ファジーリード/Non-Repeatable Read Anomaly/Inconsistent Read

    Anomaly x を2 回read しようとした時に、間に他トランザクションでx のwrite があった時に、read した内容が異なる Read Skew Anomaly x, y をread しようとした時に、他トランザクションでy のwrite があ った時に、read したx, y に一貫性がない Lost Update Anomaly 6
  4. REPEATABLE READ REPEATABLE READ 一度読み込んだデータはそのトランザクション内では何度読んでも同じ値に なる。 ほかのトランザクションでwrite のコミットがされても、write 前のデータを read

    していれば、write 後にread しても同じデータが読まれる。 ファントムリード 2 回範囲に対する操作をした時に、間にinsert が発生していると、結 果が異なる 2 回count しようとした時に、間で1 件insert されてた場合、2 回目は 1 件多い数字になる READ COMMITTED で発生してたAnomaly は発生しない 7
  5. REPEATABLE READ(2) REPEATABLE READ(2) 同じtransaction 内で2 回read しようとしても結果は同じ。 => しかし、この仕組みのことを知らずに、

    最新のデータを取るぞ!って思って2 回目のread をしても1 回目のread と同 じデータなので、 事故る可能性がある。 8