PostgreSQLをVerUPするときにはリリースノートをちゃんと読んで既存のシステムに影響がないかを確認しないといけないです。
PostgreSQLを9.0から9.3にあげた際に変更を把握していないではまった点について書きます。
PostgreSQL9.0のpg_stat_activityテーブルの定義は以下の通りです。
PostgreSQL9.3のpg_stat_activityテーブルの定義は以下の通りです。
列が追加、列名が変更されています。
ErogameScapeでは、2013年9月に起きた障害の対策としてテーブルに長時間ロックをかけているクエリとそのロック解除を待っているクエリを強制的に終了させるスクリプトを動かしています。
そのスクリプトはpg_stat_activityの内容を使っています。
pg_stat_activityのprocpidがpidにかわっていたのでスクリプトの中のSQLの修正が必要でした。
ErogameScapeは実質サーバー1台で動かしているので、パソコンの前に座っている時はtopを眺めています。CPUを食っているPostgreSQLのプロセスを見つけたら、
SELECT * FROM pg_stat_activity WHERE pid = プロセスID ;
して、 実行されているクエリを特定してEXPLAINしてみます。
こんなことをしなくてもスロークエリをログに保存して後で見ればいいのですが、今起こっている事象を見る方に興味がわいてしまいます…
PostgreSQLを9.0から9.3にあげた際に変更を把握していないではまった点について書きます。
PostgreSQL9.0のpg_stat_activityテーブルの定義は以下の通りです。
ビュー "pg_catalog.pg_stat_activity" 列 | 型 | 修飾語 ------------------+--------------------------+-------- datid | oid | datname | name | procpid | integer | usesysid | oid | usename | name | application_name | text | client_addr | inet | client_port | integer | backend_start | timestamp with time zone | xact_start | timestamp with time zone | query_start | timestamp with time zone | waiting | boolean | current_query | text |
PostgreSQL9.3のpg_stat_activityテーブルの定義は以下の通りです。
ビュー "pg_catalog.pg_stat_activity" 列 | 型 | 修飾語 ------------------+--------------------------+-------- datid | oid | datname | name | pid | integer | usesysid | oid | usename | name | application_name | text | client_addr | inet | client_hostname | text | client_port | integer | backend_start | timestamp with time zone | xact_start | timestamp with time zone | query_start | timestamp with time zone | state_change | timestamp with time zone | waiting | boolean | state | text | query | text |
列が追加、列名が変更されています。
ErogameScapeでは、2013年9月に起きた障害の対策としてテーブルに長時間ロックをかけているクエリとそのロック解除を待っているクエリを強制的に終了させるスクリプトを動かしています。
そのスクリプトはpg_stat_activityの内容を使っています。
pg_stat_activityのprocpidがpidにかわっていたのでスクリプトの中のSQLの修正が必要でした。
ErogameScapeは実質サーバー1台で動かしているので、パソコンの前に座っている時はtopを眺めています。CPUを食っているPostgreSQLのプロセスを見つけたら、
SELECT * FROM pg_stat_activity WHERE pid = プロセスID ;
して、 実行されているクエリを特定してEXPLAINしてみます。
こんなことをしなくてもスロークエリをログに保存して後で見ればいいのですが、今起こっている事象を見る方に興味がわいてしまいます…