A Dynamic Mobility Histogram Construction Method Based on Markov Chains

Similar documents
Chapter Two

Chapter Two

プレポスト【問題】

1 トランザクション管理

DUCTION はじめての人のための トランザクション入門 TO INTRO- TRANS- 日本 PostgreSQL ユーザ会第 35 回 PostgreSQL 勉強会 2017 年 5 月 27 日 ACTION 坂田哲夫 (NTT OSS センタ ) 1

データベース 【1:データベースシステムとは】

リレーショナルデータベース入門 SRA OSS, Inc. 日本支社 Copyright 2008 SRA OSS, Inc. Japan All rights reserved. 1

Microsoft PowerPoint - db03-9.ppt

…l…b…g…‘†[…N…v…“…O…›…~…fi…OfiÁŸ_

PowerPoint プレゼンテーション

7-1- 基 RDB に関する基礎知識 1 独立行政法人情報処理推進機構

Microsoft PowerPoint - system8.ppt

PowerPoint プレゼンテーション

情報科学概論 第6回

プレポスト【問題】

マニュアル訂正連絡票

橡ExCtrlPDF.PDF

はじめに コース概要と目的 Oracle を使用した開発 管理を行う上でのファースト ステップとして リレーショナル データベース管理ソフトウェアである Oracle の役割 基本機能 基本アーキテクチャを幅広く理解することを目的としています 受講対象者 これから Oracle を使用する方 データ

データベースアクセス

PostgreSQL v.s. 大規模 OLTP 2019 年 4 月 19 日 OSS コンソーシアムデータベース部会セミナー SRA OSS, Inc. 日本支社高塚遥 Copyright 2019 SRA OSS, Inc. Japan All rights reserved. 1

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

今さら聞けない!? Oracle入門 ~後編~

Freelance Graphics - Œ³‚è1

電話機のリセットと再起動

DumpCollection IT Exam Training online / Bootcamp PDF and Testing Engine, study and practice

Chapter Two

2-1 / 語問題 項書換え系 4.0. 準備 (3.1. 項 代入 等価性 ) 定義 3.1.1: - シグネチャ (signature): 関数記号の集合 (Σ と書く ) - それぞれの関数記号は アリティ (arity) と呼ばれる自然数が定められている - Σ (n) : アリ

Microsoft PowerPoint - 10.pptx

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

計算機システム概論 システム構成技術 2011/5/11 門林雄基

Microsoft PowerPoint - ARC-SWoPP2011OkaSlides.pptx

SQL Server 2012 自習書シリーズ No.16 ロックと読み取り一貫性 Published: 2008 年 5 月 31 日 SQL Server 2012 更新版 : 2012 年 9 月 30 日有限会社エスキューエル クオリティ

POSIXスレッド

標準化 補足資料

Microsoft PowerPoint - MySQL-backup.ppt

第 3 章 メディア障害とバックアップ リカバリ この章では メディア障害の発生に備えたバックアップ方法と 障害時の基本的なリカバリ方法につい て説明します 1. メディア リカバリ概要 2. ファイルの多重化 3. アーカイブ モードの設定 4. バックアップ概要 5. 一貫性バックアップ ( オ

Oracle 入門 ~ 研修受講後のスキルアップサポート ~ 対応バージョン :Oracle 10gR1 ~ 12cR1 本資料は アシスト Oracle 研修をご受講いただいたお客様からのご質問や 研修ではご案内できなかった情報などを FAQ にまとめたものです 研修受講後のスキルアップの一助とし

DVIOUT

PowerPoint プレゼンテーション

はじめに コースの概要と目的 Oracle をより効率的に使用するための SQL のチューニング方法について説明します また 索引の有無 SQL の 記述方法がパフォーマンスにどのように影響するのかを実習を通して理解します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 S

今さら聞けない!? Oracle入門 ~前編~

PHP 分科会 '11/11 OpenSource 協議会 System i 2011/11/25

ITexamSimulator Simulate exam and practical test for Certification exam

データベース論 朝日大学大学院経営学研究科奥山徹 u.ac.jp 2006/04/24 データベース論 (2 回目 ) 1

SRA OSS, Inc. のご紹介 1999 年より PostgreSQL サポートを中心に OSS ビジネスを開始 2005 年に現在の形に至る 主なビジネス PostgreSQL, Zabbix などの OSS のサポート コンサルティング 導入構築 PowerGres ファミリーの開発 販売

DVIOUT-SS_Ma

PowerPoint プレゼンテーション

国立国会図書館サーチとのOAI-PMH連携時に障害となるポイント

Insert your Title here

HDC-EDI Manager Ver レベルアップ詳細情報 < 製品一覧 > 製品名バージョン HDC-EDI Manager < 対応 JavaVM> Java 2 Software Development Kit, Standard Edition 1.4 Java 2

Excel データ出力ガイドブック 第 1.0 版平成 30 年 9 月 1 日制定 株式会社中電シーティーアイ

改訂履歴 項番版数作成日 / 改訂日変更箇所変更内容. 平成 28 年 5 月 3 日新規章構成の変更, 分冊化に伴い新規作成 (i)

Microsoft PowerPoint - CloudBasic-6-cloudservices2.pptx

はじめに コースの概要と目的条件分岐の方法や複雑な集計の手法など SQL のコーディングの幅を広げるためのテクニックについて説明します また パフォーマンスを考慮した記述方法や正しい結果を取得するための記述方法などについても あわせて説明します 本コースでは 実践的な SQL の記述手法を広く浅く紹

はじめてのPFD

PowerPoint プレゼンテーション

インストール後のアプリケーション実行

講義の進め方 第 1 回イントロダクション ( 第 1 章 ) 第 2 ~ 7 回第 2 章 ~ 第 5 章 第 8 回中間ミニテスト (11 月 15 日 ) 第 9 回第 6 章 ~ 第 回ローム記念館 2Fの実習室で UML によるロボット制御実習 定期試験 2

Microsoft PowerPoint pptx

Oracle SQL Developer Data Modeler

Microsoft PowerPoint - OS04.pptx

Imation Lock の使用 Imation Lock を使用しますとフラッシュドライブにパスワードで保護されたセキュリティエリアを設定すること ができます フラッシュドライブ全体をセキュリティエリアに設定することも 一部容量をセキュリティエリアに 設定することも可能です 一部容量をセキュリティ

SQL Server 2008 自習書シリーズ No.14 ロックと読み取り一貫性 Published: 2008 年 5 月 31 日 改訂版 : 2008 年 10 月 27 日 有限会社エスキューエル クオリテゖ

データセンターの効率的な資源活用のためのデータ収集・照会システムの設計

変更履歴 版数変更日変更内容 /9/1 初版設定

ServerView Resource Orchestrator V3.0 ネットワーク構成情報ファイルツール(Excel形式)の利用方法

040402.ユニットテスト

Microsoft PowerPoint - ソフトウェア更新手順書_DAN-W62_mac_ _1.ppt

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

SNC-HM662 EdgeStorage manual J

ARROWS Tab Wi-Fi (FAR70B) ソフトウェアバージョンアップ手順書

第 5 章 結合 結合のパフォーマンスに影響を与える結合の種類と 表の結合順序について内部動作を交えて 説明します 1. 結合処理のチューニング概要 2. 結合の種類 3. 結合順序 4. 結合処理のチューニングポイント 5. 結合関連のヒント

2006年10月5日(木)実施

DataBase15-14.pptx

Microsoft Word - IEIEJ-G アデンダムa.DOC

PowerPoint プレゼンテーション

V-CUBE One

WebOTX V6 JDBCアプリケーションのトラブルシューティング(JDBCデータソース)

Exam : J Title : Querying Microsoft SQL Server 2012 Version : DEMO 1 / 10

PowerPoint プレゼンテーション

スライド 1

Microsoft PowerPoint - 04_01_text_UML_03-Sequence-Com.ppt

ゲートウェイ ファイル形式

【Cosminexus V9】クラウドサービスプラットフォーム Cosminexus

V-Client for Mac ユーザーズガイド

スライド タイトルなし

ARROWS Tab Wi-Fi (FAR75A/FAR70A) ソフトウェアバージョンアップ手順書

Prog1_12th

PowerPoint プレゼンテーション

リソース制約下における組込みソフトウェアの性能検証および最適化方法


ゲートウェイのファイル形式

Microsoft PowerPoint - H22制御工学I-2回.ppt

PowerPoint Presentation

概要 ABAP 開発者が SAP システム内の SAP ソースまたは SAP ディクショナリーオブジェクトを変更しようとすると 2 つのアクセスキーを入力するよう求められます 1 特定のユーザーを開発者として登録する開発者キー このキーは一度だけ入力します 2 SAP ソースまたは SAP ディクシ

WEBシステムのセキュリティ技術

情報処理概論(第二日目)

Microsoft PowerPoint - No6note.ppt

2016年9月28日 機能強化

Transcription:

データベース 12: 同時実行制御 石川佳治

トランザクション

トランザクション (transaction) アプリケーションにおけるひとまとまりの処理を構成するデータベース操作の集まり 例 : 預金口座 A から預金口座 B へ10000 円を送金するトランザクション read(a, x) read(b, y) x := x 10000 y := y + 10000 write(a, x) write(b, y) データベースに対する操作は, 究極的には read, write の組合せで表現できるため, 操作を read, write に単純化 2

トランザクション処理 トランザクション処理 (transaction processing) もしくはトランザクション管理 (transaction management) 並行して実行されるトランザクションの競合を解決 各種障害への発生への対応 ( 次章 ) ACID 特性 (ACID properties) トランザクション処理において保障することが望ましい性質 3

ACID 特性 (1) 原子性 (atomicity) トランザクションがデータベース処理の単位 トランザクションの結果は, 以下の二者択一 コミット (commit): データ操作のすべてが確定されたものとしてデータベースに反映される アボート (abort): データ操作がすべて取り消される 一部の操作のみの中途半端な実行は許されない 整合性 (consistency) 整合性がとれたデータベースに対して実行されたトランザクションの実行の結果は, 整合性のとれたものとなる 4

ACID 特性 (2) 隔離性 (isolation) 複数のトランザクションを並行処理した場合でも, トランザクションは同時に処理されている他のトランザクションの影響を受けない 複数のトランザクションの並行処理の結果は, トランザクションを何らかの順序で逐次処理した場合と一致しなければならない 耐久性 (durability) いったんコミットしたトランザクション中でのデータ操作は, その後の障害などで消滅してはならない 5

アプリケーションにおける命令 通常, アプリケーションプログラムには, read, write 以外に以下の命令を提供 begin: トランザクションの開始を宣言 commit: トランザクションのコミットを要求 abort: トランザクションのアボートを要求 処理の中断に利用 begin read(a, x) x := x 10000 write(a, x) commit begin read(a, x) x := x 10000 ( 何らかの問題を検知 ) abort コミットの例 アボートの例 6

トランザクションの状態 (1) 5 つの状態 アクティブ : トランザクションを実行中 コミット処理中 :commit 命令後の状態 コミット済 : コミットのための処理が終了 アボート処理中 :abort 命令後や, コミット処理が何らかの理由で正常に終了できないとき アボート済み : アボート処理が終了 begin アクティブ commit abort コミット処理中 コミット済 アボート処理中 アボート済 7

トランザクションの状態 (2) ロールバック (rollback) アボートされるトランザクションが, アクティブな状態の間に何らかのデータ更新を行っていた場合に, それらをすべて取り消す処理 トランザクション開始前の状態に 巻き戻す 8

並行処理と直列可能性

並行処理における不整合 (1) DBMS は複数のトランザクションを並行実行 待ち時間 ( 入出力, 入力 ) を有効活用 一定の規約を設けないと不整合が発生 トランザクション T 1 read(a, x) x := x 10000 write(a, x) トランザクション T 2 read(a, y) y := y 10000 write(a, y) データ更新の喪失の例トランザクション T 2 が書き込んだ値をトランザクション T 1 が上書きしてしまうため, トランザクション T 2 の更新は反映されない 10

並行処理における不整合 (2) トランザクション T 1 トランザクション T 2 s := 0 read(a, x) s := s + x read(b, y) s := s + y read(a, z) z := z 10000 write(a, z) read(b, w) w := w + 10000 write(b, w) 整合性のないデータ読出しの例トランザクション T 1 は誤った合計値を出力する 同時実行制御 (concurrency control; 並行処理制御 ) により,ACID 特性に反する不整合が生じないようにする 11

直列可能性 直列可能性 ( 直列化可能性 ; serializability) トランザクション T 1,, T n を並行処理したときの実行結果が, それらを何らかの順序で逐次処理したときの実行結果と一致すること 同時実行制御の役割 トランザクション T 1,, T n が並行処理された場合でも, 各トランザクション T i の直列可能性を保証する 12

スケジュール (1) データベースに対する基本操作の表記 R i (A): トランザクション T i による項目 A の read W i (A): トランザクション T i による項目 A の write C i : トランザクション T i のコミット A i : トランザクション T i のアボート トランザクション T 1,, T n に対するスケジュール (schedule) T 1,, T n の基本操作を, インターリーブして一列に並べたもの T i 内の基本操作の順序関係は保存 13

スケジュール (2) T 1 T 2 s := 0 read(a, x) s := s + x read(b, y) s := s + y read(a, z) z := z 10000 write(a, z) read(b, w) w := w + 10000 write(b, w) 各トランザクションの表現 T 1 : R 1 (A) R 1 (B) T 2 : R 2 (A) W 2 (A) R 2 (B) W 2 (B) 上の実行順序に対応するスケジュール R 2 (A) W 2 (A) R 1 (A) R 1 (B) C 1 R 2 (B) W 2 (B) C 2 14

直列スケジュール 直列スケジュール (serial schedule) 対象トランザクション群を何らかの順序で逐次処理する場合のスケジュール 非直列スケジュール (nonserial schedule) 直列スケジュールでないスケジュール 直列可能スケジュール (serializable schedule) 直列スケジュールと 等価 なもの 並行処理における直列可能性の保証とは, スケジュールが直列可能となることを保証すること 15

スケジュールの等価性 (1) 異なる定義が存在 競合等価 (conflict equivalent): 同じトランザクション集合に対する二つのスケジュール S 1, S 2 は, 以下を満たすとき競合等価 1 S 1 において R i (A)(W i (A)) が W j (A)(R j (A)) に先行するならば,S 2 においても同様の関係が成り立つ 2 S 1 において W i (A) が W j (A) に先行するならば, S 2 においても同様の関係が成り立つ write 処理に関して不整合が発生するので, write に関わる実行順序に着目 16

スケジュールの等価性 (2) ビュー等価 (view equivalent) 1 S 1 において R i (A) より読まれる A 値が,W j (A) によって書かれた値または A の初期値ならば,S 2 においても同様の関係が成り立つ 2 各項目 A に関して,S 1 において最後に A 値を書くのが W i (A) ならば,S 2 においても同様のことが成り立つ 直観的には, 各 read が同じ値を読み, かつ最後のデータベースの状態が同じであること 17

スケジュールの等価性 (3) 競合等価の方がより厳しい条件 例 競合等価なスケジュールはビュー等価 その逆は必ずしも成立しない S 1 :R 1 (A) W 2 (A) C 2 W 1 (A) C 1 W 3 (A) C 3 S 2 :R 1 (A) W 1 (A) C 1 W 2 (A) C 2 W 3 (A) C 3 S 1, S 2 はビュー等価 R 1 (A) が読む値は両者において初期値 両者において最後に A を書くのは W 3 (A) しかし, 競合等価ではない S 1 では W 2 (A) が W 1 (A) に先行.S 2 ではその逆. 18

競合直列可能 / ビュー直列可能 競合直列可能 (conflict serializable) そのスケジュールがある直列スケジュールと競合等価である場合 ビュー直列可能 (view serializable) そのスケジュールがある直列スケジュールとビュー等価である場合 競合直列可能スケジュールはビュー直列可能 : その逆は成立しない 先の例の S 1 は直列スケジュールである S 2 とビュー等価なのでビュー直列可能 しかし,S 1 は競合直列可能ではない 19

競合直列可能かの判定 (1) スケジュール S に対する先行グラフ (precedence graph) を作成 1 S に参加する各トランザクション T i に対し, ノード N(T i ) を作成 2 R i (A)(W i (A)) が W j (A)(R j (A)) に先行するとき有向エッジ N(T i ) N(T j ) をひく 3 W i (A) が W j (A) に先行するとき有向エッジ N(T i ) N(T j ) をひく 先行グラフにサイクル ( 閉路 ) がなければ S は競合直列可能で, サイクルがあれば競合直列可能でない 20

競合直列可能かの判定 (2) スケジュール S の例 ルール 2 ルール 2 R 1 (A) R 1 (B) R 2 (A) R 2 (C) W 1 (B) C 1 R 3 (B) R 3 (C) W 3 (B) C 3 W 2 (A) W 2 (C) C 2 ルール 2 ルール 2 先行グラフ T 1 T 2 ルール 3 T 3 サイクルがないので競合直列可能 トポロジカルソートで等価な直列スケジュールが得られる R 1 (A) R 1 (B) W 1 (B) C 1 R 3 (B) R 3 (C) W 3 (B) C 3 W 2 (A) W 2 (C) C 2 R 2 (A) R 2 (C) 21

まとめ : 競合等価とビュー等価の比較 ビュー等価の方が条件が緩い スケジュールがより柔軟に選択できる : 先の例では両方のスケジュールを選択可能 計算量が NP 完全 : 実際の利用には適さない 競合等価は現実的な解 競合直列可能かの判定が容易 柔軟性にはやや劣る ビュー等価の立場で直列可能なスケジュールが競合等価の立場で直列可能とならない場合があるため, 可能なスケジュールの候補が少なくなりうる 22

スケジュールの諸性質 (1) これまでの議論はコミットされたトランザクションのみを対象 : しかし, トランザクションはアボートされる可能性もある アボートに着目した場合の性質について A) 回復可能性 (recoverable) R i (A) で読まれるA 値がW j (A) によって書かれた値であり,T i がコミットするときにはC j がC i に先行する という条件が常に成立 回復可能でない例 :W 1 (A) R 2 (A) C 2 A 1 T 1 が書いた A 値を T 2 が読んでコミットしているので,T 1 をアボートしても,T 2 をもう取り消しできない 23

スケジュールの諸性質 (2) 連鎖的アボート (cascading abort): あるトランザクションのアボートが他のトランザクションのアボートを連鎖的に引き起こす現象 W 1 (A) R 2 (A) A 1 C 2 ならば回復可能だが,T 1 をアボートすると T 2 もアボートする必要あり B) 連鎖的アボートの回避 R i (A) で読まれるA 値がW j (A) によって書かれた値であるときにはC j がR i (A) に先行する という条件が常に満たされるとき トランザクションは取り消されうる値を読まない 常に回復可能 : その逆は成立しない 24

