我的 postgresql 9.5 日志每分钟都会显示以下消息:
使用过时的统计信息而不是当前的统计信息,因为统计信息收集器没有响应
除了关于 serverfault 的帖子没有帮助并且似乎与备用数据库设置有关(这不是我的情况),我找不到任何可以解决这个问题的方法。
这个东西的意思是什么?我该如何解决?
基于 Greda 回复的附加信息:
- 我有 4 个 CPU,并且在日常工作中使用了不到 5% 的 1 个 CPU
- 我有 32Gb RAM,并且在日常使用 ~ 500Mb
- 这不是虚拟机
- 这运行 Ubuntu 14.04.3 LTS/Linux 3.13.0 SMB x86/64
我还尝试如下调整 postgresql.conf 参数
- 共享缓冲区:1024MB
- 工作内存:10MB
- 维护工作内存:1024MB
- 有效缓存大小:4GB
错误消息仍然存在。
PS:我完全理解这不是一个严重的错误,但它会淹没我的日志,我害怕看不到重要的消息......
一些额外的观察:
VACUUM FULL VERBOSE ANALYZE
没有帮助- 我有一个连接到数据库的永无止境的进程。当它运行时,
VACUUM FULL VERBOSE ANALYZE
似乎被阻塞了。
这个永无止境的过程会是我问题的根本原因吗?在这种情况下,由于我需要运行该进程,我是否必须在服务器上进行一些调整?
编辑:
我有一个连接到数据库的永无止境的进程。我试图阻止它,但它没有帮助。
我的 postgresql.conf 文件在那里可用
这基本上意味着您的(虚拟?)机器太慢或过载,因为统计收集器后台任务被饿死了。默认情况下它以较低的优先级运行,因为您不希望它破坏正常的数据库操作(太多)。
如果您负担得起,请添加更多 CPU 并确保您有足够的 RAM。
不过从技术上讲,这不是一个严重的错误——您的查询将运行,但可能使用的执行计划不是最优的,因为他们有一段时间没有看到表统计信息的更新。
如果您愿意,您始终可以通过对最常更改的表运行 ANALYZE 或 VACUUM ANALYZE 语句来强制更新这些表的统计信息。
为了在找到解决方案之前暂时缓解问题,您是否尝试过在问题发生时向服务器发送 SIGHUP?
我在完全不同的情况下遇到了类似的问题:数据库与 Apache 和专有机器控制软件一起在 Windows 桌面 PC 上运行。我的案例属于“慢速或超载”类别。但是,即使在机器空闲的晚上,我也看到这种情况发生。我一直在使用 PRTG 监视许多系统参数,试图找到与特定活动的链接,但我只能看到后果,而不是原因。
我不认为这是一个简单的警告,因为一旦开始,通常需要 100 毫秒的查询将开始需要 10 秒(但仍然不影响其他查询)。此外,它一直保持这种状态,直到我发送 SIGHUP(pg_ctl.exe reload ...),我认为这很奇怪,因为一旦不再饥饿,进程应该恢复。
PS请不要向我介绍Windows桌面部分:我知道,并且......情况。
升级到 9.5.2.1 ( http://apt.postgresql.org/pub/repos/apt/ ) 时消失,但在服务器重启后又回来了。
好像是安装过程中服务重启的原因
解决方法是重新启动服务。
已结束的问题
当我在服务器上禁用 IPv6 而不重新启动 Postgres 时,这发生在我身上。我在这里遇到了详细的解释(在页面中搜索“统计收集器”),但简而言之:
如果它选择的套接字是 IPv6 并且后来被禁用,它就会停止工作,并且您会在日志中看到该消息。
您可以检查“postmaster”(或“postgres”)服务绑定到哪个 IP 和 UDP 端口
输出是这样的:
或在绑定到 IPv6(“udp6”)的另一台主机上:
按照接受的答案中的建议重新启动 postgres 确实可以解决它。