見出し画像

【デスペ5問】デッドロック(データベーススペシャリストAMII)


このNoteには、データベーススペシャリスト(デスペ)のAMIIの「デッドロック」と対策についてまとめました。

デッドロックは応用情報技術者(AP)でも出ているので、すでに目にしていると思います。


デスペでは、さらにもう少し詳しい知識が必要です。

「デッドロックの対策」を2つ言えますか?


正解は、タイムアウトを設ける、ロックするデータの順番を全トランザクションで統一する、です。

これらは、PMI/PMIIの筆記問題の答えに度々なります。

逆に言えば、データベースの不具合のレパートリーは、システムがダウンするかデッドロックぐらいしかありません。テンプレ解答として知っておきましょう。

AMIIは通過して当然。それだけでなく、PMI/PMIIの筆記問題への武器にするまで昇華させましょう。


デスペのAMIIはざっくり5年分解けば、全パターンが把握できます。

私が合格した時の学習ノートを基に、ジャンル毎に問題をまとめました。


このNoteの解説は、私がIT専門学校での授業内容を基にしています。

それでは始めましょう!




デッドロックとは


デッドロックとは、他のトランザクションがロックしているデータをロックしたいときに、ひたすらアンロックされるのを待っている状態です。しかも、複数のトランザクションがお互いに必要なデータを半端に確保しています。

例えば、トランザクションT1とT2が、データDAとDBをロックしたいときを考えます。

T1がDAのロックし、T2がDBをロックできたとき、T1はT2が獲得したDBのアンロックを待ち、T2はT1が獲得したDAのアンロックを待ち続け、処理を先に進められない状態になってしまいます。

なお、PMI/PMIIでは3つのトランザクションのデッドロックも出るので図にしておきますね。




デッドロックの回避法


デッドロックの回避法・脱出法は2つ覚えておきましょう。

  • ある時間だけアンロック待ちで止まっているトランザクションを「タイムアウト」する

  • 全トランザクションでデータを「ロックする順番を統一」する


デッドロックの回避法は午前1にすら出題されます。

つまり応用情報技術者試験(AP)ですでに出題されているのです。

2つのタスクが2つの資源を共有するとき、デッドロックの発生を防ぐ手立てはどれか。

ア:片方のタスクの優先度を高く設定する
イ:資源獲得の順番を両方のタスクで統一する
ウ:資源獲得の順番を両方のタスクで逆にする
エ:両方のタスクの優先度を同じに設定する

データベーススペシャリスト  平成31年午前1問06より改変
令和04年午前1問06より改変

正答はイ。

例えば、2つのタスクT1, T2が資源DA, DBを確保するとき、T1をDA先にロックしたら、T2はDAのアンロックを待ってDBのロックには進めません。

T1がDBもロックして処理を終了して、DAとDBをアンロックしたら、T2はDAのロックを始め、DBのロックへと進められます。


もちろんAMIIにも出題されます。

複数のバッチ処理を並行するとき、デッドロックの発生をできるだけ回避するものはどれか。

ア:参照するレコードにも専有ロックをかける
イ:大量のデータに同じ処理をするバッチ処理は、1つのトランザクションとしてまとめる
ウ:トランザクション開始直後に必要なレコードに専有ロックをかける。ロック獲得に失敗した場合は、しばらく待って再度ロックをかける
エ:更新するレコードの順番を決め、全てバッチが順番に従って処理です

データベーススペシャリスト 平成25年午前2問17より改変

正答はエ。


ちょっとマイナーなデッドロック対策も学べる問題です。

デッドロックが発生する場合がある排他制御の方式はどれか。

ア:2相ロックプロトコル方式
イ:時刻印によってトランザクションの優先順位を決める方式
ウ:全てのトランザクションが、共通のルールの順番に従って、必要なデータをロックして、全てのロックを獲得できるまでアンロックしない方式
エ:トランザクション開始時に一括してロックする方式

