[pgpool-general-jp: 848] シーケンスを含むテーブルへのINSERTが遅い
N.Ezawa
ezawa @ birds.co.jp
2010年 11月 11日 (木) 15:01:15 JST
初めまして 江沢と申します。
pgpoolII 3.0.1 をレプリケーションモードで運用しています。
replication_mode = true
load_balance_mode = true
replication_stop_on_mismatch = false
replicate_select = false
insert_lock = true
バックエンドはPostgreSQL8.4 × 2台です。
この状態で、シーケンスをデフォルト値として持つテーブルに
INSERTを行った場合、応答がとても遅く困っています。
※ seq integer not null DEFAULT nextval('シーケンス')
insert_lock = true としているので、テーブルの明示的ロック
と思っていたのですが、実際には「LOCK TABLE ...」ではなく、
「SELECT 1 FROM "テーブル"_シーケンス FOR UPDATE;」がpgpoolにより
実行されていました。
該当テーブルは約500万レコードあり、この応答がとても遅いです。
マニュアルにある、「LOCK TABLE ...」が実行されるようにするには、
何か設定が必要なのでしょうか。
ソースを確認すると、pool_process_query.c Line. 2750 あたりの
lock_kind == 2 がキーになると考えています。
/* row lock for sequence table? */
if (lock_kind == 2)
{
(... snip ...)
snprintf(qbuf, sizeof(qbuf), "SELECT 1 FROM %s FOR UPDATE", seq_rel_name);
}
else
{
/* Issue lock table command */
snprintf(qbuf, sizeof(qbuf), "LOCK TABLE %s IN SHARE ROW EXCLUSIVE
MODE", table);
}
以上、よろしくお願いします。
--
Nobutaka Ezawa
BIRDS Systems Research Institute, Inc.
mailto:ezawa @ birds.co.jp
pgpool-general-jp メーリングリストの案内