スケジュールの諸性質 (3) C) 厳格性 (strictness) R i (A) または W i (A) よりも W j (A) が先行するときには,C j または A j がその R i (A) または W i (A) に先行する という条件が常に満たされるとき 厳格なスケジュールは連鎖的アボートを回避 : 逆は成り立たない 例 :W 1 (A) W 2 (A) C 2 A 1 は連鎖的アボートを回避するが, 厳格ではない 厳格なスケジュールではアボート処理が簡単 T i のアボート時には,T i がwriteした値をwrite 前の値に戻せばよい 厳格でない場合 ( 上の例 ) では面倒 25

スケジュールの諸性質 : まとめ 回復可能性, 連鎖的アボートの回避, 厳格性は直列可能性とは直交 例 :R 1 (A) W 2 (A) W 2 (B) C 2 R 1 (B) C 1 は厳格であるが直列可能でない 各性質の関連 ビュー直列可能 競合直列可能 回復可能 直列スケジュールは常に直列可能で厳格なスケジュール 直列 連鎖的アボート回避 厳格 26

ロックを用いた同時実行制御

ロックの概念 実際の DBMS では, 何らかの機構 規約を用いて同時実行を制御 ロック (lock) もっとも一般的な機構 単純な例 : 各項目 A に対する排他的ロック A にロックをかけることができるのは, ある時点では 1 トランザクションに限る すでにロックされている項目へのロック要求は, そのロック解除まで待ち状態となる 並行性が低いという問題点 28

