データベーススペシャリスト資格|2022年10月挑戦ログ 8月8日|DB基礎知識(隔離性の水準)|SQL(確認ドリル)

高度IT・基礎知識

この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。今回は知識およびSQL(確認ドリル)について書く。(SQLはGoogle Big Queryに準拠)

知識(隔離性の水準)

隔離性とは

  • トランザクションのACID特性のうちisolation(隔離性)について。
  • トランザクションを安定して動かすには、究極的には一つずつ直列で動かせばよい。ただし処理効率は悪い。
  • 反対に、処理効率を究極まで上げるなら、すべて並列で動かせばよい。ただし安定性は下がる。
  • このように、安定性と処理効率はトレードオフの関係にある。システムの特性をふまえ、最適なバランスを見定める必要がある。

バランスの種類と困った現象

  • 最も厳格なのがシリアライザブル(直列)。安定する代わりに遅い。
  • 以降、厳格性を緩めて、安定性を下げる3つのレベル(隔離性の水準)がANSIにより定義されている。
  • レベル3がシリアライザブル。直列処理しか許さない。最も厳格。
  • レベル2がrepeatable read。並行処理は挿入を許容。このときはphantom readが発生する。
  • レベル1がread committed。並行処理は挿入・更新・削除を許容。このときはphantom readに加えて、unrepeatable readが発生する。
  • レベル0がread uncommitted。並行処理は上記に加えてコミット前の参照も許容。このときは上記2つに加えてdirty readも発生する。

phantom readについて

  • あるトランザクションが処理している間、他のトランザクションにより挿入が行われ、突然データが幻のように現れる現象。

unrepeatable readについて

  • 同一条件で検索しても異なった結果が返ってくること。
  • たとえばDBの在庫数が3個のとき。
  • トランザクション1(以下T1)がselect(参照)すると在庫数は3個と出てくる。
  • このあとT1側で色々手続きを進めたとして、最後の決済前に在庫を再確認する必要がある。
  • (例えれば、家電量販店で大人気商品について、店員さんと商談を進めていて、購入決定直前に念のため在庫を調べるようなもの)
  • なぜなら、レベル1のread committedでは並列した他のトランザクションにおけるupdate,commitを許容しているから。

dirty readについて

  • 未コミットのデータを参照すること。
  • たとえばトムの口座残高が500,000円のとき。
  • トランザクション1(以下T1)がselect(参照)し、100,000円加算してupdateしたとする。(commitはまだ)
  • このあとトランザクション2(以下T2)がselectし、30,000円加算してupdateしたとする。
  • ここがポイント。T1がupdate~commitの間に、先走って忙しなく参照しにいく。(T1がupdateするより前を参照するほどは先走らない。それをするとlost updateが起きてしまう)
  • このあとT1がcommitするなら、何の問題もない。しかしもしT1がロールバックした場合、T2は正しく動作しない。(先走って600,000円の前提でDB参照してるが、実体は500,000円からスタートだから)

9月22日復習時追記

  • 隔離性水準は、午前2では数問出題。TACテキストおよび過去5年分解いており、対策済。
  • 午後については「同時実行制御」として過去問ベースで確認しており、対策済。

問題090(SQL確認ドリル)

問題文

  • web_logテーブルに記録された「/prod/prod_id_8/」のページビュー数を求めてください。
  • クエリパラメータ「?sys=abc123」の有無にかかわらずカウントします。
  • 結果テーブルのカラム名は「pageviews_8」とします。

where 列名 like (“条件文”)のおさらい

  • where 列名 like (“条件文”)は、条件文に記述した内容でデータを絞り込める。
  • なお、条件文において%は任意の文字、_は任意の1文字を表す。
  • 具体的には以下のとおり。

考察

  • データベーススペシャリスト資格について。今回は知識(隔離性の水準)の復習を行い、処理効率と安定性はトレードオフであることを学習した。また、SQLの確認ドリル(web_logテーブル内の”/prod/prod_id_8/”のPV数)を解いた。
  • 考察。「部下や年下の方と接するときは、傾聴や敬意をもって接する」という要旨の本を読んだ。確かに私が職場で「凄い」と思う上司は、これらがスムーズな印象を受ける。同じ仕事でも「あなたの意見は不要。指示通りやるように」か「あなたの意見と力をぜひ貸して欲しい」のどちらか良いかという話だ。

考察のシンプル化と英訳(練習中)

  • I am careful not to be arrogant. Because there is much to learn from others.
  • (私は傲慢にならないよう気を付けます。他者から学ぶことは多いからです)

参考資料

  • 集中演習 SQL入門/木田和廣/株式会社インプレス
  • 2022年度版 ALL IN ONE パーフェクトマスター データベーススペシャリスト/TAC

コメント

タイトルとURLをコピーしました