トランザクションとは
とらんざくしょん
データベースに対する一連の処理を、まとめて1つの単位として扱うもの。COMMITで処理の結果を確定し、ROLLBACKで開始前の状態に戻す。原子性・一貫性・独立性・耐久性(ACID特性)を満たすように、DBMSがロックやログを使って管理する。
「トランザクション」は、1分野の13問の練習問題に出てきます(データベースの基礎など)。
この用語の分野: データベースの基礎
とらんざくしょん
データベースに対する一連の処理を、まとめて1つの単位として扱うもの。COMMITで処理の結果を確定し、ROLLBACKで開始前の状態に戻す。原子性・一貫性・独立性・耐久性(ACID特性)を満たすように、DBMSがロックやログを使って管理する。
「トランザクション」は、1分野の13問の練習問題に出てきます(データベースの基礎など)。
この用語の分野: データベースの基礎
銀行の振替では、口座Aから引き落とす処理と口座Bに入金する処理の両方がそろって初めて正しい結果になります。トランザクションは、このような一連の処理を1つの単位にまとめ、最後にCOMMITを実行すると結果が確定し、途中でエラーが起きたときなどにROLLBACKを実行すると、トランザクションの中のすべての更新が取り消されます。COMMITしていない更新は、障害が起きた場合にも取り消され、一部だけが反映された中途半端な状態は残りません。
多くの利用者が同時にデータベースを使うと、複数のトランザクションが同じデータを読み書きします。何も制御しないと、一方の更新がもう一方の更新で上書きされて失われる(更新の消失)、コミットされていないデータを読む(ダーティリード)などの問題が起きます。DBMSは、共有ロックと専有ロックを使う排他制御や、更新前の版を残して読み出しに使う多版同時実行制御(MVCC)などで、トランザクションどうしの干渉を防ぎます。どこまで防ぐかは、分離レベルで選びます。
DBMSは、更新の前後の値をログに記録し、ログをデータベース本体より先に記憶装置に書き込みます。障害が起きたあとは、ログをもとに、コミット済みのトランザクションの更新をやり直し(ロールフォワード)、コミットしていないトランザクションの更新を取り消して(ロールバック)、正しい状態に戻します。定期的にチェックポイントを取っておくと、回復のときにたどるログの範囲を短くできます。
正解:B. 2つのUPDATEがどちらも取り消され、トランザクションを開始する前の状態に戻る
トランザクションは、データベースに対する一連の処理を、まとめて1つの単位として扱う仕組みです。トランザクションの中で行った更新は、COMMITを実行すると確定し、ROLLBACKを実行するとすべて取り消されて、トランザクションを開始する前の状態に戻ります。この例では、口座Aの減算と口座Bの加算がどちらも取り消され、2つの口座の残高は元のままです。振替の途中でエラーが起きたときにROLLBACKすれば、一方の口座だけが更新された中途半端な状態が残りません。一部だけを取り消したい場合は、SAVEPOINTで途中に目印を付けておき、ROLLBACK TO SAVEPOINT でそこまで戻す方法もあります。
正解:C. 原子性(Atomicity)
ACID特性は、トランザクションが満たすべき4つの性質の頭文字をとったものです。原子性(Atomicity)は、トランザクションの中の処理がすべて実行されるか、まったく実行されないかのどちらかになる性質で、障害が起きたときは途中までの更新を取り消します。一貫性(Consistency)は、トランザクションの前後で、データが整合性の制約(残高が負にならない、外部キーの参照先があるなど)を満たし続ける性質です。独立性(Isolation、隔離性)は、同時に実行される複数のトランザクションが互いに干渉せず、1つずつ順に実行した場合と同じ結果になる性質です。耐久性(Durability、永続性)は、コミットしたトランザクションの結果が、その後に障害が起きても失われない性質です。設問の「全部か無か」の性質は原子性です。
アプリケーションがROLLBACKを実行するか、DBMSが障害からの回復の処理を行うことで、そのトランザクションの中の更新はすべて取り消されます。一部の更新だけが残ることはありません。
長い時間ロックを持ち続けるので、ほかのトランザクションが待たされて同時に処理できる量が減り、デッドロックも起きやすくなります。トランザクションは、整合性を保つのに必要な範囲で短くするのが基本です。
トランザクションは、データベースに対する一連の処理を、まとめて1つの単位として扱う仕組みです。
口座表で、トランザクションを開始し、口座Aの残高から300を引く UPDATE と、口座Bの残高に300を足す UPD…ACID特性は、トランザクションが満たすべき4つの性質の頭文字をとったものです。
トランザクションが持つべきACID特性のうち、「口座Aから引き落として口座Bに入金する振替の処理が、途中で障害が起きて…更新したトランザクションがあとでロールバックすると、読み出した値は一度も確定しなかった値になり、それをもとにした処理が誤りになります。
トランザクションを同時に実行したときに起きる問題のうち、ダーティリードの説明として正しいものはどれか。1つのトランザクションの中で同じ条件の検索を繰り返したとき、その間にほかのトランザクションが条件に合う行を追加(または削除)してコミットしたために、結果の行の集まりが変わる現象をファントムリード(ファントム)と呼びます。
トランザクションT1が SELECT COUNT(*) FROM 注文 WHERE 金額 >= 1000 を実行したと…共有ロックは、データを読み出すときにかけるロックで、ほかのトランザクションも同じデータに共有ロックをかけて同時に読み出せますが、書き込みのための専有ロックはかけられません。
トランザクションT1が、ある行に共有ロックをかけて読み出している。この行に対して、T2が共有ロックを、T3が専有ロック…Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。