【问题标题】:postgres stats on the new primary新主节点上的 postgres 统计信息
【发布时间】:2020-07-28 00:09:07
【问题描述】:

我有一个带主备的 RDS PostgreSQL v11.6。在主节点上,vacuum/analyze 正在运行,并且 pg_stat_all_tables 的 last_vacuum/analyze/autovacuum/autoanalyze 在运行 Vacuum/analyze 时具有值。

  1. 发生了切换到备用的情况,现在当我看到 pg_stat_all_tables(在之前备用的活动主数据库上)时,最后一个真空/分析列都是空的。主备复制不会复制系统表吗?这是它的行为方式吗?

  2. 在新的主数据库上,表是否会有关于它们的统计信息? (我确实在新备用数据库上看到了表的 pg_stats 条目),它们是否可靠,或者我需要在故障转移/切换到备用数据库后收集统计信息并运行 Vacuum?

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    pg_stat_all_tables 不是一个普通的表,它是一个视图。大多数视图基于函数,并且这些函数与统计信息收集器交互。统计信息收集器使用自己的文件,而不是普通的数据库表来存储。该数据不会被复制,因此在故障转移时会丢失。

    升级服务器上的新活动将增加活动计数器,最终这些将导致 autovac 启动。如果一个表“即将”在主服务器上被清理或分析,它将丢失该知识并从零。因此,在 autovac/analyze 启动之间,表格的时间可能会增加两倍。这通常不足以导致严重的问题,但如果您的系统从“接近边缘”开始运行,则可能会出现问题。

    pg_stats 是 pg_statisic 的一个视图,它是一个普通的表。其中的数据就像其他表一样被复制。这样数据就不会丢失。由于如上所述活动计数器会丢失,因此在刷新之前,统计信息可能会比平时更过时。

    未复制可用空间映射。因此,如果您的表在新行可以进入的中间有可用空间,则在故障转移后完成第一次清理以重建映射之前,不会使用该空间。如果您依靠此空间重用来防止出现不可接受的膨胀,那么这可能足以在故障转移后进行系统范围的清理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 2011-02-02
      • 2012-01-19
      • 2011-10-17
      • 2015-01-27
      • 1970-01-01
      相关资源
      最近更新 更多