第 7 站练习答案
倾斜数据
sql
INSERT INTO sales_order(customer_id, status, total_amount)
SELECT customer_id, 'paid', 1.00
FROM customer
LIMIT 1;
ANALYZE TABLE sales_order UPDATE HISTOGRAM ON status WITH 16 BUCKETS;
EXPLAIN FORMAT=JSON
SELECT * FROM sales_order WHERE status = 'cancelled';少量实验数据不能形成可靠结论;应批量生成可重复分布并保存数据生成脚本。
基准模板
至少记录:版本与配置、schema、数据量与分布、查询和参数、并发、预热方式、运行次数、P50/P95/P99、扫描行数、CPU/I/O、锁等待、写入吞吐、副本延迟及回滚阈值。
P95 不是唯一约束。CPU 翻倍可能降低容量、增加排队并放大故障,因此需要同时满足资源和吞吐预算。
加码题解:优化器证据
sql
ANALYZE TABLE orders;
SELECT DIGEST_TEXT, AVG_TIMER_WAIT, SUM_ROWS_EXAMINED
FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_ROWS_EXAMINED DESC LIMIT 10;关键推理
更新统计信息并从 digest 观察长期样本,避免用一次偶然查询做结论。
可替代方案
对分布偏斜列使用直方图,并在数据变化后重新评估。
典型错误
只看平均延迟、忽略锁等待和返回数据量,或一次改多个变量无法归因。
复盘时请附上版本、隔离级别、执行计划或恢复位置中的相关证据;没有证据的“看起来正确”不算完成。