タグ

lockに関するamari3のブックマーク (6)

  • InnoDB のロック待ち過多でデッドロックするやつ - takatoshiono's blog

    ロック待ちでデッドロック InnoDB は同じロックを待つクライアントが 200 を超えるとデッドロック扱いになる、というやつがある。 このへんに詳しく書いてある。 Open database life: InnoDBのAUTO_INCREMENTが遅い問題は5.1でどう改善されたのか 同じロックを待つクライアント数が一定ライン(ソース上の定数LOCK_MAX_DEPTH_IN_DEADLOCK_CHECK:200固定)を超えると、デッドロック扱いにして強制的にロールバックさせる、というInnoDBの実装に起因します。 MySQL :: MySQL 5.0 Reference Manual :: 14.2.7.1 InnoDB Lock Modes If the LATEST DETECTED DEADLOCK section of InnoDB Monitor output includ

    InnoDB のロック待ち過多でデッドロックするやつ - takatoshiono's blog
  • 楽観ロックと悲観ロックの違い -

    2014-01-16 楽観ロックと悲観ロックの違い ロックにも種類があり、楽観的ロックと悲観的ロックというものがある。 楽観的ロックとは、テーブルにもたせている更新タイムスタンプや、更新フラグを比較してロックするというものである。 例えば更新したいレコードを取得して、更新タイムスタンプを保持しておく。 そして、更新する直前に再度レコードを取得して更新タイムスタンプが最初の時と変わっていないかどうかで、排他処理を行うというものである。  その結果、帰ってきた値が0ならば、更新失敗となり、1ならば成功となる。 このように楽観的ロックは比較的簡単で自分が操作している情報は,他の人が操作する可能性が少ない時に主に多用される。 例: select update_number from optimistic_lock where user_id=1; #500が返ってくるとする update user

    amari3
    amari3 2014/09/30
  • プロセス間の期限付き排他ロック - (ひ)メモ

    追記 2013-03-04 [twitter:@dankogai] さんにも言及されてました>< 404 Blog Not Found:perl - soloで任意のコマンドを期限付きで排他実行する 追記 2013-03-01 つづきを書きました。 続・プロセス間の期限付き排他ロック - (ひ)メモ 追記 2013-02-27 コメント欄でのやりとりの通り、穴がある(クリティカルセクションに複数プロセスが突入する可能性がある)のでちょっと出直してきます!! やりたいこと プロセス間の排他的実行を制御したい 一定時間経過したら実行できるようにしたい 例えば、フェイルオーバーを実行するスクリプトは、何度も実行できるとフェイルオーバー/バックを繰り返してフラップするので、一度フェイルオーバーしたら一定時間は実行できないようにしたい 実装 シンボリックリンクを使って排他制御する 期限切れは、シンボ

    プロセス間の期限付き排他ロック - (ひ)メモ
    amari3
    amari3 2013/02/27
  • YappoLogs: ExclusiveLock::Guard という排他ロック簡単にやるモジュール書いた

    ExclusiveLock::Guard という排他ロック簡単にやるモジュール書いた ファイルを使って排他ロックするには、適当にロックファイルを作って flock $fh, LOCK_EX とかすると思います。 flock で使ったファイルハンドルが close されたら自動的に unlock されるので、最初っから Guard な感じなんだけどロック用のファイルも一緒に消したいので ExclusiveLock::Guard ってのを作った。 use ExclusiveLock::Guard; my $lock = ExclusiveLock::Guard->>new('/tmp/megazaru.lock'); って書くだけで $lock が生きてる間はロックかかってて、ロック外れたらファイルも一緒に消してくれるというだけの物。 ノンブロッキングなインターフェィスが欲しければ use E

    amari3
    amari3 2012/11/09
    便利そう
  • トランザクションを強制的に終了させる - HHeLiBeXの日記 正道編

    前置き MySQL 5.1で、InnoDBなデータベースを使って何かを開発している最中には、トランザクションがコミット(またはロールバック)される前にプログラム側の処理が(Fatal errorなどで)異常終了したりして、トランザクションがロックを取得したまま放置状態になってしまうことがよくあるらしい(謎)。 そんな時、MySQLのコマンドラインから更新クエリを発行すると、しばらく後に次のようなエラーが返ってくることがある。 ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 一応参考までに書いておくと、このエラーが返ってくるまでの時間は、次のコマンドで知ることができる。 mysql> show global variables like 'innodb_lock_wait_timeout';

    トランザクションを強制的に終了させる - HHeLiBeXの日記 正道編
  • InnoDBで行ロック/テーブルロックになる条件 - (゚∀゚)o彡 sasata299's blog

    2009年11月22日16:29 MySQL InnoDBで行ロック/テーブルロックになる条件 MySQL にはよく使われるストレージエンジンとして MyISAM と InnoDB がありますが、違いの一つとしてロックの挙動が挙げられます。MyISAM はテーブルロック、InnoDB は行ロックが掛かるというのは有名な話じゃないかと。 ただ、最近知ったのですが、InnoDB だとしても必ずしも行ロックになるわけではなく、テーブルロックになる場合もあるようですね。。このことについて手元の MySQL 5.1.26RC で簡単ですが検証してみます。サンプルとして使うテーブルはこちら。 CREATE TABLE `lock_sample` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c1` int(11) NOT NULL, `c2` int(11) NOT

  • 1