知识卡片
测量范围必须精确匹配目标活动,而非笼统测整个服务器
内容
“无法测量就无法有效地优化”这条原则听起来是常识,但真正容易 出错的地方不是”要不要测量”,而是”测量的范围对不对”。一种 常见的错误做法是:发现有慢查询,然后转身去排查整个服务器的 运行状态,试图从服务器层面的全局数据里找线索。这个做法犯的 错误是测量对象和优化目标不匹配——如果确认问题出在某条慢 查询上,就应该精确测量这条查询从开始到结束这段时间里发生 了什么,而不是把整个服务器的聚合信息当成排查依据。测量范围 出错主要有两种典型情况:一种是在错误的时间点启动和停止测量 (比如把查询前后的空闲时间也算进去,稀释了真正的问题信号); 另一种是测量的是聚合后的整体信息,而不是目标活动本身(服务器 层面的CPU利用率、整体吞吐量这类聚合指标,掩盖了某条具体查询 真正的行为细节)。这条原则背后的逻辑是:测量的目的是暴露”时间 花在哪里”,而聚合数据天然会把不同来源的时间开销混在一起, 稀释掉你真正想看清的那个信号;只有把测量窗口精确框定在待优化 的具体活动上,测出来的数据才能直接对应到”为什么这个具体任务 慢”这个问题,而不是被无关的背景噪声掩盖。
参考来源
- 位置:《高性能MySQL:第3版》第3章"服务器性能剖析"3.1节"性能
优化简介"(源文件:_epub-src/OEBPS/Text/part0010.xhtml)
- 结论依据:原文明确"合适的测量范围是说只测量需要优化的活动。
有两种比较常见的情况会导致不合适的测量:在错误的时间启动和
停止测量;测量的是聚合后的信息,而不是目标活动本身……一个
常见的错误是先查看慢查询,然后又去排查整个服务器的情况来
判断问题在哪里。如果确认有慢查询,那么就应该测量慢查询,
而不是测量整个服务器",直接说明测量范围错配的两种典型情况
及正确做法。
- 原始内容:如果确认有慢查询,那么就应该测量慢查询,而不是
测量整个服务器。测量的应该是从慢查询的开始到结束的时间,
而不是查询之前或查询之后的时间。