Custom Search

JITAKU_SVR_Wiki



エラーログ

psql: FATAL: remaining connection slots are reserved for non-replication superuser connections

dbへのセッションがフルになっている。
対処方として、MAXコネクション数を増やすが一番最適。
また、すでにdbに接続すら出来なくなっている場合はdbを再起動し、プロセスを一回殺す。

FATAL: sorry, too many clients already

上記同様、セッションがMAXになってしまっている。

ロック解除

ロックの確認をしたときのpidをpg_cancel_backendに渡す

postgres=# select pg_cancel_backend('16855');
ERROR:  canceling statement due to user request
postgres=# \q

TIPS:
pg_cancel_backendに渡すPID(プロセス)はpg_stat_activity等で確認する。

pg_cancel_backendでは解除出来なかった場合はpostgres自体を再起動させる。

# /etc/init.d/postgres restart



postgresql情報

postgresqlが遅い

・キャッシュヒット率を調査する
・テーブルごとのアクセス数を調べる
・インデックスの状況を調べる

キャッシュヒット率の確認(DB全体)

クエリ(DB全体)に対しキャッシュから応答した確率

例)

postgres=# SELECT datname,
postgres-# round(blks_hit*100/(blks_hit+blks_read), 2) AS cache_hit_ratio
postgres-# FROM pg_stat_database WHERE blks_read > 0;
 datname  | cache_hit_ratio
----------+-----------------
 postgres |           97.00
 hoge     |           85.00
(2 rows)

キャッシュヒット率の確認(テーブル単位)

クエリ(テーブル単位)に対しキャッシュから応答した確率

例)

postgres=# \c hoge
hoge=# \x
Expanded display is on.
hoge=# select
hoge=# *,
hoge=# (heap_blks_hit*100) / (heap_blks_read+heap_blks_hit) as ritu
hoge=# from pg_statio_all_tables
hoge=# where heap_blks_hit >= 1
hoge=# and schemaname = 'public' order by ritu
hoge=# ;
-[ RECORD 1 ]---+---------------------------
relid           | 30766
schemaname      | hoge_test
relname         | hoge_event
heap_blks_read  | 45552
heap_blks_hit   | 316
idx_blks_read   | 16
idx_blks_hit    | 101
toast_blks_read |
toast_blks_hit  |
tidx_blks_read  |
tidx_blks_hit   |
ritu            | 0

TIPS:
heap_blks_read => ディスクから読み込まれた回数
heap_blks_hit => キャッシュから読み込まれた回数
idx_blks_read => ディクスからインデックスを読み込まれた回数
idx_blks_hit => キャッシュからインデックスを読み込まれた回数

上記の結果を見て、ディスクから読み込まれている回数が多いほど遅いと判断できる。
逆にキャッシュから読み込まれている回数が多いほど早いと判断できる。
また、インデックスを上手に使うことが出来ていればより早い読み込みを行っていることがわかる。
postgresqlのパフォーマンスをあげたい場合参考にする。

テーブルごとのアクセス数を調べる

テーブルごとのアクセス数を確認

アクセスの多いテーブルを見つけることが出来る。

hoge=# select relname, coalesce(seq_tup_read,0)+coalesce(idx_tup_fetch,0)+
hoge=# coalesce(n_tup_ins,0)+coalesce(n_tup_upd,0)+coalesce(n_tup_del,0) as
hoge=# total, coalesce(seq_tup_read,0)+coalesce(idx_tup_fetch,0) as select,
hoge=# coalesce(n_tup_ins,0) as insert, coalesce(n_tup_upd,0) as update,
hoge=# coalesce(n_tup_del,0) as delete from pg_stat_user_tables order by total
hoge=# desc;
                 relname                 |    total     |    select    | insert | update |  delete
-----------------------------------------+--------------+--------------+--------+--------+----------
 hoge_event                              | 550036936286 | 550036817709 |  63384 |  55193 |        0
 hoge_history                            |  71046131546 |  71032905837 |   6578 |   6578 | 13212553
 hoge1                                   |  10455962104 |  10455885490 |  64540 |  12074 |        0
 hoge2                                   |   6398766826 |   6398766790 |      6 |     30 |        0
 hoge3                                   |   1001921864 |   1001917691 |     61 |   4112 |        0

上記の結果を出すと、どのテーブルが多くアクセスしているかがわかる。
この結果を元にDBを分離させることや、インデックスを適切な値にしてあげる、優先してキャッシュに乗せてあげるなど、
色々とパフォーマンスを挙げる対応策が考えられる。
非常に有効な情報。

インデックスの状況を調べる

インデックスの有効性を見る。

hoge=# \c hoge
hoge=# \x
Expanded display is on.
hoge=# select * from pg_stat_user_indexes;
-[ RECORD 1 ]-+---------------------------------------------
relid         | 30766
indexrelid    | 31339
schemaname    | hoge_test
relname       | hoge_event
indexrelname  | hoge_event_pkey
idx_scan      | 0
idx_tup_read  | 0
idx_tup_fetch | 0
-[ RECORD 2 ]-+---------------------------------------------
relid         | 29875
indexrelid    | 31341
schemaname    | hoge_test
relname       | hoge_history
indexrelname  | hoge_event_pkey
idx_scan      | 9929
idx_tup_read  | 11393
idx_tup_fetch | 1519

TIPS:
idx_scanが"0"になっているものがインデックスを使われていないものを意味している。
これはただ単に必要が無くてインデックスを作成していないだけの可能性もある。
もし作成しているにも関わらず結果が0になっている場合にはパフォーマンスを悪くしている可能性がある。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-12-17 (木) 16:39:09 (673d)