タグ

lockに関するyouko03のブックマーク (5)

  • ActiveRecord の with_lock に先人の知恵を学ぶ - Qiita

    はじめに 先日、ActiveRecord の with_lock (lock!) を調べていた時に良くできているなあ、勉強になるなあと思ったので、その辺のことを書いてみたいと思います。 なお、以下の内容は、Rails 5.2.2 及び、PostgreSQL 10.7を前提にしていることをお断りしておきます。 with_lock とは Rails Guide の Pessimistic Locking に with_lock を使ったサンプルコードが登場します。要は、データ更新時に悲観的ロックをかけてくれるというものです。 SQLレベルでざっくりいうと、 SELECT ... FOR UPDATE をしてから UPDATE できるようになるということですね。 ただ、with_lock の前にモデルが変更されていた場合、どうなるのかちょっと気になりましたので、APIを調べてみました。 コードレ

    ActiveRecord の with_lock に先人の知恵を学ぶ - Qiita
  • Rails 7: with_lockでもtransactionのロック戦略引数を指定可能になった(翻訳)|TechRacho by BPS株式会社

    概要 元サイトの許諾を得て翻訳・公開いたします。 英語記事: Rails 7 adds optional transaction arguments to with_lock | Saeloun Blog 原文公開日: 2022/03/23 原著者: Murtaza Bagwala サイト: blog.saeloun.com 日語タイトルは内容に即したものにしました。 コンカレンシーの制御には、具体的には2種類のメカニズムがあります。悲観的ロックと楽観的ロックです。 楽観的ロック 楽観的ロック(optimistic locking)モデルは、複数のユーザーが同じレコードを更新しようとすると、他のユーザーもそのレコードを更新しようとしていることを通知せずに更新を許可するコンカレンシー制御です。レコードの変更は、レコードがコミットされるときにだけバリデーションされます。あるユーザーがレコード

    Rails 7: with_lockでもtransactionのロック戦略引数を指定可能になった(翻訳)|TechRacho by BPS株式会社
  • 良く分かるMySQL Innodbのギャップロック - Qiita

    MySQLのロック ロックとはトランザクションの並列度を上げる為の並列スケジューリング方法の一つ トランザクションをサポートしているデータベースにおいては、トランザクションの並列数を上げる事が性能アップの一つの方法。 他のトランザクションに更新して欲しくないデータだけにロックをかけて、ロックされたデータ以外を更新するトランザクションは並列で実行される。 Innodbは行ロック? Innodbは更新対象の行だけをロックする。と思っていると、意外な落とし穴にハマる。 その一つがギャップロック。 ギャップロックを実際に起こしてみる サンプルテーブル idとstrがあるだけのシンプルなテーブル。idがPKで1~5までは順番に、その後、10,20と飛んで行が入っている。 通常の行ロック トランザクション1 select for updateでid=2の行を明示的にロック トランザクション2 id=1

    良く分かるMySQL Innodbのギャップロック - Qiita
    youko03
    youko03 2021/09/14
    “ロックとはトランザクションの並列度を上げる為の並列スケジューリング方法の一つ ”
  • MySQL InnoDBのギャップロックによるデッドロックを解明する

    Photo by Kat Stokes on Unsplashこんにちは。仮想通貨の損益計算ツール「Gtax」、仮想通貨の確定申告サポート「Guaridan」を提供するAerial Partnersのエンジニアインターンの伊藤です。 今回は、Aerial Partnersのチームが実際にどのような技術を用いてブロックチェーンの社会実装を進めているかをお伝えするために、僕が最近取り組んでいた、大量のレコードを捌くDB処理の実装において直面した問題についてお話させていただきます。 InnoDBのロックアーキテクチャはややこしい!例題です。以下のような操作において、一体どのような原因でデッドロックが発生してしまうのでしょうか。 テーブル内容 > SHOW COLUMNS FROM t1;+-------+---------+------+-----+---------+-------+| Fie

    MySQL InnoDBのギャップロックによるデッドロックを解明する
  • InnoDBのロックの範囲とネクストキーロックの話 - かみぽわーる

    この記事はMySQL Casual Advent Calendar 2013 3日目の記事です。 はじめに 以前にSELECT ... FOR UPDATEとロックの挙動 - walf443's blogの記事にTwitterで少し言及したんですが、それの補足というか、InnoDBのロックの範囲について僕はこう理解していますよという話です。 MySQLといえば、InnoDBをネットワークサーバとして使うためのフレームワークであり、SQLはInnoDBのインデックスにアクセスするためのDSLといっても過言ではないでしょう。 InnoDBのロックとはつまるところインデックス行のロックなので、InnoDBのロックの範囲を理解するためにInnoDBのインデックスについて少し前置きしておきます(だいぶ端折ったけど長くなった…)。 クラスタインデックスとセカンダリインデックス すでにInnoDBのイン

    InnoDBのロックの範囲とネクストキーロックの話 - かみぽわーる
  • 1