データベーススペシャリスト掲示板

掲示板検索:

[0160]H21 AM2 問11 解説

かよさん(No.1)
解説文に
> 正常なトランザクションは BEGIN TRANSACTION によって開始され、COMMIT を経て END TRANSACTION で終了しますが、WALプロトコルに従えばトランザクションの開始直後に更新前ログを書出し、COMMIT直前に更新後ログを書き出すことになります。
とありますが、この解説に従うと132456の順になるのではないでしょうか? それとも、「COMMIT」に実データの更新も含まれているのでしょうか?
2021.02.20 15:03
GinSanaさん(No.2)
1⇒3⇒2⇒4⇒5⇒6だと、2で障害が発生した場合に、4でやるはずの更新後の内容が記録されていないので戻せないことになります。それだと更新後の内容がメモリにあるので、たとえば電源が落ちたらメモリから消えちゃいますね。
ロールフォワードするのに、先に書いとけば、ACID特性の耐久性が保障されることになりますね。

>それとも、「COMMIT」に実データの更新も含まれているのでしょうか?
https://www.db-siken.com/bbs/0051.html
より
・・・・・・・・・
ちなみにcommit=更新後情報の実ファイルへの書き出しではありません。
commitはデータベースが「この処理が完了したことを保障する。」もので、実ファイルへの書き出しはまた別のタイミングで非同期(チェックポイント)で行われます。
つまりcommit後は、メモリ上のみに更新データが存在する状態で、ディスクとメモリでデータに違いが発生しています。(データがダーティな状態となる。)
・・・・・・・・・

2021.02.20 21:51
かよさん(No.3)
耐久性を保証するのに134256である必要があるのは分かりましたが、解説にあるCOMMITとは一体何なのですか?5(COMMITレコードを書き出す)とは別物なのでしょうか?
2021.02.21 18:57
GinSanaさん(No.4)
>解説にあるCOMMITとは一体何なのですか?5(COMMITレコードを書き出す)とは別物なのでしょうか?

COMMITレコードを書き出す(問題文)のと一緒です。普段、コミットとかロールバックで、いちいちコミットレコードを書き出して・・・って言わないような感覚です。

2021.02.21 22:31
かよさん(No.5)
その場合、「COMMIT直前に更新後ログを書き出すことになります。」という解説が間違っていることになりませんか?
正解の134256の順だと、COMMIT直前にやることは「更新後データのバッファへの書き出し」ですよね。
2021.02.22 11:32
GinSanaさん(No.6)
>その場合、「COMMIT直前に更新後ログを書き出すことになります。」という解説が間違っていることになりませんか?

まあ、たしかに更新後ログの書き出しは(問題文的には)「更新後データのバッファへの書き出し」の直前なんですが、
「更新後データのバッファへの書き出し」って、この順以外でも、チェックポイントが発生したり、バッファのフラッシュが発生すると実行されるから、タイミングを書くのに、もう少しわかりやすい「COMMIT」の直前って書いたんじゃあないでしょうかね。
2021.02.22 13:44
かよさん(No.7)
ようやくわかりました。
ありがとうございました。
2021.02.22 14:23

【返信投稿用フォーム】

お名前(10文字以内)

顔アイコン


本文(2,000文字以内)

本投稿を削除するためのパスワード(20文字以内)

プレビュー
※宣伝や迷惑行為を防止するため、当サイトとIPAサイト以外のURLを含む文章の投稿は禁止されています。

投稿記事削除用フォーム

投稿No. パスワード 
© 2016-2021 データベーススペシャリストドットコム All Rights Reserved.

Pagetop