pg_stat_activityで実行中のアクティビティを診断する
pg_stat_activityビューを使って各接続が現在何をしているかを確認し、長時間実行中またはブロックされているクエリを見つけ、問題のあるセッションを安全にキャンセルまたは終了する方法を学びます。
「pg_stat_activityで実行中のアクティビティを診断する」はCoddyKit上の無料PostgreSQL Performance & Query Optimizationレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPostgreSQL Performance & Query Optimization学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PostgreSQL Performance & Query Optimizationコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
Your Window into Live Sessions
The pg_stat_activity view has one row per server connection. It is the first place to look when the database feels slow or stuck, showing what each session is doing this instant.
The Key Columns
The most useful columns are:
pid: the backend process idstate: active, idle, idle in transactionquery: the current or last SQL textwait_event: what the session is waiting on
A Basic Look
Select the essentials for all active sessions.
SELECT pid, usename, state, wait_event, query
FROM pg_stat_activity
WHERE state <> 'idle';Finding Long-Running Queries
Compute how long each active query has been running by subtracting query_start from now.
SELECT pid, now() - query_start AS runtime, query
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY runtime DESC;Idle in Transaction Danger
A session in idle in transaction holds locks and pins the oldest XID without doing work. These can block vacuum and other sessions. Hunt them down.
SELECT pid, now() - xact_start AS tx_age, query
FROM pg_stat_activity
WHERE state = 'idle in transaction'
ORDER BY tx_age DESC;Seeing What a Session Waits On
The wait_event_type and wait_event columns reveal whether a session is waiting on a lock, on I/O, or on a client. This pinpoints the bottleneck.
SELECT pid, wait_event_type, wait_event, query
FROM pg_stat_activity
WHERE wait_event IS NOT NULL;Finding Who Blocks Whom
Combine activity with pg_blocking_pids to see which sessions are blocking others.
SELECT pid, pg_blocking_pids(pid) AS blocked_by, query
FROM pg_stat_activity
WHERE cardinality(pg_blocking_pids(pid)) > 0;Cancelling a Query
pg_cancel_backend stops the current query in a session but leaves the connection open. Try this first — it is the gentler option.
SELECT pg_cancel_backend(12345);Terminating a Connection
If cancelling is not enough, pg_terminate_backend closes the whole connection, rolling back its transaction. Use it for stuck idle-in-transaction sessions.
SELECT pg_terminate_backend(12345);Building a Monitoring Habit
Good practice:
- Set
idle_in_transaction_session_timeoutto auto-kill stragglers - Set
statement_timeoutto bound runaway queries - Watch
pg_stat_activityduring incidents before reaching for the kill switch
Counting Connections by State
To gauge overall pressure, summarize how many connections sit in each state. A pile of idle-in-transaction or active sessions hints at pooling or query problems.
SELECT state, count(*)
FROM pg_stat_activity
GROUP BY state
ORDER BY count(*) DESC;Quick Check
Test your live-monitoring knowledge.
Recap
You learned live diagnosis with pg_stat_activity:
- One row per connection with state, query, and wait info
- Find long queries via
now() - query_start - Hunt idle-in-transaction sessions that block vacuum
pg_blocking_pidsreveals who blocks whom- Cancel a query or terminate a backend when needed
よくある質問
「pg_stat_activityで実行中のアクティビティを診断する」レッスンは無料ですか?
はい。「pg_stat_activityで実行中のアクティビティを診断する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PostgreSQL Performance & Query Optimizationコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PostgreSQL Performance & Query Optimizationコースには全4レッスンが含まれています。
「pg_stat_activityで実行中のアクティビティを診断する」で何を学びますか?
pg_stat_activityビューを使って各接続が現在何をしているかを確認し、長時間実行中またはブロックされているクエリを見つけ、問題のあるセッションを安全にキャンセルまたは終了する方法を学びます。 ブラウザで直接実行するハンズオンコードでPostgreSQL Performance & Query Optimizationを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PostgreSQL Performance & Query Optimizationを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPostgreSQL Performance & Query Optimizationは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「pg_stat_activityで実行中のアクティビティを診断する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPostgreSQL Performance & Query Optimizationレッスンでコードを書いて実行できますか?
はい。すべてのPostgreSQL Performance & Query Optimizationレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- pg_stat_statements と pg_buffercache の使用
- 分析のためのログ設定
- 外部監視ツールとの統合
- pg_stat_activityで実行中のアクティビティを診断する