こんにちは!データベースの世界へようこそ。
普段、PostgreSQLを触っていると、「あれ、なんか今日システムが重いな?」とか「画面がずっと読み込み中のまま止まっちゃった!」なんてこと、ありませんか?
そんな時、真っ先に駆け込むべき「駆け込み寺」のような場所があります。それが今回紹介する`pg_stat_activity`です。
専門用語だらけで難しそうに聞こえるかもしれませんが、実はこれ、「データベースというお店の『店内の様子』を映し出す監視カメラ」のようなものなんです。さっそく、その使い方を一緒に見ていきましょう!
—
データベースは「忙しいレストラン」
まずは想像してみてください。データベースを、たくさんのお客さんが注文をする「レストラン」だと考えてみましょう。
- クライアント(アプリ):注文をするお客さん
- PostgreSQL:料理を作るキッチン
- クエリ(SQL):注文伝票
お店が空いている時はいいのですが、たまに「なかなか料理が出てこない!」というトラブルが起きますよね。そんな時、店長(あなた)はキッチンの中を覗き込んで、何が起きているかを確認したくなります。
そんな時に「今、誰がどの注文を調理中なの?」「どの伝票が詰まってるの?」を一覧で教えてくれるのが、`pg_stat_activity`という魔法のリストなんです。
—
`pg_stat_activity` で何が見えるの?
PostgreSQLに対して、以下の魔法の呪文(クエリ)を投げてみてください。
SELECT FROM pg_stat_activity;
すると、今のデータベースの状態がズラッと表示されます。ここから注目してほしいのは、主にこの3つの情報です。
1. `state`(今、何してるの?)
その人が「バリバリ仕事中(active)」なのか、「ちょっと休憩中(idle)」なのかが分かります。もし「active」のまま全然終わらない人がいたら、その人はきっと「めちゃくちゃ難しい料理」を作っていて、キッチンを占領している可能性が高いですよね。
2. `query`(何を注文してるの?)
これが一番大事です! 今まさに実行されている「具体的な命令(SQL)」が見えちゃいます。
「ああ、このSQLが重かったんだな」「こんな複雑な注文を出しちゃったんだ!」という犯人探しが、これ一つで解決します。
3. `query_start`(いつから待ってるの?)
「その注文、いつから取り掛かってる?」という開始時刻です。もし開始時刻が数分前だったら……大事件です!「お客さんが待ちくたびれて帰っちゃう(タイムアウト)」前に、私たちが助けに行かなきゃいけませんね。
—
現場でよくある「困った!」の解決法
僕も駆け出しの頃は、システムが重くなるたびにオロオロしていました。でも、`pg_stat_activity`を使いこなせるようになってからは、少し余裕が持てるようになりました。
例えば、こんな風に使ってみてください。
- 「今、時間がかかっているクエリだけを見たい!」
`SELECT pid, now() – query_start AS duration, query FROM pg_stat_activity WHERE state = ‘active’ ORDER BY duration DESC;`
これを使うと、長時間頑張っているクエリを上から順に並べてくれます。「おっ、このクエリが3分も回ってるのか!」と一目瞭然です。
—
最後に:あまり怖がらないで
「データベースの中身を覗く」と聞くと、なんだか専門家だけがやる難しい作業のように感じるかもしれません。でも、`pg_stat_activity`は、言ってみれば「今の状況確認」をするためのただのリストです。
まずはあまり難しく考えず、システムが重いなと感じた時に、このリストを覗いてみてください。「あ、今はこんな作業が動いているんだな」と眺めるだけでも、データベースとの距離がグッと縮まりますよ。
もし分からないことがあったら、いつでもまた聞きに来てくださいね。データベースの深淵は広いですが、少しずつ一緒に冒険していきましょう!
それでは、また次の記事でお会いしましょう!
コメント