gpt4 book ai didi

django - 从 ORM 加速数据库插入

转载 作者:行者123 更新时间:2023-11-29 11:53:29 24 4
gpt4 key购买 nike

我有一个 Django View ,它在循环中创建 500-5000 个新数据库插入。问题是,它真的很慢!我在 Postgres 8.3 上每分钟大约有 100 个插入。我们曾经在较小的硬件(较小的 EC2 实例)上使用 MySQL,并且从未遇到过这些类型的速度问题。

详细信息:Ubuntu 服务器 9.04 上的 Postgres 8.3。服务器是一个“大型”Amazon EC2,数据库位于 EBS (ext3) - 11GB/20GB。

这是我的一些 postgresql.conf -- 如果您需要更多,请告诉我

shared_buffers = 4000MB
effective_cache_size = 7128MB

我的 python :

for k in kw:
k = k.lower()
p = ProfileKeyword(profile=self)
logging.debug(k)
p.keyword, created = Keyword.objects.get_or_create(keyword=k, defaults={'keyword':k,})
if not created and ProfileKeyword.objects.filter(profile=self, keyword=p.keyword).count():
#checking created is just a small optimization to save some database hits on new keywords
pass #duplicate entry
else:
p.save()

顶部的一些输出:

top - 16:56:22 up 21 days, 20:55,  4 users,  load average: 0.99, 1.01, 0.94
Tasks: 68 total, 1 running, 67 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.8%us, 0.2%sy, 0.0%ni, 90.5%id, 0.7%wa, 0.0%hi, 0.0%si, 2.8%st
Mem: 15736360k total, 12527788k used, 3208572k free, 332188k buffers
Swap: 0k total, 0k used, 0k free, 11322048k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14767 postgres 25 0 4164m 117m 114m S 22 0.8 2:52.00 postgres
1 root 20 0 4024 700 592 S 0 0.0 0:01.09 init
2 root RT 0 0 0 0 S 0 0.0 0:11.76 migration/0
3 root 34 19 0 0 0 S 0 0.0 0:00.00 ksoftirqd/0
4 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/0
5 root 10 -5 0 0 0 S 0 0.0 0:00.08 events/0
6 root 11 -5 0 0 0 S 0 0.0 0:00.00 khelper
7 root 10 -5 0 0 0 S 0 0.0 0:00.00 kthread
9 root 10 -5 0 0 0 S 0 0.0 0:00.00 xenwatch
10 root 10 -5 0 0 0 S 0 0.0 0:00.00 xenbus
18 root RT -5 0 0 0 S 0 0.0 0:11.84 migration/1
19 root 34 19 0 0 0 S 0 0.0 0:00.01 ksoftirqd/1

如果任何其他详细信息有帮助,请告诉我。

最佳答案

像这样的批量操作缓慢的一个常见原因是每个插入都发生在它自己的事务中。如果您可以在一次交易中完成所有这些操作,速度可能会快得多。

关于django - 从 ORM 加速数据库插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1400776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com