@c-darwin

Как ускорить update в postgresql?

CREATE SEQUENCE ds_citizens_citizen_id_seq START WITH 1;
CREATE TABLE "ds_citizens" (
"citizen_id" bigint NOT NULL default nextval('ds_citizens_citizen_id_seq'),
"amount" decimal(30) NOT NULL DEFAULT '0'
);
ALTER SEQUENCE ds_citizens_citizen_id_seq owned by ds_citizens.citizen_id;
ALTER TABLE ONLY "ds_citizens" ADD CONSTRAINT ds_citizens_pkey PRIMARY KEY (citizen_id);

Вставляю 100к строк ~ 50 секунд.
В цикле делаю
UPDATE ds_citizens SET amount=$1 WHERE citizen_id=$2
56 секунд
Проц занимает на 12-15% все 4 ядра по чуть-чуть, диск почти не трогает, памяти много, своп не юзает.
ОС: Ubuntu 64bit, postgresql 9.4
fsync = off
synchronous_commit = off
full_page_writes = off
Подскажите, пожалуйста, как можно ускорить update?

udp
Если через тр-ии, то 20 сек.
Тоже самое в sqlite3 - 1 сек :)
  • Вопрос задан
  • 1285 просмотров
Пригласить эксперта
Ответы на вопрос 1
BuriK666
@BuriK666
Компьютерный псих
Укажите fillfactor для таблицы около 70 (или меньше).
Делайте update пачками в транзакциях.

И сделайте индекс по citizen_id (я так понимаю это должен быть primary key)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы