Я перехожу на PostgreSQL с SQLite для типичного приложения Rails.
Проблема в том, что выполнение спецификаций стало медленным с PG.
На SQLite это заняло ~ 34 секунды, на PG это ~ 76 секунд, что более чем в 2 раза медленнее .
Итак, теперь я хочу применить некоторые методы, чтобы привести производительность спецификаций к уровню SQLite без каких-либо изменений кода (в идеале, просто установив параметры подключения, что, вероятно, невозможно).
Пара очевидных вещей, которые мне приходят в голову:
Как вы, возможно, поняли, меня не волнует надежность и все остальное (здесь БД - это просто пустяковая штука).
Мне нужно получить максимальную отдачу от PG и сделать его настолько быстрым, насколько это возможно .
Лучший ответ в идеале описал бы уловок для этого, настройку и недостатки этих уловок.
ОБНОВЛЕНИЕ: fsync = off
+ full_page_writes = off
только уменьшило время до ~ 65 секунд (~ -16 секунд). Хороший старт, но далеко от цели 34.
ОБНОВЛЕНИЕ 2: Я пытался использовать RAM-диск , но прирост производительности был в пределах погрешности.Так что, похоже, оно того не стоит.
ОБНОВЛЕНИЕ 3: * Я обнаружил самое большое узкое место, и теперь мои спецификации работают так же быстро, как и SQLite.
Проблема заключалась в очистке базы данных, которая приводила к усечению . По-видимому, SQLite там слишком быстр.
Чтобы «исправить» это, я открываю транзакцию перед каждым тестом и откатываю ее в конце.
Некоторые цифры для ~ 700 тестов.
Увеличение скорости SQLite в 2 раза. Увеличение скорости в 4 раза для PG.