Many thanks for the swift reply Tom, please see additional input below

/Jona


On 24 April 2014 22:29, Tom Lane <t...@sss.pgh.pa.us> wrote:

> Jonatan Evald Buus <jonatan.b...@cellpointmobile.com> writes:
> > We're currently having very poor performance for the following delete
> query.
> > DELETE FROM TopTable WHERE id IN (xx, yy, zz);
>
> > We've observed that it takes around 7 seconds under normal load to for
> each
> > row that's being from TopTable and several minutes pr deleted row under
> > heavy load.
>
> I'd really have to bet that you forgot to index one of the referencing
> tables.

*That was our first thought, so we went through the child tables to check
but apparently we missed some. (please see below for the difference in the
explain analyze output)*

>  Are any of the foreign keys multi-column?


*No, foreign keys are single column though some of the indexes (that we
presume are being used?) are multi-column, with the foreign key column
being the first field in the index.*


*I.e.CREATE INDEX message_transaction_state_idx ON log.message_tbl USING
btree (txnid, stateid);*
*where "txnid" is the foreign key column that references the TopTable.*

 If so you probably
> need a matching multi-column index, not just indexes on the individual
> referencing columns.
>
> > How do we track down the cause of the poorly performing delete query?
>
> EXPLAIN ANALYZE on a DELETE, for starters.  That would isolate whether
> it's the DELETE itself or one of the foreign-key updates, and if the
> latter which one.  It's a little bit difficult to see the exact plan being
> used for a foreign-key update query, but I think one way you could do it
> is to enable auto_explain with auto_explain.log_nested_statements turned
> on.
>

*Output from EXPLAIN ANALYZE before additional indexes were added*










*"Delete on transaction_tbl  (cost=0.00..10.89 rows=1 width=6) (actual
time=0.086..0.086 rows=0 loops=1)""  ->  Index Scan using transaction_pk on
transaction_tbl  (cost=0.00..10.89 rows=1 width=6) (actual
time=0.012..0.013 rows=1 loops=1)""        Index Cond: (id =
4614717)""Trigger for constraint address2transaction_fk on transaction_tbl:
time=0.460 calls=1""Trigger for constraint certificate2transaction_fk on
transaction_tbl: time=0.470 calls=1""Trigger for constraint msg2txn_fk on
transaction_tbl: time=0.433 calls=1""Trigger for constraint
note2transaction_fk on transaction_tbl: time=0.808 calls=1""Trigger for
constraint order2transaction_fk on transaction_tbl: time=0.535
calls=1""Trigger for constraint order2transaction_fk on transaction_tbl:
time=0.222 calls=1""Trigger for constraint certificate2order_fk on
order_tbl: time=1827.944 calls=1""Total runtime: 1830.995 ms"*

*Output from EXPLAIN ANALYZE after additional indexes were added*










*"Delete on transaction_tbl  (cost=0.00..10.89 rows=1 width=6) (actual
time=0.070..0.070 rows=0 loops=1)""  ->  Index Scan using transaction_pk on
transaction_tbl  (cost=0.00..10.89 rows=1 width=6) (actual
time=0.022..0.023 rows=1 loops=1)""        Index Cond: (id =
4614669)""Trigger for constraint address2transaction_fk on transaction_tbl:
time=0.113 calls=1""Trigger for constraint certificate2transaction_fk on
transaction_tbl: time=0.424 calls=1""Trigger for constraint msg2txn_fk on
transaction_tbl: time=2.614 calls=1""Trigger for constraint
note2transaction_fk on transaction_tbl: time=0.350 calls=1""Trigger for
constraint order2transaction_fk on transaction_tbl: time=0.231
calls=1""Trigger for constraint order2transaction_fk on transaction_tbl:
time=0.088 calls=1""Trigger for constraint certificate2order_fk on
order_tbl: time=0.165 calls=1""Total runtime: 4.097 ms"*

Why is "order2transaction_fk" being triggered twice? Is that because
there're two affected rows?



>
>                         regards, tom lane
>



-- 
JONATAN EVALD BUUS

CTO

Mobile US  +1 (305) 331-5242
Mobile DK  +45 2888 2861
Telephone  +1 (305) 777-0392
Fax.          +1 (305) 777-0449
jonatan.b...@cellpointmobile.com
www.cellpointmobile.com

CellPoint Mobile Inc.
4000 Ponce de Leon Boulevard
Suite 470
Coral Gables, FL 33146
USA

'Mobilizing the Enterprise'

Reply via email to