Postgres持续30%的CPU使用率

Jam*_*mes 8 windows postgresql centos database-migration

我最近将Postgres数据库从Windows迁移到CentOS 6.7.在Windows上,数据库从未使用过多CPU,但在Linux上我看到它使用的是常量~30%的CPU(使用top).(4芯机上)

任何人都知道这是正常的,还是为什么会这样做?该应用程序似乎运行良好,并且比Windows快或快.

注意,它是一个大数据库,100gb +数据,1000多个数据库.

我尝试使用Pgadmin监视服务器状态,但服务器状态挂起,无法运行,错误"log_filename参数必须相等"

mne*_*cia 6

对于 1000 个数据库,我预计真空工作人员和统计收集器会花费大量时间检查哪些内容需要维护。

我建议你做两件事

  • 提高autovacuum_naptime参数以减少检查频率
  • 将其放在stats_temp_directoryramdisk 上

您可能还设置了一个较高的max_connections限制,以允许您的客户端使用大量数据库,这是 CPU 负载的另一个可能来源,因为每次后端必须与其他后端同步时都要检查大量“槽” 。


Som*_*luk 0

增加服务器负载可能有多种原因。

  1. 如果您正在寻找服务器上的查询级别负载,那么您应该使用 pg_stat_activity 系统表将特定的 Postgres 后端 ID 与系统进程 ID 进行匹配。

从 pg_stat_activity 中选择 pid、数据名、用户名、查询;

一旦您知道正在运行哪些查询,您就可以进一步调查(EXPLAIN/EXPLAIN ANALYZE;检查锁等)

  1. 您可能会遇到锁争用问题,可能是由于max_connections非常高。如果是这种情况,请考虑降低 max_connections 并使用连接池。但这可能会增加客户连接的周转时间。

  2. 可能是 Windows 系统阻止连接并不允许使用系统。现在,Linus 允许其连接使用 CPU 并执行得更快。:P

还值得一读:

  1. 如何监控 PostgreSQL
  2. 从 Postgres 监控 CPU 和内存使用情况