我们有一个安装了32位PostgreSQL 9.1的Windows Server 2012,任务管理器显示了几个名为“ PostgreSQL服务器(32位)”的“进程”,这些进程占用大量CPU(有时占99%)。一段时间后,此类PostgreSQL进程的CPU使用率显示为0%,并占用了一些内存,但仍保留在任务管理器中。
这到底是什么意思?
服务器运行一个网站(在IIS 8上),访问者主要通过连接来获取(SELECT)数据。几个用户(3个管理员用户)连接到数据库以执行所有CRUD操作。
最好的问候, 豪尔赫·马尔多纳多(Jorge Maldonado)
答案 0 :(得分:0)
每次连接发生后,PostgreSQL都会分叉他的主要进程。这就是为什么您可以获得很多postgresql进程的原因。
现在,根据在那些连接上运行的查询,它可以使用大量的CPU和/或内存。
我猜您还在应用程序中使用了一个池,这意味着当用户完成其进程时,连接将返回到池,而PostgreSQL进程将不执行任何操作,直到该池终止该连接或该连接被重用为止。另一个用户。
如果启用了一些日志(连接日志,如果响应时间大于一定数量则查询日志,临时文件使用情况,锁定等),以后可以运行诸如pgbadger(example here)之类的报告来检查是否查询速度太慢或使用了太多内存(最差的是临时文件)