共有ロックと専有ロック (1) readのみの場合に排他的なロックをかけるのは, 並行性を必要以上に落としてしまう 解決策 : 二つのロックに分ける 共有ロック (shared lock, S lock) 読出しの場合に用いる 共有ロック同士は両立 専有ロック (exclusive lock, X lock) 書込み時に用いる排他的ロック 共有 (S) 専有 (X) 共有 (S) Y N 専有 (X) N N 両立性行列 (compatibility matrix) 29

共有ロックと専有ロック (2) ロックの変換 (conversion) いったんデータを読み出した後, その値に応じて書込みを行うかを決定することも多い ロックのアップグレード 共有ロックを専有ロックに変換する処理 他のトランザクションがその項目を共有ロックしていない場合のみ許可される ロックのダウングレード 専有ロックを共有ロックに変換 30

ロッキングプロトコル 例 : 図 8.2(b) のトランザクション実行例に対するロック操作 XL 2 (A) R 2 (A) W 2 (A) UL 2 (A) SL 1 (A) SL 1 (B) R 1 (A) R 1 (B) UL 1 (A) UL 1 (B) C 1 XL 2 (B) R 2 (B) W 2 (B) UL 2 (B) C 2 XL / SLはX / Sロックをかける操作,UL はロックを解除する操作を表す この操作例は両立性を満たすが, そもそも図 8.2(b) の実行例は不整合な例 ロッキングプロトコル (locking protocol) ロックをかける操作と解く操作に関する規約 合法 (legal): プロトコルに従ったスケジュール 31

