Не видно увеличения производительности при запуске 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, когда вы запускаете свою систему. Вы получите лучшие результаты, и это безопаснее.

Другие вопросы по тегам