知识卡片

人为制造延迟、测追赶速度,来估算备库容量余量

普通读书笔记卡

内容

判断一台备库距离”追不上主库”还有多少余量,是一个不容易直接测量的问题 ——只看当前”延迟为0”这个状态本身看不出容量利用率是5%还是95%。书中 给出一个思路简单但很实用的诊断技巧:主动制造一段延迟,再观察备库需要 多久才能追平,用追赶速度反推容量余量。具体做法是暂停复制一段已知的 时间(比如1小时),再重新开启,观察备库把这1小时积压的变更全部重放 完实际花了多久:如果备库能在1小时内追平(相当于把2小时的主库变更量 压缩进1小时处理完),说明正常情况下备库大约只用了一半的处理能力,还有 明显余量;如果追平耗时接近甚至超过被暂停的时长,说明备库已经接近或 达到容量上限,正常运行时就没有多少缓冲空间去消化突发的负载尖峰。这个 方法的价值在于把一个抽象的”容量利用率”问题,转换成一个可以直接测量、 不依赖内部统计指标的”倍速追赶实验”:与其去猜测各种内部计数器的含义, 不如直接制造一个已知大小的负载缺口、测量系统清空这个缺口的实际速度, 这个思路本身可以迁移到任何”异步补齐积压”的系统上(不只是数据库复制), 判断一个消费者相对生产者到底还有多少处理余量。作为交叉验证,如果 使用支持INFORMATION_SCHEMA.USER_STATISTICS的分支版本(Percona Server/MariaDB),还可以直接用复制线程的BUSY_TIMECONNECTED_TIME 的比例算出一个近似的容量利用率数字,作为这个实验结论的补充佐证。

参考来源

- 位置:《高性能MySQL:第3版》第10章"复制"10.5.2节"备库什么时候开始 延迟"(源文件:_epub-src/OEBPS/Text/part0017.xhtml) - 结论依据:原文明确"为了预测在将来的某个时间点会发生什么,可以人为 地制造延迟,然后看多久备库能赶上主库……如果中午12:00停止备库复制, 在1:00开启,并且在2:00追赶上,备库在一小时内完成了两个小时内所有的 变更,说明复制可以在双倍速度下运行",直接给出这个主动制造延迟、测 追赶速度来估算容量余量的具体方法和计算逻辑。 - 原始内容:为了预测在将来的某个时间点会发生什么,可以人为地制造 延迟,然后看多久备库能赶上主库……如果将备库停止一个小时,然后开启 并在1小时内追赶上,说明正常情况下只消耗了一半的容量。