デッドロック デッドロック (deadlock): ロックを用いた場合に発生 例 1 T 1 : XL 1 (A) XL 1 (B) W 1 (A) W 1 (B) UL 1 (A) UL 1 (B) T 2 : XL 2 (B) XL 2 (A) W 2 (B) W 2 (A) UL 2 (B) UL 2 (A) 2 3 4 問題点 :1 の XL 1 (A) の後に 2 の XL 2 (B) を実行してしまうと, それ以降の 3,4 ともにロックをかけるのに失敗してしまう 対策については後述 32

二相ロッキングプロトコル (1) 二相ロッキングプロトコル (two phase locking protocol; 2PL) 競合直列可能性を保証するロッキングプロトコル ロック操作を二つの部分に分離 成長相 (growing phase): ロックをかける操作だけからなる 縮退相 (shrinking phase): ロックを解く操作だけ いったんロックを解いた後に再びロックをかけてはいけない 成長相ではロックのアップグレードが, 縮退相ではダウングレードが許される 33

二相ロッキングプロトコル (2) 例 ( 先と同じ ) XL 2 (A) R 2 (A) W 2 (A) UL 2 (A) SL 1 (A) SL 1 (B) R 1 (A) R 1 (B) UL 1 (A) UL 1 (B) C 1 XL 2 (B) R 2 (B) W 2 (B) UL 2 (B) C 2 T 1 の縮退相 T 1 の成長相 T 1 は二相ロッキングプロトコルに従っている T 2 はそうでない すべてのトランザクションが二相ロッキングプロトコルに従うことが必要 二相ロッキングプロトコルではデッドロックが発生する可能性あり : 先の例 34

