タグ

InnoDBに関するkeihsのブックマーク (2)

  • updateが行ロックするとは限らない(MySQL InnoDB) - Qiita

    MySQLで、スレッドが排他的にテーブルを操作する方法がねえかと考えた。 updateなりdeleteなりなら行ロックでも別にいいのだが、テーブルに対するinsertもロックする方法がわからん。 LOCK TABLES構文というのを見つけて「名前的にこれやろ」と思ったが全然違って、しかも運用中のサービスに安易にコードを付け加えテストもせずにリリースしてしまったおかげで、4人しか入れない部屋に10人ぐらい参加してゲームが始まらないという恐怖の状態に陥ってしまった。当たり前である。(LOCK TABLES は、現在のスレッドに対してベース テーブル (ビュー以外) をロックします) 最初は、LOCK TABLESが「現在のスレッドに対しロック」して、「もしテーブルが1つでも他のスレッドによってロックされていたら、それは全てのロックを入手するまでブロック」するというのなら、必要なデータの読み書き

    updateが行ロックするとは限らない(MySQL InnoDB) - Qiita
    keihs
    keihs 2013/09/20
    “for updateなどでロックしても、トランザクションを「張った時点」のDBの状態(排他ロックしたスレッドのcommit等を反映していないデータ)を持ってくることがある。”
  • 大人のためのInnoDBテーブルとの正しい付き合い方。

    InnoDB関連でよくある質問のひとつに「テーブルのメンテナンスは何をすればいいんですか?」というものがある。InnoDBMySQL 5.5でデフォルトストレージエンジンとなるため、InnoDBのテーブルメンテナンス計画を立ようと思う機会も増えることだろう。そこで、今日はInnoDBのテーブルメンテナンスの各種方法となぜそうしなければいけないかという理由を解説しようと思う。 ANALYZE TABLEテーブルメンテナンスの代名詞といえば、インデックス統計情報の更新ではなかろうか。運用を続けるうちに、知らず知らずインデックス統計情報が狂ってしまい、思うような性能が出ない。RDBMSにはそのような問題がつきものであるが、InnoDBの場合、ANALYZE TABLEは不要である。なぜなら、InnoDBが自発的に統計情報を更新するからだ。InnoDBは以下の条件に適合すると、ANALYZE T

    大人のためのInnoDBテーブルとの正しい付き合い方。
  • 1