如何优化 postgresql81 以适应 hug 查询而不是复杂查询?

如何优化 postgresql81 以适应 hug 查询而不是复杂查询?

我有一个查询,在服务器上执行需要 15 秒。服务器是双至强 5130 (2GHz),配有 2GB RAM 和 160GB scsi 硬盘(RAID)。数据库是 Debian 4 etch 上的 PostgreSQL 8.1。

此查询由 ERP(openerp)执行,因此我无法更改或修改它。我可以根据需要对其进行测试,可以根据需要重现很长时间,我在日志文件中得到了它并将案例重现到 pgadmin 中。

复制/粘贴到 txt 文件中,简单查询需要存储 170Kb(仅文本查询)。

在执行过程中,linux(通过‘top’命令行)告诉我postgres使用了99-100%的CPU,但只使用了6%的RAM。

那么,我怎样才能提高 postgres 的性能以节省此查询执行的时间。某处的参数?在 Postgres 中?在 linux 中?

查询如下:

SELECT
    id
FROM
    sale_order_line
WHERE
    (state IN ('confirmed', 'confirmed_wait', 'manquant'))
    AND
    (id IN (27405, 27399, 16583, 27395, XXX))
ORDER BY 
    id DESC LIMIT 50;

[用 20000 个 id 的列表替换 XXX!]

是的,这是一个庞大的查询,但并不复杂,实际上非常简单。

谢谢你的帮助。我搜索了很长时间(已经 2 周了...)

答案1

这里需要采取一些步骤:

  • 优化 PostgreSQL 配置,以便它使用正确数量的系统资源(请参阅本文我曾为一位前雇主写过关于这方面的全套建议);
  • 您需要优化数据库架构(具体来说,是其中的索引),以使数据库尽可能高效地运行。为此,请参阅这篇关于查询调优的文章这是我以前工作中的一位同事写的。它涵盖了 MySQL 和 PostgreSQL,但只要了解相关的部分,您就能找到最终的解决方案。

相关内容