Re: [pgsql-ru-general] Чистка таблиц - Mailing list pgsql-ru-general

From Dmitriy Igrishin
Subject Re: [pgsql-ru-general] Чистка таблиц
Date
Msg-id CAAfz9KPN1fXAPW76RD4Qx86vPLdxBL_46wb=_BUzQRkhBfELvA@mail.gmail.com
Whole thread Raw
Responses Re: Re: [pgsql-ru-general] Чистка таблиц  ("Dmitry E. Oboukhov" <unera@debian.org>)
List pgsql-ru-general
С Рождеством !

7 января 2012 г. 3:04 пользователь Dmitry E. Oboukhov <unera@debian.org> написал:
Имеются таблицы

 |t1_id|...|
 |t2_id|t1_id|...|
 |t3_id|...|
 |t4_id|t1_id|t3_id|...|

То есть таблички с форейгнами.

Объявлены столбики связей так:

t1_id INTEGE REFERENCES t1 (t1_id) ON DELETE CASCADE ON UPDATE
CASCADE;


в одной из таблиц ON DELETE SET NULL;

Ну и значит в таблице

t1 ~ 2.5 млн записей
t2 ~ 0.5 млн записей
t3 - 10 записей
t4 ~ 1 млн записей

теперь удаляем

DELETE FROM t1 WHERE id = 2919364;

запрос выполняется немерянное количество времени.

План показывает примерно такой:

                                      QUERY PLAN
----------------------------------------------------------------------------------------
 Delete on t1  (cost=0.00..8.59 rows=1 width=6)
  ->  Index Scan using t1_pkey on t1  (cost=0.00..8.59 rows=1 width=6)
        Index Cond: (id = 2919364)
(3 rows)

Памяти на инстансе мало. да. 1Гиг всего. Таблицы занимают примерно 2.5 Гиг.

Получается что добавление записей в эти таблицы (это таблицы с логами)
работает  без задержек. А удаление записей - примерно одна в три
минуты. Причем удаление по PRIMARY KEY.

Вопрос что можно сделать/посмотреть/переделать, чтобы можно было
нормально чистить логи в такой таблице?
Можно попробовать принцип "разделяй и властвуй" -
воспользоваться разбиением дочерних таблиц (t2 и t4),
например, по диапазонам значений их внешних ключей
(t1 и t3), как рассказывается здесь:
http://www.postgresql.org/docs/9.1/static/ddl-partitioning.html
 
--
// Dmitriy.


pgsql-ru-general by date:

Previous
From: "Dmitry E. Oboukhov"
Date:
Subject: Таблицы с взаимными связями
Next
From: "Dmitry E. Oboukhov"
Date:
Subject: Re: Re: [pgsql-ru-general] Чистка таблиц