データベーススペシャリスト 平成24年午前2問13より改変

正答はア。

必ず、ウをデッドロック対策として覚えておきましょう。余裕があれば、イとエはネタとして知っておくと良いですが、午後問題ではここまで深くは問われないと思います。

  • ア:正しい。

  • イ:時刻印アルゴリズム。ロックの競合が起こったら、優先順位を比較してデータを明け渡してもらえますから。

  • ウ:全トランザクションでロックする順番を同じにしているため(典型的なデッドロック対策)。

  • エ:トランザクション開始前にロックをするので、トランザクションの途中でアンロック待ちにはならないため。



デッドロックの検出法


デッドロックを見つけるには、長い時間止まっているトランザクションを見つけるのもテですが、長い時間経たないと発見できません。

そこで、複数のトランザクションで互い違いにデータを確保しようとしていないかを確認できれば、デッドロックを早期発見できます。

「待ちグラフ」は、各トランザクションが別のトランザクションが持っているデータを必要としているかを図示したものです。閉路(ループ)があれば、デッドロックが発生しています。



デッドロックを検出するために使うデータ構造はどれか。

ア:2相ロック
イ:時刻印アルゴリズム
ウ:チェックポイント
エ:待ちグラフ

データベーススペシャリスト 平成28年午前2問13より改変

正答はエ。

  • ア:2相ロック(2相ロッキングプロトコル)は、トランザクションが直列化可能性を保証するためのロック手順です。

  • イ:時刻印アルゴリズムでは、トランザクションの開始時刻で優先順を設定しデッドロックを防ぎます

  • ウ:チェックポイントでは、メモリにあるデータベース変更を、実際のデータベースに書き出します。障害が発生したらチェックポイントまではすんなり復旧し、チェックポイント以後~障害発生までにコミットした変更内容はロールフォワードで処理を進めて復旧させます。

  • エ:正しい。


待ちグラフは応用情報技術者試験(AP)でも出題されています。

応用情報技術者試験 平成29年秋午前問29より

正答はウ。

B→C→Dでループがあります。Aが完了しても、CはBのアンロックを待つためCは止まったままです。

DとFはEのアンロックを待っています。Eは、Gが完了してアンロックしたデータをロック獲得して処理をします。

Eが完了するとDかFかが、Eがアンロックしたデータをロックします。


Eがアンロックしたデータを、Dが獲得しようが、Fが獲得しようが、結局はDがC待ちで止まっているため、Fも止まったままです。

DがEがアンロックしたデータをロックしても、Cのアンロックを待っているので止まったままです。したがって、FはDのアンロックを待っているので止まったまま。

FがEがアンロックしたデータをロックした場合、Dのアンロックを待ちます。しかしDは、CやFのアンロックを待っていて止まったままなので、Fも待ちになります。



正解以外の選択肢は覚えなくて大丈夫です。

もし午後問題で出るとしても説明があるはずです。(そもそも午後はDB設計で攻める場合は無縁)

デッドロックを検出するために使うデータ構造はどれか。

ア:資源割当表
イ:時刻印順管理表
ウ:トランザクションの優先順管理表
エ:待ちグラフ

データベーススペシャリスト 平成26年午前2問15より改変
平成30年午前2問16より改変

正答はエ。

  • ア:資源割当表は、資源とロックしているトランザクションをまとめた表です。別のトランザクションからアンロック待ちしている情報がありません。

  • イ:時刻印アルゴリズムで優先順をまとめた表です。時刻印アルゴリズムでは実行するトランザクションの優先順を設定しているので、データの競合が起こっても優先度の高い方にデータを明け渡してくれるため、デッドロックは発生しません。

  • ウ:イと同じ。なんらかの基準で優先順を設定しています。

  • エ:正しい。



p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。

でわでわ(・ω・▼)ノシ


この記事が参加している募集

#スキしてみて

527,285件

学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