「なんで遅いの?」を解決する魔法の呪文。PostgreSQLの『ANALYZE』って知ってる?
こんにちは!データベースエンジニアとして日々コードと格闘している私ですが、今日は皆さんに、PostgreSQLのちょっと地味だけどめちゃくちゃ重要な「魔法の呪文」についてお話ししようと思います。
データベースを触り始めたばかりの頃、「最初はサクサク動いていたのに、データが増えてきたら急にクエリが遅くなった…」なんて経験、ありませんか?
実はそれ、データベースが「道に迷っている」のが原因かもしれません。今日は、その迷子を救う『ANALYZE(アナライズ)』というコマンドについて、一緒に見ていきましょう。
—
「目的地までの地図」が古いとどうなる?
想像してみてください。あなたは今、見知らぬ街に観光に来ています。
手元には地図があるのですが、その地図は「3年前」のもの。
- 「ここに大きな交差点があるはず!」と思って行ってみたら、今は公園になっていた。
- 「ここは近道だ!」と進んだら、今は工事中で通行止めだった。
これじゃあ、目的地にたどり着くのに時間がかかって当然ですよね。
データベースの世界でも全く同じことが起きています。PostgreSQLは、クエリを実行するときに「どの道(インデックス)を通れば一番早くデータにたどり着けるか」を計算しています。その計算に使う「地図」が、統計情報というものです。
データがどんどん増えたり減ったりしているのに、PostgreSQLが持っている「地図」が古いままだったら……? 当然、効率の悪い道を選んでしまい、結果として処理が遅くなってしまうんです。
そこで登場するのが『ANALYZE』!
この『ANALYZE』は、言わば「データベースの地図を最新版に更新するアップデートボタン」です。
ANALYZE テーブル名;
これを実行すると、PostgreSQLはテーブルの中身をサッと確認して、「おっ、データがこんなに増えてるぞ」「この列には重複データが多いから、検索するときは注意しなきゃな」といったメモを取り、地図を書き換えてくれます。
そうすれば、次にクエリを投げたとき、PostgreSQLは「最新の地図」を見て、最短ルートでデータを引っ張ってきてくれるようになるんです。
いつ使うのがいいの?
「じゃあ、常に実行しておけばいいの?」と思われるかもしれませんが、実はそうでもないんです。ANALYZEを実行するのにも、データベースは少しだけ体力を消費します。
基本的には、以下のタイミングで実行してあげるのがコツですよ。
- 大量のデータを一気にインポートした直後: 「地図」がガラッと変わるので、必須です!
- データの更新頻度が高いテーブル: 定期的にメンテナンスしてあげましょう。
- 「最近クエリが遅いな?」と感じたとき: まずはこれを試すのが、ベテランエンジニアの第一歩です。
※ちなみに、PostgreSQLには「自動でやってくれる機能(autovacuum)」も備わっています。普段は賢いAIが勝手にやってくれているのですが、たまに「お、今は手伝ってやったほうがいいな」という時に、人間が手動でポンと背中を押してあげるイメージですね。
まとめ:データベースと仲良くなるために
データベースは、決して冷たい機械ではありません。私たちが少しだけ気を配って「最新の状況」を教えてあげれば、それに応えて最高のパフォーマンスを出そうと頑張ってくれます。
「ANALYZE」は、そんなデータベースとの信頼関係を築くための、とても大切なコミュニケーションツールなんです。
もし皆さんの環境で「あれ?ちょっと動きが鈍いかな?」と思ったら、ぜひこの魔法の呪文を思い出してみてください。「ANALYZE」と打つだけで、驚くほどスッキリ解消することもありますよ!
それでは、また次回の記事でお会いしましょう。ハッピーなデータベースライフを!
コメント