2023-03-27 01:11:16
微软Azure通过自动索引推荐系统对百万级实例进行索引优化,采用分布式架构、多组件协同及严格验证机制,在不影响用户的前提下实现高效索引管理。 具体实现方式如下:
一、系统架构与核心组件Azure的自动索引推荐系统包含三大核心组件,协同完成索引的推荐、验证与应用:
控制面板(Control Plane)作为系统核心,负责协调全流程生命周期,包括发起诊断、应用索引、验证结果及检测效果。其关键任务包括:
跟踪索引状态(如Active、Validating、Success、Reverting等),管理推荐流程的每个环节。
通过RPC调用协调各region的服务节点,避免数据跨region问题。

索引推荐器(Index Recommender)结合两种工具实现差异化推荐:
MI(Missing Indexes):轻量级工具,通过DMV或执行计划识别缺失索引,适用于资源受限的数据库。
DTA(Database Engine Tuning Advisor):基于workload的完整物理设计工具,使用“what-if”优化器生成全局优化建议,适用于高性能数据库。
Workload选择:利用Query Store数据排序,优先优化占业务80%以上的SQL部分。
验证器(Validator)通过Query Store存储的SQL流水数据,验证新索引对性能的影响:
评价指标:仅关注逻辑指标(如CPU时间、逻辑读取量),避免物理指标干扰。
验证方法:采用Welch t-test检验索引变更前后的性能分布一致性,若检测到退化则自动回滚。
分布式部署在每个region部署独立服务节点,通过RPC调用减少跨region数据传输延迟,确保系统可扩展性。
低影响操作
时间选择:在业务低峰期执行索引变更,并将操作权重调至最低。
隐形索引(Invisible Index):允许索引在验证阶段对用户透明,避免锁表或资源争用。
可恢复操作(Resumable Index Create):支持中断后恢复索引创建,减少失败重试成本。
索引删除的难点处理
偶发SQL索引:通过扩大索引分析窗口长度,捕捉低频但关键的业务查询。
用户强制索引(Hint/Force Index):避开被用户显式指定的索引,防止优化器冲突。
重复索引识别:结合索引使用统计,识别包含关系并优先保留高效索引。
B-instance验证方法为待优化数据库(A)创建镜像(B),在B上应用索引推荐并转发业务SQL流量,对比性能指标:
优势:无需影响生产环境,可高效验证算法覆盖度。
结果:MI和DTA的推荐在85%~90%的数据库实例上达到或超过DBA手动调整的效果。

实验结果分析
机型差异:MI适用于资源受限环境,DTA适用于高性能环境,两者互补性显著。
复杂Workload:在Premium tier中,DBA人工索引效果仍优于算法推荐,说明极端场景下人工干预的必要性。
回滚率:约11%的索引建议因性能退化被回滚,验证机制有效保障了稳定性。

约5万条索引被创建,2万条被删除,显著优化了存储与查询性能。
在自动索引推荐开启的数据库中,用户查询性能平均提升15%~20%。
Azure的自动索引推荐系统通过分布式架构、多工具协同、严格验证机制,成功解决了百万级数据库实例的索引优化难题。其创新点包括:
该系统不仅提升了数据库性能,还降低了DBA的运维负担,为云数据库的自动化管理提供了标杆实践。