Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SQL Server 2025 最適化されたロック
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Oda Shinsuke
September 26, 2026
Technology
64
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SQL Server 2025 最適化されたロック
第16回 関西DB勉強会
https://kansaidbstudy.connpass.com/event/398751/
Oda Shinsuke
September 26, 2026
More Decks by Oda Shinsuke
See All by Oda Shinsuke
SQL Server 2025 LT
odashinsuke
0
1k
SQL Server ベクトル検索
odashinsuke
0
2.3k
型を合わせとくとデータが多くなっても安心
odashinsuke
0
410
Other Decks in Technology
See All in Technology
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
4
730
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
6
760
人にやさしく、AIにやさしく、書き手を選ばないIaCのガードレール再考 / Rethinking IaC Guardrails for Humans and AI Alike
kohbis
5
1.1k
音声コミュニティを守るAI監視基盤_ 90%以上の入力削減を支えたServerless設計と運用判断
shuheioka123
0
100
C#コードの結合を可視化する Roslyn解析による設計改善と リファクタリング判断
dora56
0
700
今話題のAI「Jev」って何? 宇宙最速で学ぶ会
minorun365
PRO
33
21k
エージェントはローカル、検証はMicroVM — Lambda MicroVMsでつくるServerless CI
fujioka6789
3
790
開発投資の期待値を上げるプロダクトロードマップづくり ~プロダクトエンジニアが越境して事業を伸ばす~
kekekenta
1
250
ScotSecure West 2026 - Glasgow
raybugg
0
170
PQC移行の今 -- IETF からみた現在地
satokan
3
290
spanner-autoscalerに学ぶ CRD設計パターン 〜自動化と緊急時対応を両立する Kubernetesコントローラーの作り方〜
tkuchiki
0
100
データ_AIの事業の勝敗をわけるもの
nek0128
1
480
Featured
See All Featured
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
710
Practical Orchestrator
shlominoach
192
12k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
720
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
530
How to Talk to Developers About Accessibility
jct
2
550
Building Adaptive Systems
keathley
44
3.2k
Transcript
SQL Server 2025 最適化されたロック 第16回 関西DB勉強会 2026/09/26 @shinsukeoda
アジェンダ 従来のロックの課題 何が最適化されたのか (TID ロック / LAQ) デモ (ローカル SQL
Server 2025) まとめ & ベストプラクティス
何が最適化された? 「最適化されたロック」っていうけど、 何が最適化された? 答え: 大量更新でもロックが激減する ブロッキングが減る ロックエスカレーションが起きにくくなる 仕組みを順に見ていきます
ロックの基本 — SQL Server はこう動く ロック = トランザクションの ACID を守る
仕組み 書き込み = X (排他) ロック、読み取り = S (共有) ロック → X と S は両立しない SQL Server の既定 (READ COMMITTED) は「ロックベース」 更新中の行は読み取りもブロックされる PostgreSQL / Oracle / MySQL (InnoDB) の MVCC (Multi-Version Concurrency Control) とはここが違う U (更新: Update) = 更新候補を調べるとき に取る SQL Server 特有のロック
課題① ロックメモリ 1,000 行 UPDATE = 1,000 個の X 行
ロックをトランザクション終了まで保持 大量更新ではロックメモリが膨らむ テーブル (1,000 行を UPDATE) X X X X X X X X X X X X X X X X X X X X X X X X X X X … X 行ロック ×1,000 (コミットまで保持) ロック 1 個ごとにメモリを消費 ロックメモリが膨らむ
課題② ロックエスカレーション 行ロックが増える (目安 5,000 個超) と テーブルロックに昇格 ロックをメモリで管理する SQL
Server 固有の節約機構、だが… 行ロック ×5,000 超 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 昇格 テーブルロック ×1 → 無関係な行までブロック / 同時実行性が 低下
課題③ U ロックによるブロッキング スキャン中、条件判定のために各行へ U ロックを取得 条件に合わない行を通過するだけでもブ ロックされる ※適切なインデックスがあればこの例は回 避可能
— ただし万能ではない セッション2: UPDATE … WHERE a=2 (スキャン) 行1 の U ロック取得で停止 → ブロック! 行1 X 保持中 (セッション1) 行2 (a=2) 行3 行4
最適化されたロックとは SQL Server 2025 (17.x) で追加された新機 能 Azure SQL Database
/ Managed Instance / Fabric では既定で有効 (常に有効) オンプレミスはデータベース単位で設定 2 つのコンポーネント TID (Transaction ID: トランザクション ID) ロック LAQ (Lock After Qualification: 修飾後ロック)
コンポーネント① TID ロック 各行は最後に変更したトランザクション の TID を持つ 行・ページロックは更新した瞬間に解放 → 保持は
XACT への X ロック 1 個だけ 従来 X 最適化されたロック X X X X X X 行・ページロックは更新した瞬間に解放 X X X X X X X X X X X X X X XACT に X ロック ×1 保持: X 行ロック ×1,000 保持はこの 1 個だけ
コンポーネント② LAQ (修飾後ロック) U ロックを取らず、最新コミット済みバー ジョンで述語を評価 条件を満たした行だけ X ロックを取得 前提:
RCSI (Read Committed Snapshot Isolation) セッション2: UPDATE … WHERE a=2 (スキャン) ブロックされない! 行1 は素通り (コミット済みバージョンで判定) 行1 X 保持中 (セッション1) 行2 (a=2) X 取得して更新 行3 行4
LAQ の注意点 述語評価後に行が変わっていたら、再評 価してから更新 → 整合性は保たれる ただし、トランザクションの厳密な実行 順序に依存する処理では結果が変わり得 る 厳密な順序が必要なら
REPEATABLE READ / SERIALIZABLE を検討
有効化と前提条件 ALTER DATABASE [DB名] SET OPTIMIZED_LOCKING = ON; 前提が揃っているかは sys.databases
で 確認 (デモで見せます) OPTIMIZED_LOCKING = ON RCSI (LAQ に必須) ADR (高速データベース復旧) — 必須 ↑ 土台から順に有効化する
デモ① ロック数の比較 1,000 行 UPDATE を OFF / ON で実行
sys.dm_tran_locks で保持ロックを観察 OFF: KEY の X ロック 1,000 個 + PAGE の IX ロック ON: XACT への X ロック 1 個だけ
デモ② ブロッキングの解消 (LAQ) 2 セッションで「別々の行」を UPDATE (ヒープ = テーブルスキャン) OFF:
セッション 2 がブロックされる ON: ブロックされない! 同じ行なら ON でも正しく待つ (ACID は 守られる)
おまけ: 新しい診断情報 新しい待機の種類: LCK_M_S_XACT_MODIFY / LCK_M_S_XACT_READ sys.dm_exec_requests の wait_resource に
XACT sys.dm_tran_locks に XACT ロックリ ソース デッドロックグラフにも <xactlock> 要 素が追加
まとめ & ベストプラクティス 最適化されたのは「ロックの保持数・保 持期間・取得タイミング」 RCSI を有効にして使うのがベスト ロックヒント (UPDLOCK /
XLOCK / HOLDLOCK …) は必要最小限に クエリの書き換えは不要 (DML の行・ ページロックにのみ影響) 参考: Microsoft Learn「最適化された ロック」