Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JPOUG_12_20250417_LockFree.pdf

 JPOUG_12_20250417_LockFree.pdf

Avatar for Hidehiko ASAHI

Hidehiko ASAHI

April 29, 2025
Tweet

More Decks by Hidehiko ASAHI

Other Decks in Technology

Transcript

  1. 2 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ◼朝日 英彦(ASAHI Hidehiko) ⚫野村総合研究所 • 金融業界向けのシステム基盤設計・構築、特にデータベース周りのチューニング等 • 現在は保険業界向けのシステムモダナイズやクラウドマイグレ案件など ◼Oracle関連の資格など ⚫Oracle ACE Pro(Database) ⚫Oracle Master Platinum ⚫Oracle Database Cloud Administrator 2023 Certified Professional ⚫Oracle Autonomous Database Cloud 2023 Certified Professional ⚫Oracle Base Database Services 2023 Certified Professional ⚫My Oracle Support Community Most Valued Contributor 2022~2024 ◼その他クラウド・データベース関連の資格など ⚫Japan AWS Top Engineer (Database) 2022, 2023, 2024 ⚫AWS Community Builder (DATA) 2023~2024 ⚫AWS Certified Database – Specialty (Japan AWS All Certifications Engineer 2022~2024) ⚫Azure Database Administrator Associate ⚫Google Cloud Certified Professional Cloud Database Engineer ⚫情報処理技術者(データベース) 自己紹介
  2. 3 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ◼Oracle Database 23aiの新機能の一つにロックフリー予約機能があります ⚫ロックフリー予約では該当する行についてはコミット時にのみロックが取得される ◼一方、2024年のre:inventにてAWSが発表したAurora DSQLでも、楽観的同時実行 制御を採用しておりロックを取得せず低レイテンシにトランザクション処理が可能、となっ ています ◼似たような説明ですが、一見違いが良くわかりません。。 ◼また、今までOracle Databaseを利用する場合には「ロック方式」を利用してきたこともあ り、ピンとこない方も多いのではないかと拝察します ◼本セッションでは通常のOracle Databaseの仕組みを振り返りつつ、ロックフリー予約機 能と楽観的同時実行制御の概要紹介とその比較を行います はじめに
  3. 5 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    トランザクションの同時実行制御 ◼そもそも同時が必要な理由って? ⚫並列に実行したほうが速い!! 出典:https://gihyo.jp/dev/serial/01/db-academy/000203
  4. 6 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    トランザクションの同時実行制御 ◼そもそも同時が必要な理由って? ⚫並列に実行したほうが速い!!けど・・? 出典:https://45kaku.com/itpassport_text_57-02/ 不整合!
  5. 7 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    トランザクションの同時実行制御 ◼そもそも同時が必要な理由って? ⚫ガードすることで不整合をなくす←悲観的同時実行制御 出典:https://45kaku.com/itpassport_text_57-02/
  6. 8 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    悲観的同時実行制御と楽観的同時実行制御のイメージ ◼悲観的同時実行制御 ⚫変更時にロックをかけて整合性を確保 出典:https://codezine.jp/article/detail/6764 悲観的同時実行制御 楽観的同時実行制御 ◼楽観的同時実行制御 ⚫変更確定時に確認することで整合性を確保
  7. 9 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    悲観的同時実行制御と楽観的同時実行制御 ◼悲観的同時実行制御 ⚫「転ばぬ先の杖」で、事前にロックして競合を防ぐが、待ち時間が発生する可能性がある ◼楽観的同時実行制御 ⚫「とりあえずやってみて、問題があればやり直す」方式で、競合がなければ高速だが、競合が多いと手戻りが増 える 比較項目 悲観的同時実行制御 (PCC) 楽観的同時実行制御 (OCC) 競合に対する仮定 競合は頻繁に起こる (悲観的) 競合は稀にしか起こらない (楽観的) ロック取得タイミング データアクセス前 基本的に行わない (コミット時に検証) 競合検出タイミング データアクセス時 (ロック取得試行時) コミット時 競合時の主な動作 ロック解放まで待機 ロールバックして再試行 再試行処理の実装が必要 パフォーマンス特性 競合が多い場合に有利 (待機コストはあるが、再試行少ない) 競合が少ない場合に有利 (ロックオーバーヘッドなし) デッドロック 発生の可能性あり 基本的に発生しない 適した環境 更新が多く、データ競合の可能性が高いシステム 読み取りが多く、データ競合の可能性が低いシステム、分 散システム
  8. 10 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    楽観的同時実行制御といえば・・・Aurora DSQL ◼DSQLの楽観的同時実行制御の概要 ⚫事前ロックを取得せず、コミット時にデータ整合性を確認 出典:https://engineering.dena.com/blog/2025/03/aurora-dsql_02_spanner/
  9. 12 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ロックフリー予約機能概要 ◼目的 ⚫在庫数、口座残高、予約枠など、頻繁に更新される特定の数値データ(ホットスポット)に対する 更新処理の競合を減らし、スループットとスケーラビリティを向上させること ◼仕組み ⚫テーブル作成時または変更時に、特定の数値列を RESERVABLE(予約可能列) として宣言 ⚫この予約可能列に対するUPDATE文(加算・減算など)は、トランザクション実行中に行ロックを取 得せず「更新の予約」として記録 ⚫複数のトランザクションが、ロック待機なしに同じ行の予約可能列に対して同時に予約を行うことが 可能 ⚫実際の行データの変更と、短期間の行ロック取得は、トランザクションが コミットされるタイミング に遅 延される ⚫コミット時に、予約された更新を適用した結果がCHECK制約などに違反しないか検証され、違反す る場合はトランザクションがロールバック ◼特徴 ⚫トランザクション実行中のロック待機を回避することで、特定の種類の更新が集中するワークロードに おいて高い同時実行性を実現
  10. 13 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ロックフリー予約機能のイメージ図 ◼通常のOracleトランザクションとロックフリー予約機能を利用したトランザクション ◼ロックフリー予約は通常のOracle上のトランザクションとは違い、更新時にロックを取得しない! 「ロックフリー予約=楽観的同時実行制御」 出典:https://medium.com/@vbalebai/introduction-7998b2b68a51 通常のOracleトランザクション ロックフリー予約機能を利用したトランザクション
  11. 14 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ロックフリー予約機能 ◼ロックフリー表の作成 出典:https://qiita.com/asahide/items/b83c187eb3189714f9d2
  12. 15 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ロックフリー予約機能 ◼ロックフリー表の属性 出典:https://qiita.com/asahide/items/b83c187eb3189714f9d2
  13. 16 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ロックフリー予約機能 ◼ジャーナル表の確認 出典:https://qiita.com/asahide/items/b83c187eb3189714f9d2
  14. 17 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ロックフリー予約機能 ◼トランザクションの実施(-10&-20) 出典:https://qiita.com/asahide/items/b83c187eb3189714f9d2
  15. 18 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ロックフリー予約機能 ◼別のトランザクションの実施(+20) 出典:https://qiita.com/asahide/items/b83c187eb3189714f9d2
  16. 19 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ロックフリー予約機能 ◼最初のトランザクション(-10&-20)のcommit 出典:https://qiita.com/asahide/items/b83c187eb3189714f9d2
  17. 20 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ロックフリー予約機能 ◼対象表へのアップデートで内部的には予約ジャーナルへのインサートなども実行されている 出典:https://qiita.com/asahide/items/b83c187eb3189714f9d2
  18. 21 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ロックフリー予約機能とDSQLの動作の違い(の一部) ◼ロックフリー予約機能を利用した複数のトランザクション 出典:https://www.youtube.com/watch?v=h6YvDoBfeyg DSQLだとここが違う!
  19. 22 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ロックフリー予約と楽観的同時実行制御の差分 項目 Oracle 23ai ロックフリー予約 楽観的同時実行制御 (OCC) 適用対象/粒度 特定のテーブルの特定の数値列 (RESERVABLE) に限定 列単位で指定 (PDBレベルでの利用可否を設定可能) (基本的には)データベース全体 実装メカニズム 行に更新の「予約(RESERVE)」情報を付与 予約列に付与されたジャーナルで制約検証を実施 読み取り時にデータバージョンを記録 コミット時にバージョンを比較して競合を検出 ロックの有無 トランザクション中の予約列更新はロックを取得しない トランザクション中は基本的にロックを取得しない 想定競合 主に同じ行の特定数値列への加減算更新の競合 Write/Write競合。 制約連携 CHECK制約など、Oracle固有の制約と連携 一般的な概念であり、特定のDB機能との密な連携は実装に 依存 ◼ロックフリー予約と楽観的同時実行制御の差分 • 特定の数値列のみが対象 ←影響範囲を絞れる • 基本的には既存のOracleの機能を内部で活用 ←ロック競合についての低減を指向 • 全体が対象 ←アーキテクチャに沿っての全体的な設計が必要 • 分散処理の機能で実装 ←ロック競合の低減とリージョン跨ぎなどの分散処 理での高速化を指向
  20. 23 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ロックフリー予約機能の使いどころ
  21. 24 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ロックフリー予約の使いどころ(既存の課題) ◼ロックフリー予約機能の前提は、特定の表の特定の数値列が対象 ◼高い競合が発生する数値データ ⚫口座残高 ⚫在庫引当 ⚫座席・チケット予約 ⚫etc・・
  22. 25 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ロックフリー予約性能検証 By Oracle ◼在庫引当に対しての性能検証 出典:https://speakerdeck.com/oracle4engineer/technight71-oracle23c-new-feature-perf?slide=11
  23. 26 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    ロックフリー予約性能検証 By Oracle ◼在庫引当に対しての性能検証結果 出典:https://speakerdeck.com/oracle4engineer/technight71-oracle23c-new-feature-perf?slide=13
  24. 28 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    23ai 新機能 ロックフリー予約 ◼特定の表の特定の数値列をジャーナル化することで、その列をロック対象 から外している(ように見える) →該当列の競合を避けることができるようになる →ジャーナル表へのインサートなども実行されるためクエリ毎の負荷は増加して いる →未コミットのタイミングでもクエリの結果整合性について評価はされる ◼楽観的同時実行制御とは全く別の仕組みで、ロック競合を回避することで競 合による待機を減らして高速化
  25. 30 Copyright (C) Nomura Research Institute, Ltd. All rights reserved.

    おまけ ◼優先トランザクション(Oracle Database 23ai新機能) ⚫優先度を高く設定したトランザクションが、低い設定のトランザクションをロー ルバックさせることができる機能! • セッションレベル:TXN_PRIORITY で設定 •LOW, MIDIUM, HIGH の三つが設定可能、デフォルトはHIGH • ロールバックさせるまでの時間を制御可能 •PRIORITY_TXNS_HIGH_WAIT_TARGET、 PRIORITY_TXNS_MIDIUM_WAIT_TARGETで設定可能 • 管理者によるテストモード:PRIORITY_TXNS_MODE •TRACKとROLLBACKを設定可能、TRACKはテストモード (分散トランやXAトランでも適用が可能) 出典:https://docs.oracle.com/cd/G11854_01/admin/managing-transactions.html https://blogs.oracle.com/oracle4engineer/post/ja-automatic-transaction-rollback-in-23c