こんにちは!データベースの深淵を日々覗き込んでいる、エンジニアの管理人です。
PostgreSQLを触っていると、「チェックポイント」という言葉を耳にしませんか?エラーログや設定ファイルでチラッと見かけるけれど、なんだか難しそうでスルーしている……そんな方も多いはず。
今日は、この「チェックポイント」が一体何をしているのか、専門用語を極力抜きにして、皆さんの日常にある「ある作業」に例えてお話ししますね。
—
宿題と「清書」のジレンマ
想像してみてください。あなたは今、ものすごく分厚いノートに宿題を書いているとします。
先生からは「書き終わったらすぐに提出しなさい」と言われているけれど、ページをめくるたびに、いちいち先生の机まで走っていくのは面倒ですよね?
そこで、あなたはこう考えます。
「まずは手元のルーズリーフ(メモリ)にどんどん書き込んでいって、ある程度まとまったら、最後に一気にノート(ディスク)へ清書しよう!」
これ、実はデータベースも全く同じことをしているんです。
PostgreSQLの「手元」と「清書」
PostgreSQLは、データを更新するとき、いきなりディスクという「重たい場所」に書き込みに行ったりしません。なぜなら、ディスクへの書き込みはめちゃくちゃ時間がかかるからです。
そこで、まずはメモリ上にある「共有バッファ」という作業机にデータをパッと書き込みます。この状態を、エンジニアの世界では「ダーティ(汚れた=未反映の)ページ」なんて呼んだりします。
チェックポインターは「几帳面な整理係」
さて、メモリに書き込みっぱなしだと、もし途中でパソコンの電源が落ちたらどうなるでしょう? そう、全部消えてしまいますよね。でも、ノート(ディスク)に書き込んでいる最中も、もし停電になったらデータが中途半端に壊れてしまうリスクがあります。
そこで登場するのが「チェックポインター」というプロセスです。
彼は、いわば「几帳面な整理係」。定期的にこんな声かけをしてくれます。
- 「よし、今のところの変更分を、一気にディスクに反映させよう!」
- 「ここまでディスクに書き込んだから、これより前の記録はもう忘れても大丈夫だよ!」
こうして定期的に「ここまでやったよ!」という印をディスクに刻む作業。これが「チェックポイント」なんです。
なぜチェックポイントが必要なの?
もしチェックポイントがなかったらどうなると思いますか?
データベースが再起動するたびに、過去の膨大な記録を最初から最後まで全部読み直して、「どこまで書き込んだっけ?」と確認しなきゃいけなくなります。これだと、再起動に何時間、何日もかかってしまうかもしれませんよね。
チェックポイントは、「ここまでは確実にディスクに書き込んであるから、ここから先だけをチェックすればいいよ!」という目印を立てることで、万が一の事故の後の復旧をめちゃくちゃ速くしてくれているんです。
—
最後に:完璧すぎないのがコツ
ここまで聞くと、「じゃあ、1秒ごとにチェックポイントを動かせば、データは一番安全なんじゃない?」と思うかもしれません。
でも、それはちょっと違います。
チェックポイントは「一気にディスクに書き込む作業」なので、実はかなりパワーを使います。頻繁にやりすぎると、そのたびにデータベースが少し重くなってしまうんです。
- 頻繁すぎると: パフォーマンスが落ちる(先生の机を何度も往復して疲れる)
- 間隔が空きすぎると: 再起動した時の復旧が大変(宿題が溜まりすぎて泣きを見る)
この「バランス」を調整するのが、PostgreSQLエンジニアの腕の見せ所というわけです。
—
どうでしょう? チェックポイントが少し身近に感じられたら嬉しいです。
今度PostgreSQLの設定ファイル(`postgresql.conf`)を覗く機会があったら、「ああ、ここにこの子の頑張る間隔が書いてあるんだな」と、優しく見守ってあげてくださいね。
それでは、また次回の記事でお会いしましょう!
コメント