こんにちは!データベースの世界へようこそ。
普段、PostgreSQLを使っていると「WAL」という単語、どこかで目にすることはありませんか?「なんだか難しそう……」とスルーしてしまいがちですが、実はこれ、データベースの「命綱」とも言える非常に大切な仕組みなんです。
今日は、そんなWALの中でも「WALセグメントファイル」という、ちょっと地味だけど縁の下の力持ち的な存在について、お話ししてみたいと思います。
—
データベースの「黒い手帳」
突然ですが、みなさんがものすごく忙しい秘書になったと想像してみてください。社長(データベース)から次々と指示が飛んできます。「Aさんの口座に100円振り込んで」「Bさんの住所を更新して」。
もし、社長の指示があるたびに、分厚い台帳をひっぱり出して、丁寧に書き込んでいたらどうでしょう?日が暮れてしまいますよね。
そこで、まずは「とりあえず手元の小さなメモ帳(WALログ)」に、やるべきことを走り書きします。
「とりあえずここに書いたから、あとは後でゆっくり台帳に整理すればいいや!」
この「メモ帳」こそがWAL(Write Ahead Log)です。そして、そのメモ帳がいっぱいになると、新しいページに切り替わりますよね。その「使い終わったメモの塊」が、今回紹介する「WALセグメントファイル」なんです。
—
16MBの「ノート」の正体
PostgreSQLのWALセグメントファイルは、デフォルトで16MBという固定サイズと決まっています。
なぜ固定サイズなのか?それは、システムが「管理しやすいから」です。バラバラのサイズのノートだと、どこに何を書いたか探すのが大変ですよね。16MBという「決まったサイズのノート」を何冊も並べておくことで、データベースは「あ、古いノートはもう不要だな」と判断して、後からそのノートを再利用(中身を消してまた書き始める)することができるんです。
ファイルの名前には秘密がある
WALセグメントファイルを見てみると、`000000010000000000000001` のような、一見すると暗号のような名前が並んでいます。
でも、これも難しく考える必要はありません。これは単なる「通し番号」なんです。
- 「このノートは〇冊目ですよ」
- 「その中の〇ページ目ですよ」
ということを、コンピューターが正確に管理するための住所のようなもの。そう思えば、少し親近感が湧きませんか?
—
「再利用」という名のSDGs
ここで面白いのが、このファイルの「再利用」の仕組みです。
先ほどお話しした通り、16MBのファイルがいっぱいになると、PostgreSQLは新しいファイルを作ります。でも、古いファイルをいちいち「捨てて、また新しく買ってきて……」なんてしていたら、コンピューターは疲れ切ってしまいます。
そこでPostgreSQLは、役割を終えた古いファイルを捨てずに、中身をきれいさっぱり消して、新しい名前を付けて「真っ白なノート」として再利用します。
まさにエコですよね!この仕組みのおかげで、データベースは激しい書き込みにも負けず、安定して動き続けることができるんです。
—
最後に:なぜこれを知っておくといいの?
「仕組みはわかったけど、結局何のためにあるの?」と思われるかもしれません。
もし、突然パソコンの電源が落ちてしまったら……。台帳に書きかけだった情報は消えてしまうかもしれません。でも、このWALセグメントファイル(メモ帳)さえ無事なら、電源が入った瞬間に「さっきやりかけだった仕事はこれだね!」と、すぐに元の状態へ復旧できるんです。
技術の裏側にあるこうした仕組みを知っておくと、データベースが急に愛おしく見えてきませんか?
「今日も16MBのノートを丁寧に管理してくれてありがとう、PostgreSQL!」
そんな気持ちでログを覗いてみると、トラブルが起きた時もきっと冷静に対処できるはずです。また次回の記事で、お会いしましょうね!
コメント