タグ

2016年11月14日のブックマーク (4件)

  • InnoDBとREPEATABLE READとSELECT FOR UPDATEと楽観ロックその2 - もやぶろ

    前回の話に排他(行ロック)を絡めてみる。 Versionカラムを使った楽観ロックをしてみます。 ■ストーリー 1.セッション1 トランザクション開始 2.セッション2 トランザクション開始 3.セッション1 行情報取得→versionカラムを使って楽観ロックをした更新→commit or rollback 4.セッション2 行情報取得→versionカラムを使って楽観ロックをした更新→commit or rollback 楽観ロックなので、1行も更新できなかった場合はrollbackする想定です。 長いので1,2は省略しちゃいます。 READ COMMITTEDセッション1 mysql> select * from Version; +----+------+---------+ | id | text | version | +----+------+---------+ | 1 | i

    InnoDBとREPEATABLE READとSELECT FOR UPDATEと楽観ロックその2 - もやぶろ
    y_r
    y_r 2016/11/14
  • InnoDBとREPEATABLE READとSELECT FOR UPDATEと楽観ロックその1 - もやぶろ

    現場でちょっとはまった話。 InnoDBのトランザクション分離レベルhttp://dev.mysql.com/doc/refman/5.1/ja/innodb-transaction-isolation.html InnoDBはトランザクション分離レベルが選べますが、 デフォルトは「REPEATABLE READ」です。 Oracleは「READ COMMITTED」に近いとの事。(どこが違うんだろう。。) じゃあこの2つどう違うかというと、 READ COMMITTEDセッション1 mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> select * from Version; +----+------+---------+ | id | text | version | +----+------+---------+ |

    InnoDBとREPEATABLE READとSELECT FOR UPDATEと楽観ロックその1 - もやぶろ
    y_r
    y_r 2016/11/14
  • MySQL InnoDBのネクストキーロック おさらい - SH2の日記

    MySQLのInnoDBストレージエンジンは行ロックをサポートしています。しかしOracleと同じ感覚でアプリケーションを作っていると、思わぬところでデッドロックに出くわすことがあります。これはInnoDBのロック範囲がOracleよりも微妙に広いためです。 実際の例で確認してみましょう。 mysql> select * from t; +----+------+ | c1 | c2 | +----+------+ | 10 | a | | 15 | a | | 20 | a | | 25 | a | | 30 | a | | 35 | a | | 40 | a | | 45 | a | | 50 | a | +----+------+c1列は主キーになっています。1つめのセッションで以下のSQLを実行します。 mysql> set tx_isolation = 'repeatable-r

    MySQL InnoDBのネクストキーロック おさらい - SH2の日記
    y_r
    y_r 2016/11/14
  • 知って得するInnoDBセカンダリインデックス活用術!

    InnoDBはクラスタインデックスという構造になっている。今日はクラスタインデックスがどういうことかということを、皆さんに理解して頂きたい。もっとも理解して頂きたいポイントは「セカンダリインデックスのリーフノードには主キーの値が含まれている」ということだ。 主キーの構造InnoDBの主キーは次の図のように「データが主キーのリーフノードに含まれる」という構造になっている。このような構造をクラスタインデックスという。 このような構造になっていることには利点と欠点があるが、大きな利点は主キーの値で検索をすると非常に高速だということだ。主キーのリーフノードにたどり着いたときには、既にデータのフェッチも完了している。データとインデックスが別々に格納されているタイプのストレージエンジンでは、インデックスからデータの位置を読み取って、その後データファイルからデータをフェッチする。このように二段階の操作が

    知って得するInnoDBセカンダリインデックス活用術!
    y_r
    y_r 2016/11/14