厳格な二相ロッキングプロトコル アボート操作前に専有ロックを解くと回復可能性のないスケジュールが生じうる 例 : 二相ロッキングプロトコルに従うT 1, T 2, T 3 XL 1 (A) R 1 (A) W 1 (A) UL 1 (A) SL 2 (A) R 2 (A) UL 2 (A) C 2 SL 3 (A) R 3 (A) A 1 T 1 がアボートするとT 3 が連鎖的にアボートされる T 2 はすでにコミット済みなので取り消し不能 厳格な (strict) 二相ロッキングプロトコル 縮退相における最初のロックを解く操作はトランザクションのコミットまたはアボート操作の後 競合直列可能であり厳格性も満たす 35

デッドロック デッドロックへの対処策 デッドロックの検出を行う方法 デッドロックを回避する方法 ( 省略 ) デッドロックの検出 待ちグラフ (wait-for graph) による方法 各トランザクション T i に対してノード N(T i ) を作成 T i が他のトランザクション T j のロックが解かれるのを待っているとき, 有向エッジ N(T i ) N(T j ) を引く 待ちグラフにサイクルがあればデッドロック : 犠牲者 ( victim) を選びアボート タイムアウトによる方法 : 一定時間以上待ち状態のトランザクションをアボートする 36

他の同時実行制御方式 ( 簡単に )

