【发布时间】:2010-10-01 02:14:24
【问题描述】:
我正在调查一个 PostgreSQL 支持的应用程序。
在配备 4GB RAM 的现代 Xeon 上,CPU 使用率始终超过 50%。在这 50% 的 CPU 利用率中,67% 是“用户”,33% 是“系统”(这是一台 Linux 机器)。系统根本没有等待 I/O。
我想知道如何才能看到这个 CPU 时间是如何分解的。
据我所知,查询大多是临时 SQL(没有准备好的语句)。
您认为转移到准备好的语句可以显着减少此用户 CPU 时间吗?即 SQL 解析时间、查询计划时间等是否会占用这么多 CPU?有些查询非常粗略(500-1000 个字符以上。)
谁能确认 PostgreSQL 是否自动规范化即席查询并为它们缓存查询计划,实际上使它们与准备好的语句一样高效(加上 SQL 解析时间)?
我可能会实现一些更高级别的缓存来解决这个问题,但我很想知道是否有人认为值得将此应用程序移动到准备好的语句中。
【问题讨论】:
-
你使用的是什么版本的 PostgreSQL?
-
它是 8.1.4,尽管该项目的一部分是将其升级到 8.3.5
-
您的连接建立/断开率是多少?如果在很多情况下,数据库 CPU 使用率高是由于在同时查询率非常高的环境中每个查询都有自己的短期连接。
标签: postgresql