I try to add index to tables.
(please refer to http://sites.google.com/site/yanchengcheok/Home/question.txt)
Database is designed in the following graphical view
(please refer to http://sites.google.com/site/yanchengcheok/Home/question.png)
Here is the setting of my database. All using default except syncrhonous_commit = off.
(please refer to http://sites.google.com/site/yanchengcheok/Home/database.PNG)
My database size is as follow :
SemiconductorInspection=# \timing on
Timing is on.
SemiconductorInspection=# SELECT count(*) FROM lot;
count
-------
2
(1 row)
Time: 1.003 ms
SemiconductorInspection=# SELECT count(*) FROM unit;
count
--------
206363
(1 row)
Time: 92.766 ms
SemiconductorInspection=# SELECT count(*) FROM measurement;
count
---------
1650904
(1 row)
Time: 355.161 ms
SemiconductorInspection=#
I simply run a delete operation :
delete from lot where lot_id = 3;
It takes TWO hours and never able to return!
I even run VACUUM, with options FULL + FREEZE + ANALYZE
but it does not help at all.
Is there other optimization steps I had missed out?
Thanks and Regards
Yan Cheng CHEOK
--- On Wed, 1/13/10, Craig Ringer <craig@postnewspapers.com.au> wrote:
> From: Craig Ringer <craig@postnewspapers.com.au>
> Subject: Re: [GENERAL] Extremely Slow Cascade Delete Operation
> To: "Yan Cheng Cheok" <yccheok@yahoo.com>
> Cc: pgsql-general@postgresql.org
> Date: Wednesday, January 13, 2010, 7:01 PM
> On 13/01/2010 4:09 PM, Yan Cheng
> Cheok wrote:
> > I have 3 tables - lot, unit and measurement
> >
> > 1 lot is having relationship to many unit.
> > 1 unit is having relationship to many measurement.
> > delete cascade is being used among their relationship
> >
>
> > SemiconductorInspection=# delete from lot where lot_id
> = 2;
>
> Are there indexes on fk_lot_id and fk_unit_id ? If not, a
> DELETE from lot will cause a seqscan of unit for affected
> units, and if any must be deleted each will cause a seqscan
> of measurement for affected measurements. That's going to
> get ugly fast.
>
> --
> Craig Ringer
>
> -- Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>