時刻印を用いた同時実行制御 時刻印順 (timestamp ordering) 方式 各トランザクションに, 発生順に一意な時刻印を与える 時刻印の順にトランザクションを逐次実行する場合と等価なスケジュールが生じるように制御 各項目 A に二種類の時刻印を持たせる RTS(A) / WTS(A): これまでに A の read / write を行ったトランザクションの時刻印のうち最大値 項目 A の read / write の際には,RTS(A) / WTS(A) の値を見て, 実行するかアボートするかの規約に従う 38

楽観的同時実行制御 楽観的同時実行制御 (optimistic concurrency control) 適する状況 ほとんどのトランザクションが read だけ 複数トランザクションの同時発生がまれ アイデア とりあえず他のトランザクションと競合しないと仮定してトランザクションを実行 終了時に競合がなかったかを確認 : 競合していたらアボート処理などへ進む 39

多版同時実行制御 多版同時実行制御 (multiversion concurrency control; MVCC) 各項目 A に対し write がなされるたびに,A に対する新しい版 (version) を生成し維持管理 read/writeの際は, 時刻印などの情報を用いて版の新しさを考慮してアボート処理を制御 最近のDBMS(Oracle, PostgreSQLなど ) では, ロックに基づく手法と多版同時実行制御の組合せがよく見られる 40

