如何解决由 HADR_FLAGS = STANDBY_RECV_BLOCKED 引起的速度下降问题?

How to resolve slow downs induced by HADR_FLAGS = STANDBY_RECV_BLOCKED?

我们的 HADR 环境中的应用程序速度严重下降。当我们 运行 db2pd -hadr:

时,我们会看到以下内容
HADR_FLAGS = STANDBY_RECV_BLOCKED
STANDBY_RECV_BUF_PERCENT = 100
STANDBY_SPOOL_PERCENT = 100

随着 STANDBY_SPOOL_PERCENT 逐渐下降,这些后来恢复了,现在看起来好多了。您能否帮助理解上述参数值的含义以及需要做什么来确保我们不会陷入这种情况?

此问题很可能是由主服务器上发生的事务量峰值触发的。备用接收缓冲区和假脱机已饱和。除非你在 SUPERASYNC 模式下 运行 配置参数 HADR_SYNCMODE,否则你可能会陷入这种情况。应用程序变慢的原因是主数据库等待备用数据库确认它已收到日志文件,但由于当时其假脱机和接收缓冲区已满,备用数据库延迟了此确认。

您可以考虑将 HADR_SYNCMODE 设置为 SUPERASYNC,但这也意味着如果主服务器出现故障,系统将更容易丢失数据。要管理这些临时高峰,您可以进行以下任一配置更改:

  • 增加备用数据库上日志接收缓冲区的大小 通过修改 DB2_HADR_BUF_SIZE 注册表的值 多变的。
  • 通过设置在备用数据库上启用日志假脱机 HADR_SPOOL_LIMIT

详情请参考HADR Performance Guide