[pgsql-jp: 36599] dbmirror 内の delete に非常に時間がかかる

t-sasaki @ ep.jp.nec.com t-sasaki @ ep.jp.nec.com
2006年 1月 5日 (木) 18:24:44 JST


はじめまして。佐々木と申します。

postgresql 7.4.8 の環境で dbmirror を用いてレプリケートを
行っていますが、dbmirror の中で行っている delete 文で非常に
時間がかかっており、その原因調査方法などご教授頂けますでしょうか。

postgresql.log には下記が出力され、それから13分かかっている
ことが分かります。
… duration: 796883.108 ms  statement: DELETE FROM "Pending" WHERE "XID"=14576884 AND (SELECT COUNT(*) FROM "MirroredTransaction" WHERE "XID"=14576884)=(SELECT COUNT(*) FROM "MirrorHost")

同一スペックの別サーバにて同じようなのデータを作成し、同じような
delete 文を実行したところ、10秒程度で完了しました。

そこで、この13分も時間がかかっている環境がおかしいと思うのですが、
何が原因なのかを確認する方法などご教授下さい。
# dbmirror というより、PostgreSQL 自身のどこかがおかしいのでは
   ないかと思っています。

因みに、関連する表の定義, 件数などは下記になります。
削除される前に "Pending" テーブルの "XID" 14576884 の件数を
確認したところ、10,000件程度でした。"Pending" テーブル内の
全て件数は約150,000件程度です。

# \d "Pending"
                                    Table "public.Pending"
  Column   |       Type        |                          Modifiers
-----------+-------------------+--------------------------------------------------------------
 SeqId     | integer           | not null default nextval('public."Pending_SeqId_seq"'::text)
 TableName | character varying | not null
 Op        | character(1)      |
 XID       | integer           | not null
Indexes:
    "Pending_pkey" primary key, btree ("SeqId")
    "Pending_XID_Index" btree ("XID")

また、外部キーが設定してある関連テーブルは下記であり、こちらの
件数も "Pending" テーブルと同じ約150,000件です。

# \d "PendingData"
       Table "public.PendingData"
 Column |       Type        | Modifiers
--------+-------------------+-----------
 SeqId  | integer           | not null
 IsKey  | boolean           | not null
 Data   | character varying |
Indexes:
    "PendingData_pkey" primary key, btree ("SeqId", "IsKey")
Foreign-key constraints:
    "$1" FOREIGN KEY ("SeqId") REFERENCES "Pending"("SeqId") ON UPDATE CASCADE ON DELETE CASCADE

-- 
Sasaki Takahiko <sasaki-s15 @ mvj.biglobe.ne.jp>




pgsql-jp メーリングリストの案内