最近の動向 一般の DBMS では多版同時実行制御 ( MVCC) をとるものが主流 :Oracle 等 新たな問題 マルチコア, マルチスレッド : 多くの競合が発生 不揮発性メモリ : 入出力速度の向上 トランザクション処理の速度が与える影響の割合が増大 HTAP( ハイブリッド型トランザクション / アナリティクス処理 ): 入ってきたデータをどんどん分析 トランザクション処理の効率化が重要に 競合によるアボート処理をどれだけ減らせるか : 楽観的手法が再び注目 41

余談 :SQL の同時実行制御

SQL の同時実行制御 隔離レベルに対する 4 つのオプション 非コミット読取り (read uncommitted): コミットされていないデータを読むこと ( ダーティーリード ) がある コミット済み読取り (read committed): 以前 readした項目 Aの値を再度 readしたとき, その値が他のトランザクションにより変更されていることがある 再読込み可能読取り (repeatable read): ある条件で複数回検索したとき, 新たな行 (phantom; 幽霊 ) が追加されていることがある 直列可能 (serializable): 直列可能性を保証 多くの DBMS ではコミット読取りがデフォルト設定 効率化のため :ACID 特性の I( 隔離性 ) は完全には保証されないため, 開発者側で意識する必要あり 43

同時実行制御の指定 データの挿入 更新 削除 (SQL の INSERT / UPDATE / DELETE) の際に, 明示的にロックをかける必要はない DBMS が自動的にロックをかけ, 不要になれば解除 明示的にロックをかける機能もあり 例 :Oracle の FOR UPDATE 句 更新を前提としてデータの読取りを行う場合に使用 トランザクション終了まで検索結果にロックをかける SELECT * FROM TABLE FOR UPDATE 44

