Не видно увеличения производительности при запуске django test /w postgresql на ramdrive
Для проекта django тесты выполняются все медленнее и медленнее по мере роста моделей и количества миграций. Единственный юнит-тест, который я рассчитал на 200 с.
Я следил за этим постом: http://tech.marksblogg.com/test-django-on-ram-drive.html работать на ramdrive только для тестирования, но, как ни странно, я не вижу никаких улучшений.... Так что я ожидаю, что что-то идет не так, как должно...
Я отладил некоторые из них и увидел, что операторы TABLESPACE генерируются для postgres, например:
... CREATE TABLE ""django_content_type"" (""id"" serial NOT NULL PRIMARY KEY USING INDEX TABLESPACE ""ram_disk"", ""name"" varchar(100) NOT NULL, ""app_label"" varchar(100) NOT NULL, ""model"" varchar(100) NOT NULL) TABLESPACE ""ram_disk""",,,,,,,,,"
Может быть, postgresql отвергает это? И как я могу проверить / посмотреть, действительно ли используется оперативная память?
Павел
2 ответа
Спасибо за эту ссылку.
Мне действительно не нужен ramdrive, я просто жажду увеличения производительности при выполнении моих тестов.
Отключение fsync=off и full_page_writes не сильно влияет на производительность:
python manage.py test -v3 --noinput 192,49s пользователь 0,69s система 92% ЦП 3:28,44 всего
против
python manage.py test -v3 --noinput 200,73s пользователь 0,71s система 94% процессор 3:32,38 всего
Я думаю, что на самом деле это мой драйвер ssd, который, кажется, становится все медленнее и медленнее? В посте о ramdrive есть простая проверка производительности, когда я запускаю свой ssd:
dd if=/dev/zero \
of=/tmp/benchmark \
conv=fdatasync \
bs=4k \
count=100000 \
&& rm -f /tmp/benchmark
Скопировано 409600000 байт (410 МБ), 11,6737 с, 35,1 МБ / с
по сравнению с тем же тестом против водителя оперативной памяти:
Скопировано 409600000 байт (410 МБ), 0,16099 с, 2,5 ГБ / с
На самом деле я ожидаю более 35 МБ / с....
Может также быть проблема с Ubuntu/ драйвером?
Павел
Совет, данный в этом блоге, довольно плохой. Не делай этого. Мало того, что это небезопасно, если в вашей базе данных есть что-то еще, что вас волнует, но это также не приведет к затратам WAL и fsync, так что это даже не будет намного быстрее.
Виртуальный диск предлагает мало или совсем не выгодно в современной системе виртуальной памяти. Вам лучше просто использовать postgres как обычно, с защитой долговечности, отключенной в целях тестирования.
См. Оптимизация PostgreSQL для быстрого тестирования для подсказок по этому вопросу.
Если по какой-то причине вы должны использовать ramdisk / tempfs, initdb
совершенно новый экземпляр postgres, когда вы запускаете свою систему. Вы получите лучшие результаты, и это безопаснее.