摘要
索引调优是数据库调优的重要组成部分,一直受到广泛关注. 由于索引调优问题的理论复杂性和大数据时代的到来,通过DBA手动调优的方案已经无法满足现代数据库的发展需求,调优方案逐渐开始向自动化、智能化的方向发展. 随着机器学习技术的发展,越来越多的索引选择方案开始引入机器学习技术,并取得了一定的研究成果.
本文将索引调优问题的解决方案归结为一种基于搜索的调优范式,归纳了其研究内容,阐述了其面临的挑战,对调优范式内的索引配置空间的生成、索引配置的评价以及索引配置的枚举与搜索3方面的研究成果进行了归纳、总结和对比. 对动态工作负载下的索引选择问题(index selection problem,ISP)所面临的新挑战进行了分析,并基于在线反馈控制回路框架对其解决方案进行梳理. 讨论了索引调优工具的发展与现状,通过对现有研究的分析论述,为后来研究者提供参考和研究思路,并对索引选择方案的未来进行了展望.
内容简介
1.对离线ISP进行定义,并把现有解决方案归结为一个包含索引配置搜索空间生成、索引配置评价及索引配置的枚举与搜索三大部分的调优范式.
2.对每部分的相关研究进行了归纳、总结和对比.
3.介绍了索引调优工具的发展与现状,并进行了总结与展望.
主要内容
1. 索引选择问题
按照一定策略在索引配置搜索空间中搜索最优配置的方式是自然的,因此本文将现有解决方案都归结为一种基于搜索的调优范式,包含索引配置搜索空间的生成、索引配置的评价以及索引配置的枚举3个部分(步骤),如图1所示.
一个好的枚举策略能让算法更快找到最优索引配置. 比如在图2中,最优配置用实心圆表示,在同样的搜索空间情况下,右下角的搜索路径直到最后才找到最优配置,而右上角的搜索路径能提前找到最优索引配置,不用访问剩下(虚线所连接部分)的索引配置.
同时,我们将现有索引选择方案中的方法与技术也按照该调优范式进行整理和总结,如图3所示.
2. 索引配置搜索空间的生成
现有研究方法通常通过启发式规则从工作负载查询文本或从查询计划抽取相关的属性和索引(比如可被索引属性和可被接受索引),形成候选索引和候选索引集合. 其中基于查询语句的方法简单高效,而基于查询计划的方法能生成更为准确的候选索引集合,但这种方式需要调用优化器生成查询计划,代价相对更大. 为了提高候选索引配置生成的效率,还有很多研究通过压缩工作负载来减少需要处理的查询数量,基于模板的方法能加快搜索空间生成的速度,但不能缩减索引配置的搜索空间,同时在查询模板数量很多的实际场景下不能保证压缩效率. 基于聚类的方法和把压缩操作抽象为SQL原语的方法则能进一步提高工作负载的压缩效率. 我们认为,未来的查询相似性度量和工作负载压缩机制的设计应关注文献[32]中的索引感知性质,使得到的查询聚类结果更具有针对性,减少因工作负载压缩引起的索引选择方案效果的损失.
3. 索引配置的评价
早期基于外部代价模型的方式虽然效率高,但为了模型可用性做出诸多假设,且和优化器脱节,所以已很少在索引选择方案被直接使用. 现有主流方法采用优化器和what-if优化机制来估计工作负载在特定索引配置下的代价,实现对不同的索引配置的比较. 这种方式和优化器同步,但不准确的优化器代价估计可能导致索引选择方案效果出现偏差,甚至造成数据库系统性能的退化. 同时,为了保证索引选择方案的效率,还需要注意what-if优化的代价问题,可以通过原子配置概念、what-if调用结果的缓存与复用或通过减少工作负载中所需处理查询数量来减少需要what-if优化的配置数量(这些方法可结合使用). 而随着机器学习技术的发展,越来越多的研究者开始研究用机器学习技术提升索引配置评价的准确性和效率,虽然该部分方法在代价估计的平均误差低于传统优化器,但要达到可用,仍需关注机器学习模型的训练(包括更新)代价和稳定性问题,并对数据库内核中优化器部分代码进行修改.
4. 索引配置的枚举与搜索
表1从搜索空间的生成策略、索引配置的评价手段、配置的形成策略、最终索引配置形成过程中的导向指标(即根据什么指标确定添加或删除的索引)、索引调优的终止条件、是否考虑索引间相互影响这6个方面对这些代表性方法的特点进行了展示,文献[21]也对部分传统方法进行了实验对比分析.
5. 动态工作负载下的索引选择问题
在线索引选择处理的是动态工作负载,工作负载的偏移(workload shift)可能导致在原工作负载下推荐的索引配置在新工作负载发生收益衰减,甚至产生负收益. 为了更好地处理动态工作负载,在线索引选择方案可建模为一个在线反馈控制回路,即监控—调优—调整的循环回路,如图4所示. 通过监控和观测工作负载和数据库系统指标,对现有数据库系统和不同的候选索引配置进行评价和诊断,得到包含推荐配置的调优建议,然后实际调整现有数据库系统索引配置到推荐配置,完成一次控制反馈循环.
大多离线索引选择方案的输出仅为调优建议,对应在线反馈控制回路中的调优部分,因此在线ISP不仅继承了离线ISP的既有挑战,还面临着新的挑战:
1)需要高效的系统监控. 为了保证不会显著影响数据库系统的正常业务运行,系统监控过程需要足够高效,并能及时归集相关数据,使能对系统进行及时的诊断调优工作.
2)需要高效的索引调优. 由于工作负载的动态变化,在线索引选择方案需要快速地生成和部署索引调优建议,避免出现索引调优建议部署完成后所面对的工作负载特征已经发生变化的情况,造成实际调优效果的下降. 因此在实际设计在线索引调优方案时,应充分考虑索引调优主体算法的代价和索引配置变更的代价.
3)需要高效的索引配置变更. 索引配置变更操作的调度计划(即索引操作的序列)应该足够高效,特别是考虑到索引间相互影响对索引操作代价影响的情况下.
面对动态的工作负载,ISP也呈现出新的挑战. 本节综合现有代表性在线索引选择文献中的描述,对在线ISP进行了形式化定义. 然后基于在线反馈控制回路框架归纳和总结了相关的研究内容和方法. 其中,数据库系统的监控模块为调优模块提供输入的查询/工作负载或预处理后的监控数据(比如通过手动设计或表示学习得到的特征). 调优模块解决是否需要对当前索引配置进行调整以及如何进行调整的问题. 从形式上看,可以选择反应式或主动式的调优方式,反应式调优的效果取决于历史和未来的工作负载间、DBMS状态间的相似性,而主动式调优的效果则取决于对未来的工作负载和DBMS状态的预测准确性. 在工作负载变化快和变化幅度大的情况下,由于工作负载预测难度的提升,反应式调优方案效果通常相对更好. 而从细节上看,为了提高调优模块的效率效果,需要综合考虑索引配置的调整代价和调优算法的代价. 合理的索引配置调整操作顺序能提高索引配置的变更效率,该问题也是NP难的,但现有研究较少. 我们认为,未来对该问题进行系统性研究的潜力较大.
发展与现状
虽然支持开源数据库的索引调优工具越来越多,但总的来说商业数据库的调优工具起步更早,功能更加完善,且有相关论文支撑.
随着云数据库的发展,很多企业将部分数据库调优工作外包给云数据库厂商. 为了服务大量不同场景下的客户,云数据库厂商更需要自动化、智能化的索引调优服务. 比如,阿里云便为其云数据库产品提供了数据库自治服务. 同时,传统数据库厂商也开始提供云数据库产品,比如微软的Azure SQL数据库、Oracle的自治数据库Exadata、IBM的云数据库系列也将其在传统数据库产品中成熟的索引调优功能搬上云端,比如,Oracle的自治数据库便基于Oracle数据库及其Exadata云数据库提出,以应对各种场景不同复杂度和不同规模工作负载下的索引调优任务.
总结与展望
总结
索引是数据库系统重要的物理数据结构之一,索引调优也是数据库物理设计的重要组成部分. 一个合适的索引配置能给数据库性能带来极大的提升,这也让ISP成为数据库优化的经典问题之一. 本文首先对离线ISP进行定义,并把现有解决方案归结为一个包含索引配置搜索空间生成、索引配置评价及索引配置的枚举与搜索三大部分的调优范式,然后对每部分的相关研究进行了归纳、总结和对比.
索引配置搜索空间的生成阶段主要通过启发式规则和优化器来生成候选索引和索引配置,形成索引配置的搜索空间. 作为输入,索引配置搜索空间的大小极大影响着索引选择方案的代价和效率. 但是过于激进的空间剪枝策略反而可能错误地排除掉有益的索引,影响索引调优方案的效果,所以启发式规则的设计应该在效率和效果之间取得平衡.
为了评价索引配置,一种常用思路是通过工作负载在各索引配置下代价的数值来评价,相关研究大多通过优化器的what-if优化技术进行估计. 另一种思路则是通过构建索引配置间的偏序关系来比较各索引配置. 比如,训练一个机器学习分类器模型对索引间的偏序关系进行预测,然后在搜索过程中不断寻找更好的索引配置.
在索引配置的枚举与搜索策略中,自底向上的枚举策略简单直观,效率相对较高,效果和具体的枚举策略有关,在存储空间限制较小时更适用. 自顶向下的枚举策略从不考虑存储约束的初始配置,开始迭代地对索引配置进行松弛,通常在索引配置存储限额较大时效果较好,但运行时间也更长. 而基于整数规划的隐枚举策略侧重在索引推荐的最优性保证上,更难考虑到索引间的相互影响. 且在面对大规模数据库系统和工作负载时,这种策略可用性下降. 基于强化学习的搜索策略通过训练一个智能体,学习一个灵活的智能策略函数以生成索引调优建议是一个有前景的方向.
面对动态工作负载下的ISP,我们依照在线反馈控制回路框架,分别对数据库系统的监控、索引配置的诊断与调优以及索引配置的部署调整3方面的相关方法进行归纳和总结. 面对动态工作负载,数据库系统的监控是整个在线反馈控制回路框架的入口,监控过程收集到的各种数据被处理后发送给诊断与调优模块进行分析,形成调优建议. 该模块中的调优算法即对应离线索引选择方案从工作负载输入到调优建议输出的过程,反应式地或主动式地生成索引调优建议. 最后根据该建议规划配置调整的计划进行部署,形成在线反馈控制回路的闭环.
展望
相比传统索引选择方案,现有基于机器学习的索引选择方案仍不多,有较大的研究空间. 我们认为,ISP在6个方向有较大的研究潜力,为研究者提供思路和参考:
1)集成基于学习的代价评估方法的索引选择方案.
2)集成基于学习的索引配置比较方法的索引选择方案.
3)基于强化学习的索引选择方案.
4)索引调优建议的最优调整部署策略.
5)考虑索引类型的索引调优.
6)现有索引选择研究主要集中在单机数据库上,但分布式数据库和云数据库的迅猛发展为索引调优引入了新的挑战.