当数据库中存在大量数据时,Odoo变慢的原因

Emi*_*td. 5 database postgresql performance odoo

我们在Postgresql中发现了一个问题,因为它不使用多核CPU进行单个查询.例如,我在cpu中有8个核心.我们在stock.move表中有4000万条目.当我们在单个数据库连接中应用大量查询以在后端生成报告和观察时,我们看到只有一个核心被100%使用,其中所有其他核心都是免费的.由于查询执行时间过长,我们的odoo系统变慢.而问题出在postgresql核心内部.无论如何,我们可以在两个或更多内核之间共享查询,而不是在postgresql查询执行中获得性能提升.

我相信通过解决并行查询执行,我们可以更快地使Odoo性能.任何人都对此有任何建议?

-----------*编辑这个问题,向你展示Postgresql核心委员会的回答*---------

在这里,我发布了我从Postgresql数据库的顶级贡献者之一得到的答案.(我希望这些信息有用)

你好Hiren,

预计会有所表现.PostgreSQL不支持单个查询的并行CPU.这个主题正在高度发展,可能这个功能将在2016年9月9日〜2016年9月计划发布.但是40M行的表不是太大,所以可能更多的CPU不应该对你有所帮助(启动时会有一些开销)并处理多CPU查询).你必须使用一些常见的技巧,如物化视图,预览,......这些技巧的主要思想 - 不要试图重复经常相同的计算.检查PostgreSQL的健康状况 - 索引,真空处理,统计,...检查hw - IO的速度.检查PostgreSQL配置 - shared_buffers,work_mem.由于估计错误,某些查询可能会很慢 - 请查看慢速查询的解释.有些工具可以将一些查询分解为更多查询并启动并行执行,但我没有使用它.https://launchpad.net/stado http://www.pgpool.net/docs/latest/tutorial-en.html#parallel

关心Pavel Stehule

Dav*_*dge 2

好吧,我想你已经有了答案——PostgreSQL 目前还不支持并行查询。关于性能的一般建议非常恰当,您也可以考虑分区,这可能允许您截断分区,而不是删除表的部分内容或增加内存分配。如果不了解有关查询的更多信息,就不可能就此给出好的建议。

由于在非并行查询 Oracle 系统上遇到过此类问题,我建议您还考虑一下您正在使用的硬件。

现代 CPU 的趋势是拥有非常多的内核,这对于 Web 服务器或其他具有许多短期事务的多进程系统来说是一个很大的帮助,但您的数据处理系统却只有很少的大型事务。您需要正确的硬件来支持它。具有更少、更强大的内核的 CPU 是更好的选择,并且您必须注意内存和存储的带宽。

这就是工程系统在大数据和数据仓库中流行的原因。