我有一个查询在服务器上执行需要15s。 服务器是bi-xeon 5130(2GHz),内置2GB内存和160GB scsi硬盘。 数据库是Debian 4 etch上的PostgreSQL 8.1。
这个查询是由一个ERP(openerp)执行的,所以我不能改变或修改它。 我可以testing它,因为我想要的,我可以重现很长一段时间,因为我想,我把它在日志文件中,并重现案件成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;
[将XXXreplace为20000的ID列表! ]
是的,这是一个怪物查询,但不是一个复杂的,其实很简单。
感谢帮助。 我search了很长时间(2周已经…)
有几个步骤可以采取: