在 ramdrive 上运行 django test /w postgresql 没有看到性能提升
Posted
技术标签:
【中文标题】在 ramdrive 上运行 django test /w postgresql 没有看到性能提升【英文标题】:Not seeing performance increase running django test /w postgresql on ramdrive 【发布时间】:2017-07-26 13:56:23 【问题描述】:对于 django 项目,随着模型的增长和迁移次数的增加,测试的运行速度越来越慢。我现在计时的单个单元测试时间为 200 秒。
我关注了这篇文章:http://tech.marksblogg.com/test-django-on-ram-drive.html 只为测试而在 ramdrive 上工作,但奇怪的是我没有看到任何改进......所以我预计事情不会像它应该的那样......
我已经调试了一些,并且确实看到了针对 postgres 生成的 TABLESPACE 语句,例如:
... 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拒绝了?我如何测试/查看内存驱动器是否实际被使用?
保罗
【问题讨论】:
你检查过 Postgres 查询日志吗? 该博客中给出的建议非常可怕。不要那样做。见***.com/q/9407442/398670 【参考方案1】:该博客中给出的建议非常糟糕。不要那样做。如果您的数据库中还有其他您关心的内容,这不仅不安全,而且它也不会解决 WAL 和 fsync 成本,因此它甚至不会那么快。
ramdisk 对现代虚拟内存系统几乎没有好处。您最好还是照常使用 postgres,并关闭持久性保护以进行测试。
有关这方面的提示,请参阅 Optimise PostgreSQL for fast testing。
如果您出于某种原因必须使用 ramdisk / tempfs,initdb
在您启动系统时会在那里创建一个全新的 postgres 实例。你会得到更好的结果,而且更安全。
【讨论】:
【参考方案2】:感谢您的链接。
我真的不需要 ramdrive,我只是渴望在运行测试时提高性能。
关闭 fsync=off 和 full_page_writes 对性能影响不大:
python manage.py test -v3 --noinput 192,49s user 0,69s system 92% cpu 3:28,44 total
对比
python manage.py test -v3 --noinput 200,73s user 0,71s system 94% cpu 3:32,38 total
我认为实际上是我的 ssd 驱动程序似乎越来越慢?在关于 ramdrive 的帖子中,有一个简单的性能检查,当我在我的 ssd 上运行时:
dd if=/dev/zero \
of=/tmp/benchmark \
conv=fdatasync \
bs=4k \
count=100000 \
&& rm -f /tmp/benchmark
409600000 字节 (410 MB) 已复制,11,6737 秒,35,1 MB/秒
与针对 ram 驱动程序的相同测试:
409600000 字节 (410 MB) 已复制,0.16099 秒,2.5 GB/秒
实际上我希望超过 35MB/s....
也可能是 ubuntu/驱动程序问题?
保罗
【讨论】:
以上是关于在 ramdrive 上运行 django test /w postgresql 没有看到性能提升的主要内容,如果未能解决你的问题,请参考以下文章