木ロッキングプロトコル (1) 木ロッキングプロトコル (tree locking protocol) 競合直列可能性を保証 適用できる条件 : データベース中の項目が木構造を持ち, 複数の項目をアクセスするトランザクションが木のルートからリーフ方向にデータをアクセス トランザクション T i のロック操作の条件 1 T i において最初にかけるロックは, いずれの項目 Aに対して行ってもよい 2 ロックを解く操作はいつ行ってもよい 3 ロックを解く操作はいつ行ってもよい 4 一度ロックをかけた後, そのロックを解いた項目を再びロックできない 45

木ロッキングプロトコル (2) 木ロッキングプロトコルに従う例 実行例 : T 1 が途中までロックした時点 T 1 : XL 1 (A) R 1 (A) XL 1 (B) UL 1 (A) R 1 (B) W 1 (B) XL 1 (E) UL 1 (B) R 1 (E) UL 1 (E) T 2 : XL 2 (B) R 2 (B) XL 2 (D) R 2 (D) UL 2 (D) XL 2 (E) UL 2 (B) R 2 (E) W 2 (E) UL 2 (E) XL 2 B 木ロッキングプロトコルの特徴 デッドロックは発生しない A XL 1 C D E F T 2 は B をロックする必要があるため T 1 を待つことになる T 1 T 2 というスケジュール 共有ロックがある場合へも拡張可能 46

ロックの粒度 (1) データベース中には種々の大きさのデータ単位が存在し, 階層構造をなす 例 : データベース, ファイル, レコード, フィールド データベース ファイル 1 ファイル 2 ファイル 3 レコード 1 レコード 2 フィールド 1 フィールド 2 ロックの粒度 (granularity): ロック対象の項目の大きさ 47

ロックの粒度 (2) 粒度をどの程度にするかは処理効率に影響 ロックの粒度が細かいと, トランザクション同士の不必要な競合を減らすことができる しかし, 大量のデータの操作には多くのロック操作が必要 種々のロックの粒度がある場合, ロックを認めてはならない状況が発生 例 T 1 があるファイルS 中のレコードRを専有ロックしているとき,T 2 がS 全体に対する専有ロックを要求 Sにロックがかかっていないが,T 2 の要求は認められない 48

インテンションロック インテンションロック (intention lock): 粒度に関する問題への対処 ある項目 A の下位の項目 A をアクセスする際,A の下位の項目を共有 専有の目的でアクセスしていることを知らせるためのロックを A にかける インテンションロックの種類 共有インテンションロック (intention shared lock; IS ロック ): 下位項目を共有ロックの可能性あり 専有インテンションロック (intention exclusive lock; IXロック ): 下位項目を専有ロックの可能性 共有 専有インテンションロック (shared and intention exclusive lock; SIXロック ): 部分構造を共有ロックすると同時に, 下位の項目を専有ロックする可能性 49