Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
lock in depth #TechLunch
Search
Livesense Inc.
PRO
April 23, 2014
Technology
0
71
lock in depth #TechLunch
2012/04/04(水) @ Livesense TechLunch
発表者:桂 大介
Livesense Inc.
PRO
April 23, 2014
Tweet
Share
More Decks by Livesense Inc.
See All by Livesense Inc.
27新卒_総合職採用_会社説明資料
livesense
PRO
0
1.5k
27新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
0
5.2k
株式会社リブセンス・転職会議 採用候補者様向け資料
livesense
PRO
0
130
株式会社リブセンス 会社説明資料(報道関係者様向け)
livesense
PRO
0
1.6k
データ基盤の負債解消のためのリプレイス
livesense
PRO
0
510
26新卒_総合職採用_会社説明資料
livesense
PRO
0
12k
株式会社リブセンス会社紹介資料 / Invent the next common.
livesense
PRO
2
47k
26新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
1
13k
中途セールス職_会社説明資料
livesense
PRO
0
280
Other Decks in Technology
See All in Technology
評価駆動開発で不確実性を制御する - MLflow 3が支えるエージェント開発
databricksjapan
1
210
Python 3.14 Overview
lycorptech_jp
PRO
1
120
AI駆動開発の実践とその未来
eltociear
1
210
Kiro を用いたペアプロのススメ
taikis
1
190
ディメンショナルモデリングを支えるData Vaultについて
10xinc
1
110
Amazon Quick Suite で始める手軽な AI エージェント
shimy
0
210
re:Invent2025 コンテナ系アップデート振り返り(+CloudWatchログのアップデート紹介)
masukawa
0
390
Power of Kiro : あなたの㌔はパワステ搭載ですか?
r3_yamauchi
PRO
0
180
AIの長期記憶と短期記憶の違いについてAgentCoreを例に深掘ってみた
yakumo
4
440
GitHub Copilotを使いこなす 実例に学ぶAIコーディング活用術
74th
3
3.4k
Jakarta Agentic AI Specification - Status and Future
reza_rahman
0
110
Strands Agents × インタリーブ思考 で変わるAIエージェント設計 / Strands Agents x Interleaved Thinking AI Agents
takanorig
2
180
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Fireside Chat
paigeccino
41
3.7k
The Language of Interfaces
destraynor
162
25k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Producing Creativity
orderedlist
PRO
348
40k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.7k
Building Adaptive Systems
keathley
44
2.9k
Music & Morning Musume
bryan
46
7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
710
Transcript
lock in depth
[email protected]
ACID • Atomicity トランザクションが「全て実行される」か「全く実行さ れない」ことを保証する • Consistency 整合性制約を満たす • Isolation
トランザクション中の過程が他から隠蔽される • Durability トランザクションが完了したら結果は永続する
• Exclusive lock and Shared lock • Read lock and
Write lock • Two-Phase Locking • Optimistic lock and Pessimistic lock • Timestamp Lock • Table-level lock and Row-level lock • Multiple granularity locking • Intention lock • Next key lock • Gap lock Lock
eXclusive and Shared lock • 排他/専有(X)ロックと共有(S)ロック • 共有ロック中は共有ロックのみ取得可 • 排他ロック中はどちらのロックも取得不可
• 共有ロック=読み込みロック • 排他ロック=書き込みロック
Two-phase locking(2PL) • ロックの取得と開放は2つのフェイズに分かれて いる • 取得の順番が違うとデッドロックが起こる • Expanding phase(Growing
phase) ロックが取得されていくフェイズ • Shrinking phase ロックが開放されるフェイズ
Pessimistic Lock • 悲観的ロック(悲観的並行制御) • トランザクション開始時に対象のロックを取得 • 取得出来ない場合は待つorエラー投げる • ロックを取得
• 安心して更新
Optimistic Lock • 楽観的ロック(楽観的並行制御) • トランザクション開始時のバージョン番号を取得 • ロックは特に取らない • トランザクション進める
• トランザクション終了時に開始時から更新されて いるかをチェック • 変更されていたらエラー投げる(orリトライ)
Optimistic Lock その2 • 実装はtimestampかバージョン番号 • ActiveSupportはlock_versionカラムを用意する と勝手にOptimistic Lockをかける •
cf. ActiveRecord::Locking::Optimistic • http://api.rubyonrails. org/classes/ActiveRecord/Locking/Optimist ic.html
Table-level lock • MyISAMでお馴染みテーブルロック • MEMORYもテーブルロック • 省メモリ、高速 • UPDATE,
DELETEがないときは使える
• 行ロック • ロックコンフリクトが少ない • InnoDB他メジャーなやつはだいたい行ロック • メモリを多く消費する • テーブル全体をロックするクエリが多いときはパ
フォーマンスが低い Row-level lock
Transaction Isolation Level • トランザクションが同時に実行されたときに、どれ くらい分離されるか(影響されないか) • ANSI/ISO SQL標準では4つ定められている •
Serializable • Repeatable Read • Read Committed • Read Uncommitted
Serializable • それぞれのトランザクションは逐次実行した場合 と同じ結果となる • 分離レベルは一番高い • 安全だが低性能
Repeatable Read • 同じ行のデータはトランザクション内で変更され ない • 同じ検索条件で新しい行が出てくること (Phantom Read)がある •
InnoDBのデフォルト分離レベル
Read Committed • コミット済みのデータのみ読み取る • 一度読み込んだデータをもう一度読み込むと データの内容が変更または削除されていること (Non-Repeatable Read)がある •
Phantom Readもある
Read Uncommitted • コミットされてなくても読み込む(Dirty Read) • Phantom, Non-Repeatableもある
トランザクション分離レベル Phantom Read Non- Repetable Read Dirty Read Serializable ×
× × Repeatable Read ◦ × × Read Committed ◦ ◦ × Read Uncommitted ◦ ◦ ◦
InnoDB • 分離レベルは全て対応 • デフォルトはREPEATABLE READ • 全ての接続を変更するときはmy.cnfで • SET
SESSION TRANSACTION ISOLATION LEVEL [LEVEL] でセッションのみも変更可 • SELECT @@tx_isolation; で確認
mysql> select @@tx_isolation; +-----------------+ | @@tx_isolation | +-----------------+ | REPEATABLE-READ
| +-----------------+ 1 row in set (0.03 sec)
InnoDB Locks • Record Lock インデックスレコードのロック • Gap Lock インデックス間、最初のインデックスの前、最後のイ
ンデックスの後ろのギャップのロック • Next Key Lock インデックスとインデックスの前のギャップの組み合 わせ
Next Key Lock DEMO
LOCK IN SHARE MODE FOR UPDATE • SELECTと同時にロックを取得 • LOCK
IN SHARE MODE は共有 • FOR UPDATEは排他
FOR UPDATE使わないと... 1. AがBEGIN, SELECT 2. BがBEGIN, UPDATE, COMMIT 3.
AがUPDATE, COMMIT REPEATABLE READだとAが読むデータは3でも 変わらないが、実際データは変更されている。 →1のSELECTをFOR UPDATEにすることで2でロッ ク待ちになる SERIALIZABLEだと常にSELECTがLOCK IN SHARE MODE
MVCC • MultiVersion Concurrency Control • 複数バージョンの同時並行性制御
User A User B SET AUTOCOMMIT=0; SET AUTOCOMMIT=0; time |
SELECT * FROM t; | empty set | INSERT INTO t VALUES (1, 2); | v SELECT * FROM t; empty set COMMIT; SELECT * FROM t; empty set COMMIT; SELECT * FROM t; --------------------- | 1 | 2 | --------------------- 1 row in set
次回は... 決戦!モナド