0

对于 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拒绝它?我如何测试/查看内存驱动器是否实际被使用?

保罗

4

2 回答 2

0

该博客中给出的建议非常糟糕。不要那样做。如果您的数据库中有其他您关心的东西,这不仅不安全,而且它也不会解决 WAL 和 fsync 成本,因此它甚至不会那么快。

ramdisk 对现代虚拟内存系统几乎没有好处。你最好像往常一样使用 postgres,并关闭持久性保护以进行测试。

有关这方面的提示,请参阅优化 PostgreSQL 以进行快速测试。

如果您出于某种原因必须使用 ramdisk / tempfs,initdb则在启动系统时会出现一个全新的 postgres 实例。你会得到更好的结果,而且更安全。

于 2017-07-26T15:02:52.707 回答
0

谢谢你的链接。

我真的不需要 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/驱动程序问题?

保罗

于 2017-07-27T11:02:49.563 回答