我正在研究PostgreSQL支持的应用程序.
在具有4GB RAM的现代Xeon上,CPU使用率不断超过50%.在50%的CPU利用率中,67%是"用户",33%是"系统"(这是Linux机器.)系统根本不在等待I/O.
我想知道如何看待这个CPU时间如何崩溃.
我可以看到,查询主要是临时SQL(没有准备好的语句).
您是否认为通过转移到准备好的语句可以显着减少用户CPU时间?即,SQL解析时间,查询计划时间等是否会占用这么多CPU?一些查询非常粗糙(500-1000个字符加上.)
任何人都可以确认PostgreSQL是否自动规范化ad-hoc查询并为它们缓存查询计划,实际上使它们像准备语句一样高效(加上SQL解析时间)?
我可能会实现一些更高级别的缓存来解决这个问题,但我很想知道是否有人认为将这个应用程序移动到准备好的语句是值得的.
假设你经常对数据库进行VACUUM(这是PostgreSQL性能问题的标准来源),我认为赢得最佳性能的方法是
a)根据您所在的机器调整安装的性能
b)分析每个查询并找出是否可以进一步优化.
通过将查询移动到存储过程中,我真的不会想到太多.