Есть не самый мощный компьютер под GNU/Linux с Intel i7-4790K, двумя винтами sata 10000 rpm. На нем PostgreSQL 9.4rc1. Машина вообще ничем не загружена.
Создаем таблицу:
CREATE TABLE test_update (id BIGSERIAL NOT NULL, c BIGINT NOT NULL, PRIMARY KEY(id));
INSERT INTO test_update (c) VALUES (0);
VACUUM FULL ANALYZE test_update;
Запускаем скрипт:
#!/bin/bash
echo -n > test.sql;
for (( i=0; i < 10000; i++));
do
echo "UPDATE test_update SET c=c+1 WHERE id=1;" >> test.sql;
done
Запускаем тест:
$ time (psql --host="${SQL_HOST}" --port="${SQL_PORT}" --dbname="${SQL_DATABASE}" --username="${SQL_LOGIN}" -w -f test.sql > /dev/null)
real 1m1.441s
user 0m0.440s
sys 0m0.192s
В iotop postgres не поднимается выше 1341.77 K/s, при том что например dd if=/dev/zero of=trash bs=4096 дает 162.84 M/s
hdparm в тесте показывает 170.90 MB/sec
Тот же тест но при fsync = off отрабатывает за полсекунды. Но это не решение.
Вопрос: подскажите пожалуйста как ускорить UPDATE в Postgres?
Перемещено maxcom из talks