Delete very slow after deletion of many rows in dependent table

Поиск
Список
Период
Сортировка
От Cornelius Buschka
Тема Delete very slow after deletion of many rows in dependent table
Дата
Msg-id 41A09B13.5070701@arcusx.de
обсуждение исходный текст
Ответы Re: Delete very slow after deletion of many rows in  (Stephan Szabo <sszabo@megazone.bigpanda.com>)
Список pgsql-general
Hi,

we saw the following problem:

We deleted all rows from a table B referencing table A (~500000 records). No
problem, but the following try to delete all records from table A (~180000) lead
to a "never ending" statement. We found out, that vacuuming table B after delete
did the trick.

It seems to us the database has to do scan thru deleted records on B while
deleting from A. Why did it last so long? An index on B.a_fk did not lead to
imporvements. The query plan did not help.

Could anybody explain the problem to me? Does anybody know a different solution
than vacuuming the table after big deletes? (We already vaccuum the database
periodically.)

Below the statements to reproduce the problem.

Regards
Cornelius

============================================================
-- create two tables, b references a through a_fk
create table table_a ( a_pk int8 primary key );

create table table_b ( b_pk int8 primary key, a_fk int8 not null references
table_a ( a_pk ) );

-- fill a and b with 100000 records
create or replace function fill_table_a() returns int8 as '
begin
  for i in 1..100000 loop
    insert into table_a values ( i );
  end loop;
  return 1;
end' language plpgsql;

select fill_table_a();

insert into table_b ( select a_pk, a_pk from table_a );

commit;

-- delete records from b, so records from a can be also be deleted
delete from table_b;
commit;

-- delete records from a;
-- this delete needs a VERY long time
delete from table_a;


-- we do it again, but vacuum table_b first

-- delete records from b, so records from a can be also be deleted
vacuum table_b;

-- delete records from a;
delete from table_a;
commit;

--
________________________________________________________

  Cornelius Buschka

  arcus(x) GmbH
  Hein-Hoyer-Straße 75     fon: +49 (0)40.333 102 92
  D-20359 Hamburg          fax: +49 (0)40.333 102 93

  http://www.arcusx.com    c.buschka AT arcusx DOT com
________________________________________________________




В списке pgsql-general по дате отправления:

Предыдущее
От: "Net Virtual Mailing Lists"
Дата:
Сообщение: Re: Join between databases or (???)
Следующее
От: Alex Guryanow
Дата:
Сообщение: Wrong string length from unicode database in Borland's app