0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

基本情報技術者試験対策 トランザクションについて

0
Posted at

はじめに

基本情報技術者の試験対策として学習した、データベース分野の「トランザクション」
についてまとめました。

トランザクションとは

トランザクション(Transaction)とは処理、取り扱い、取引を意味する単語。
IT分野では複数処理をひとまとまりにした単位やデータを指し、関連した複数の処理を
一つの処理として実行・管理する仕組みを「トランザクション」という。

ACID特性

複数の利用者が同時にアクセスしても安定性と整合性を保てるように、
トランザクション処理は「ACID特性」と呼ばれる4つの特性が必要である。

  1. 原子性(Atomicity):トランザクションは「すべて完了」or「すべて破棄」のどちらかで
    必ず終了すること
  2. 一貫性(Consistency):データベースの内容に矛盾がないこと
  3. 独立性(Isolation):トランザクションを「複数同時に実行した場合」と「単独で順番に
    実行した場合」で同じ結果になること
  4. 永続性/耐久性(Durability):トランザクションが正常終了した場合、障害が発生しても
    更新結果がデータベースから失われないこと

排他制御

データベースの更新中はアクセスを制限(ロック)して、他のトランザクションから更新
できないようにすることでデータの不整合を防ぐ。

ロックの種類

  • 共有ロック
    トランザクションがデータ参照前にかける、他のタスクは読み込みのみ可能とするロック
  • 占有ロック
    トランザクションがデータ更新前にかける、他のタスクは読み込みも書き込みも不可とするロック

ロックの範囲

データ更新時にロックを掛ける範囲によって、他トランザクションの待ち時間が
変化する。

  • ロックの範囲が大きい(例:表単位)
    →他トランザクションのロックと競合しやすいため、待ち時間が多く発生して全体のスループットが低下する

  • ロックの範囲が小さい(例:行単位)
    →ロックの競合が起こりにくいため、待ち時間が少ない。ただ管理するロックの数が多くなるためDBMSのメモリ使用領域が多く必要となる

デッドロック

複数のトランザクションが互いに相手の占有ロック解除待ちになり、処理が進まなくなる
現象のこと。

  • デッドロックの対処方法
    • アクセスする資源の順番を一貫させる
    • 一度に処理に必要な資源をすべてロックする
    • 可能な限り小さい範囲(行単位)でロックする
    • デッドロックが起きたら、どちらかの処理を強制終了する

障害回復

ハードウェア障害の発生時やアボード発生時に、データベースを回復する必要がある。
(リカバリ処理)

押さえておきたい用語

  • コミット:トランザクションの一連の処理が障害なく完了し、データベースの更新を確定すること
  • アボード:トランザクションの途中で障害が発生し、その処理を強制終了させること
  • フルバックアップファイル:データベースの全データをバックアップしたもの
  • ログファイル:データベースの更新前後の値を書きだして更新記録をとったもの

リカバリ処理の方法

  • ロールフォワード(Roll Forward)
    データベースのハードウェア障害が発生した場合、最新のフルバックアップの状態に復元後、ログファイルの更新後情報で復旧させる。

0または最新のフルバックアップデータから始まって「後ろからログを追っていく」ので前進するイメージ!

  • ロールバック(Roll Back)
    データベースの更新途中で異常終了した場合、ログファイルの更新前情報を使用して更新前に復旧させる。

障害後の状態から「異常終了した処理を取り消して処理を行わなかったことにする」ので後退するイメージ!

  • チェックポイント法
    データベースへの変更処理はメモリ上にて行われるため、コミットにて処理が確定していても、ディスクへは即時反映されていない。次のチェックポイント時に他の変更処理とまとめてディスクへの反映が行われる。

    • 回復対象:前回のチェックポイントまでにコミットされていない(ディスクに反映されていない)トランザクション
      • 既にコミットしている場合
        前回チェックポイントの状態からログファイルの更新後情報を使用し、ロールフォワードにてコミットした状態まで復旧
      • 処理途中に障害発生した(まだコミットしていない)場合
        ログファイルの更新前情報を使用して、すべての処理を取り消すロールバックにてトランザクション開始前まで復旧

    前回のチェックポイント以前から処理が始まっている場合でも、前回のチェックポイントの状態ではなく、トランザクション開始前まで戻す。

終わりに

トランザクションの処理について学習し、データベース上での処理の流れを理解することができました。本日もお疲れ様でした。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?