基本情報でわかる トランザクション
error
この記事は基本情報技術者試験の旧制度( 2022 年以前)の記事ですが、試験対策ではなく、技術用語を理解する上では問題ないと考えています。
試験対策としてお読みになる場合は、現在の試験制度では出題されない午後問題を一部題材にしているので、ご注意ください。
この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。
午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。
今回のテーマは、 トランザクションにおける共有ロックと専有ロック です。
もくじ
トランザクションと共有ロック・専有ロックとは?
データベースに対するひとまとまりの処理を トラザクション と呼びます。
多くの場合に、データベースは、複数のユーザーから利用されるサーバーになっているので、複数のトランザクションを同時に実行することがあります。もしも、同じデータを処理する複数のトランザクションを同時に実行するとどうなるでしょう。
あるトランザクションの処理が完了していない中途半端な状態のデータを、他のトランザクションが処理することになるので、データの内容に矛盾が生じてしまうかもしれません。そこで、データベースには、他のトランザクションに実行を待たせる機能が用意されていて、これを「ロック( lock = 錠前)」と呼びます。
ロックには、 共有ロック と 専有ロック という種類があります。
- データを閲覧する(データの内容を変化させない)トランザクションは、共有ロックをかけてからデータを処理します。
- データを更新する(データの内容を変化させる)トランザクションは、専有ロックをかけてからデータを処理します。
あるトランザクションによって共有ロックがかけられたデータには、他のトランザクションが共有ロックをかけることができますが、専有ロックをかけることはできません。
これは、「誰かが見ているデータは、他の人が見ても構わないが、他の人が書き換えてはダメである」ということです。複数のトランザクションにデータが共有されるので、共有ロックと呼ぶのです。
あるトランザクションによって専有ロックがかけられたデータは、他のトランザクションが共有ロックをかけることも専有ロックをかけることもできません。
これは、「誰かが書き換え中のデータは、他の人が見ても書き換えてもダメである」ということです。ひとつのトランザクションにデータが専有されるので、専有ロックと呼ぶのです。
共有ロックと専有ロックに関する午前問題
それでは、共有ロックと専有ロックに関する午前問題を解いてみましょう。以下に、問題を示します。
問題文の中にある「ロックの両立性」とは、「同時に両方のロックをかけられるかどうか」ということです。
「ロックを獲得する」とは、「トラザクションが要求したロックが、データベースによって受け付けられる」ということです。
「資源」とは、「処理の対象となるデータ」のことです。
ロックの両立性に関する記述のうち,適切なものはどれか。
- ア
- トランザクション T1 が共有ロックを獲得している資源に対して,トランザクション T2 は共有ロックと専有ロックのどちらも獲得することができる。
- イ
- トランザクション T1 が共有ロックを獲得している資源に対して,トランザクション T2 は共有ロックを獲得することはできるが,専有ロックを獲得することはできない。
- ウ
- トランザクション T1 が専有ロックを獲得している資源に対して,トランザクション T2 は専有ロックと共有ロックのどちらも獲得することができる。
- エ
- トランザクション T1 が専有ロックを獲得している資源に対して,トランザクション T2 は専有ロックを獲得することはできるが、共有ロックを獲得することはできない。
トランザクション T1 が共有ロックをかけている場合には、トランザクション T2 は、共有ロックをかけられますが、専有ロックをかけられません。
トランザクション T1 が専有ロックをかけている場合は、トランザクション T2 は、共有ロックも専有ロックもかけられません。
したがって、選択肢イが適切です。
解答イ
共有ロックと専有ロックに関する午後問題(ロックの必要性)
今度は、共有ロックと専有ロックに関する午後問題です。以下に問題を示します。
この問題を通して、ロックの必要性や注意点を理解できます。設問ごとに区切って説明しましょう。なお、この問題では、「専有ロック」を「占有ロック」と表現しているので、これ以降では、「専有ロック」を「占有ロック」と呼びます。
データベースのトランザクション管理に関する次の記述を読んで,設問 1 ~ 4 に答えよ。
- (1)
- 1 回の商品注文に対して,一つの出荷トランザクションが生成される。
- (2)
- 1 回の商品入荷に対して,一つの入荷トランザクションが生成される。
- (3)
- 1 回の在庫照会に対して,一つの照会トランザクションが生成される。
なお,一つのトランザクションで,複数の色の絵の具を処理することができる。
設問 1
ACID 特性とは,データベースの一貫性を保証するために必要な特性で,原子性,一貫性,独立性,耐久性の四つがある。このうち,一貫性や独立性を保証するためにトランザクション管理では排他制御が必要となる。例えば,白絵の具の在庫数が 50 だった場合,表 1 に示すトランザクション T1 と T2 が同時に実行されたとき,排他制御を行わないと実行後の在庫数は 55 とならず,在庫数がa又はbとなってしまう可能性がある。
なお,各トランザクションは,図 1 の (1) ~ (3) の順で在庫数データを処理する。
トランザクション | 処理内容 |
---|---|
出荷トランザクション T1 | 白絵の具 5 本の出荷 |
入荷トランザクション T2 | 白絵の具 10 本の入荷 |
-
トランザクション T1 の処理順序
- 白絵の具の在庫数データを読み込む。
- 白絵の具の在庫数データ = 白絵の具の在庫数データ – 5
- 白絵の具の在庫数データを書き込む。
-
トランザクション T2 の処理順序
- 白絵の具の在庫数データを読み込む。
- 白絵の具の在庫数データ = 白絵の具の在庫数データ + 10
- 白絵の具の在庫数データを書き込む。
図 1 トランザクション T1, T2 の処理順序
解答群
ア 40 イ 45 ウ 50 エ 60 オ 65
設問 1 は、「ロックが必要な理由を知っておきましょう」という問題です。
白絵の具の在庫数という同じデータを、トランザクション T1 とトランザクション T2 が同時に処理するとどうなるでしょう。
もしも、トランザクション T1 の 3. の処理が行われる前に、トランザクション T2 の 1. の処理が行われたら、
- トランザクション T1 の 2. の処理(在庫数を – 5 する処理)が失われる
- トランザクション T2 の 2. の処理(在庫数を + 10 する処理)だけが反映
- 在庫数は、もとの 50 を + 10 した 60
となります。
逆に、もしも、トランザクション T2 の 3. の処理が行われる前に、トランザクション T1 の 1. の処理が行われたら、
- トランザクション T2 の 2. の処理(在庫数を + 10 する処理)が失われる
- トランザクション T1 の 2. の処理(在庫数を – 5 する処理)だけが反映
- 在庫数は、もとの 50 を – 5 した 45
となります。
このような矛盾を生じさせないために、ロックが必要なのです。 45 または 60 になることがあるのですから、正解は選択肢イとエ(順不同)です。
共有ロックと専有ロックに関する午後問題(ロックで生じる待ち状態)
なお,このデータベースを管理する DBMS では,あるトランザクションが共有ロックしているデータを,ほかのトランザクションからロックする場合,共有ロックの要求は成功するが,占有ロックの要求は共有ロックが解除されるまで待ち状態となる。
表 2 に示すトランザクション T3 〜 T6 を,図 2 に示すとおりに実行し,ロックを要求した場合,それぞれのトランザクションの状態について正しい説明を,解答群の中から選べ。
トランザクション | 処理内容 |
---|---|
照会トランザクション T3 | 白絵の具の在庫数照会 |
入荷トランザクション T4 | 白絵の具 10 本の入荷 |
出荷トランザクション T5 | 白絵の具 5 本の出荷 |
照会トランザクション T6 | 白絵の具の在庫数照会 |
解答群
- ア
- T4, T5, T6 とも待ち状態となる。
- イ
- T5, T6 とも待ち状態とならない。
- ウ
- T4, T5 は待ち状態となるが, T6 は待ち状態とならない。
- エ
- T4 は待ち状態となるが, T5, T6 は待ち状態とならない。
- オ
- T6 は待ち状態となるが, T4, T5 は待ち状態とならない。
設問 2 は、「ロックをかけると、他のトランザクションが待ち状態になる場合があることを知っておきましょう」という問題です。
待ち状態になるかどうかは、共有ロックと占有ロックのどちらをかけたかで異なります。
- あるトランザクションが共有ロックをかけた場合には、他のトランザクションは共有ロックをかけるなら待たされませんが、占有ロックをかけるなら待たされます
- あるトランザクションが占有ロックをかけた場合には、他のトランザクションは共有ロックでも占有ロックでも待たされます
トランザクション T3, T4, T5, T6 は、どれも白絵の具の在庫数という同じデータを処理します。
T3 と T6 は照会(見るだけ)なので共有ロックをかけます。
T4 と T5 は入荷と出荷(どちらも更新)なので占有ロックをかけます。
したがって、待ち状態になるかどうかは、以下のようになります。
T3 が共有ロックをかけた後なので、占有ロックの T4 と T5 は待ち状態になりますが、共有ロックの T6 は待ち状態になりません。したがって、選択肢ウが正解です。
共有ロックと専有ロックに関する午後問題(ロックの注意点その 1 ~ 未解放)
トランザクション | 処理内容 |
---|---|
出荷トランザクション T7 | 白絵の具 5 本と赤絵の具 3 本の出荷 |
-
arrow_backα
- 白絵の具の在庫数データをロックする。
- 白絵の具の在庫数データを読み込む。
- 赤絵の具の在庫数データを読み込む。
- 白絵の具の在庫数データ = 白絵の具の在庫数データ – 5
- 白絵の具の在庫数データを書き込む。
- 赤絵の具の在庫数データ = 赤絵の具の在庫数データ – 3
- 赤絵の具の在庫数データを書き込む。
- 赤絵の具の在庫数データのロックを解除する。
arrow_backβ
arrow_backγ
arrow_backδ
arrow_backε
図 3 ランザクション T7 の処理順序
なお,ほかのトランザクションとのデッドロックの発生に対する考慮は不要とする。
解答群
ア α イ β ウ γ エ δ オ ε
設問 3 は、「ロックをかけると他のトランザクションが待たされる場合があるのだから、データの処理が完了したら、すぐにロックを解除しましょう」という問題です。
赤絵の具の在庫データは、 3. で読み込んでいるので、その直前の β の位置でロックをかけるべきです。したがって、空欄 c の正解は、選択肢イです。
白絵の具の在庫データの処理は、 5. で完了しているので、その直後の δ の位置でロックを解除するべきです。したがって、空欄 d の正解は、選択肢エです。
共有ロックと専有ロックに関する午後問題(ロックの注意点その 2 ~ デッドロック)
なお、トランザクション T8 〜 T11 では,各絵の具の在庫数データをどのような順番で処理するかは、分からないものとする。
トランザクション | 処理内容 |
---|---|
出荷トランザクション T8 | 白絵の具 5 本と赤絵の具 5 本の出荷 |
入荷トランザクション T9 | 赤絵の具 10 本と絵の具 10 本の入荷 |
出荷トランザクション T10 | 青絵の具 2 本と白絵の具 5 本の出荷 |
入荷トランザクション T11 | 青絵の具 10 本と黒絵の具 10 本の入荷 |
解答群
ア T8, T9
エ T10, T11
設問 4 は、「ロックをかける順序によっては、デッドロックになってしまう場合があるので、注意しましょう」という問題です。デッドロックとは、複数のトランザクションが、すべて待ち状態になり、処理が先に進めなくなってしまうことです。
ロックと待ち状態に注目して、選択肢を見てみましょう。以下は、選択肢アの T8 と T9 を同時に実行した例です。 T8 と T9 の両方が待ち状態になることはないので、デッドロックは発生しません。
- T8 が白絵の具をロックする
- T9 が赤絵の具をロックする
- T8 が赤絵の具をロックしようとするが、 2. でロックされているので、待ち状態になる
- T9 が青絵の具をロックする
- T9 が赤絵の具のロックを解除する
- T8 が赤絵の具をロックする
以下は、選択肢イの T8, T9, T10 を同時に実行した例です。T8、T9、T10 が、すべて待ち状態になり、処理が先に進めなくなっています。これが、デッドロックです。したがって、選択肢イが正解です。説明が長くなるので、選択肢ウとエの例は示しませんが、どちらもデッドロックは発生しません。
- T8 が白絵の具をロックする
- T9 が赤絵の具をロックする
- T10 が青絵の具をロックする
- T8 が赤絵の具をロックしようとするが、 2. でロックされているので、待ち状態になる
- T9 が青絵の具をロックしようとするが、 3. でロックされているので、待ち状態になる
- T10 が白絵の具をロックしようとするが、 1. でロックされているので、待ち状態になる
解答設問 1 a – イ, b – エ(順不同) 設問 2 ウ 設問 3 c – イ, d – エ 設問 4 イ
いかがでしたか?
午前問題で共有ロックと専有ロックという言葉の意味がわかり、午後問題でロックの必要性や注意点などを理解できたでしょう。
この連載では、今後も、多くの受験者が苦手としている用語を取り上げて行きます。それでは、またお会いしましょう!
label 関連タグ免除試験を受けた 74.9% の方が、 科目A免除資格を得ています。
基本情報でわかる IPアドレス と サブネットマスク
update基本情報でわかる ホワイトボックステスト
update基本情報でわかる トランザクション
update基本情報でわかる コンパイラ 最適化
update基本情報でわかる CRC 「具体例を見て体験すれば仕組みがわかる」
update基本情報でわかる 浮動小数点 「3つの情報で1つの数を表す仕組みを知れば、浮動小数点数がわかる」
update基本情報でわかる MIME タイプ 「電子メールの仕組みを知れば役割がわかる」
update基本情報でわかる 7セグメントLED 「 1 と 0 を書き込めば点灯するパターンがわかる」
update基本情報でわかる 論理演算 「真理値表を書けば、半加算器と全加算器の仕組みがわかる」
update基本情報でわかる SMTP / POP3 「ITエンジニア視点で見れば役割がわかる」
update『プログラムはなぜ動くのか』(日経BP)が大ベストセラー
IT技術を楽しく・分かりやすく教える“自称ソフトウェア芸人”
大手電気メーカーでPCの製造、ソフトハウスでプログラマを経験。独立後、現在はアプリケーションの開発と販売に従事。その傍ら、書籍・雑誌の執筆、またセミナー講師として活躍。軽快な口調で、知識0ベースのITエンジニアや一般書店フェアなどの一般的なPCユーザの講習ではダントツの評価。
お客様の満足を何よりも大切にし、わかりやすい、のせるのが上手い自称ソフトウェア芸人。
主な著作物
- 「プログラムはなぜ動くのか」(日経BP)
- 「コンピュータはなぜ動くのか」(日経BP)
- 「出るとこだけ! 基本情報技術者」 (翔泳社)
- 「ベテランが丁寧に教えてくれる ハードウェアの知識と実務」(翔泳社)
- 「ifとelseの思考術」(ソフトバンククリエイティブ) など多数