本章要回答的三个问题:大表怎么用分区表"分床位"管理?存储过程、触发器、视图这些康复器械哪些值得用、哪些是历史包袱?除了索引与 SQL,服务器参数还有哪些值得动手的旋钮?
手术(索引优化)做完的病人需要康复训练。表涨到几亿行后,即使索引健康,维护窗口、备份体积、冷热分离都成了新问题;而参数调优是排在"加内存、修 SQL"之后依然有效的一层。这一章把分区、程序化对象、参数三件事按性价比排序讲清楚。
| 节 | 回答哪个问题 | 关键产出 |
|---|---|---|
| 6.1 分床位 | 大表怎么拆 | 分区方案与淘汰脚本 |
| 6.2 康复处方 | 程序化对象用不用 | 三件套取舍判断 |
| 6.3 体能训练 | 参数怎么调 | 参数优先级清单 |
第 3、4 章的架构与索引知识;有一张可以折腾的大表(可用脚本灌数据)。
性能之外,第 7 章转向防疫:安全、备份与高可用——保证这台机器不出大事。
本章三件事按投入产出排个地图。索引与 SQL 优化(第 4 章)之后,第一优先通常是内存:缓冲池给足带来的收益覆盖面最广,一次调整全局受益,且验证指标(命中率)清晰。第二优先是分区与归档:表体量降下来后,备份窗口、维护时间、统计新鲜度全都跟着好转。第三优先才是细颗粒参数:连接内存、临时表、刷盘节奏,单项收益有限,适合有压测与监控体系之后再精细推进。
顺序反过来做是常见弯路:在 8G 内存的机器上精调十几项参数,不如加一根内存条;给三千万行的表建精巧分区,不如先治好那条全表扫描的报表 SQL。康复训练的处方笺上永远先写"回到手术台复查",再写训练计划。
最后补一张本章自查表:离开前确认自己能不假思索地回答——缓冲池命中率怎么算、多少该动内存;redo 容量不足的症状是什么;什么表适合分区、分区键怎么选;视图嵌套几层要警惕;sort_buffer_size 为什么不能全局调大;安全双一参数指哪两个。六问答满,本章的康复训练科目就算修完,可以进防疫科了。
本章还有个隐性主题值得一笔:可回滚性。分区可以拆回去、索引可以删、视图可以改,但一次错误的参数全局变更、一次失手的大表迁移,恢复成本极高。所以本章所有建议都默认带着回滚预案——参数改前留原值快照、分区迁移前留原始表备份、在线改表工具先在预演库走全流程。康复训练室里最重要的器械不是任何工具,是"先想怎么退再想怎么进"的习惯,它属于每个敢在生产上动手术的人。
康复训练的验收也别只看性能数字:训练前后各留一份压测报告、一份参数快照、一份慢日志聚合,三份材料放进变更记录,半年后回看时它们就是"这台库的体质变化曲线"。调优工作最遗憾的结局是数字变好了却说不清为什么,下次退化时也无从对证。留痕不是文书负担,是给自己未来的诊断留下的基线档案。
顺带一句预算视角:康复训练的三个优先级对应三类成本——内存是采购成本、分区与归档是工程时间、参数是运维注意力。三类资源在团队里往往归属不同人,把这张优先级地图拿去和采购、排期、值班三方各对一次话,训练计划才能真正排进日历,而不是停留在文档里的美好愿望。做完这三次对话,本章就可以合上了。