【Self-Driving数据库】微软Azure对百万级实例进行自动索引推荐

【Self-Driving数据库】微软Azure对百万级实例进行自动索引推荐
最新回答
追逐明天

2023-03-27 01:11:16

微软Azure通过自动索引推荐系统对百万级实例进行索引优化,采用分布式架构、多组件协同及严格验证机制,在不影响用户的前提下实现高效索引管理。 具体实现方式如下:

一、系统架构与核心组件

Azure的自动索引推荐系统包含三大核心组件,协同完成索引的推荐、验证与应用:

  • 控制面板(Control Plane)作为系统核心,负责协调全流程生命周期,包括发起诊断、应用索引、验证结果及检测效果。其关键任务包括:

    跟踪索引状态(如Active、Validating、Success、Reverting等),管理推荐流程的每个环节。

    通过RPC调用协调各region的服务节点,避免数据跨region问题。

    图4:Control Plane协调SQL引擎与Validator的流程

  • 索引推荐器(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检验索引变更前后的性能分布一致性,若检测到退化则自动回滚。

二、工程实现与挑战应对
  1. 分布式部署在每个region部署独立服务节点,通过RPC调用减少跨region数据传输延迟,确保系统可扩展性。

  2. 低影响操作

    时间选择:在业务低峰期执行索引变更,并将操作权重调至最低。

    隐形索引(Invisible Index):允许索引在验证阶段对用户透明,避免锁表或资源争用。

    可恢复操作(Resumable Index Create):支持中断后恢复索引创建,减少失败重试成本。

  3. 索引删除的难点处理

    偶发SQL索引:通过扩大索引分析窗口长度,捕捉低频但关键的业务查询。

    用户强制索引(Hint/Force Index):避开被用户显式指定的索引,防止优化器冲突。

    重复索引识别:结合索引使用统计,识别包含关系并优先保留高效索引。

三、实验验证与效果评估
  1. B-instance验证方法为待优化数据库(A)创建镜像(B),在B上应用索引推荐并转发业务SQL流量,对比性能指标:

    优势:无需影响生产环境,可高效验证算法覆盖度。

    结果:MI和DTA的推荐在85%~90%的数据库实例上达到或超过DBA手动调整的效果。

  2. 实验结果分析

    机型差异:MI适用于资源受限环境,DTA适用于高性能环境,两者互补性显著。

    复杂Workload:在Premium tier中,DBA人工索引效果仍优于算法推荐,说明极端场景下人工干预的必要性。

    回滚率:约11%的索引建议因性能退化被回滚,验证机制有效保障了稳定性。

四、商业价值与生产成果
  • 规模:截至2018年10月,系统生成25万条新建索引建议和340万条删除索引建议。
  • 应用效果

    约5万条索引被创建,2万条被删除,显著优化了存储与查询性能。

    在自动索引推荐开启的数据库中,用户查询性能平均提升15%~20%。

五、总结

Azure的自动索引推荐系统通过分布式架构、多工具协同、严格验证机制,成功解决了百万级数据库实例的索引优化难题。其创新点包括:

  • 低优先级索引操作:减少对用户的影响。
  • 隐形索引与可恢复创建:提升系统容错性。
  • B-instance验证:高效覆盖算法边界场景。

该系统不仅提升了数据库性能,还降低了DBA的运维负担,为云数据库的自动化管理提供了标杆实践。