在过去,数据库调优这项极具专业性和挑战性的工作一般是由资深的数据库管理员(DBA)来完成的,诸如缓存大小分配、写入频率管理等因素在内的数百项参数的动态设置,不是经验丰富、技术过硬的人根本不敢轻易下手,但即使如此,技术精湛的从业人员亦有马失前蹄的时候。
达摩院数据库与存储实验室张心怡等人为了解决这一痛点,提出《数据库性能自动调优的统一高效框架》,成功研发出一款名为UniTune的统一数据库调优框架,可以完成甚至超越人工调优的效果。
过去人工数据库调优主要包括参数的调节、索引的选择、查询语句的优化等等,这些工作是由DBA手工来完成并进行调试,正如前文所言高度依赖经验且并非万无一失,且人力成本高。近些年出现了一些自动调优的方法,通过自动尝试不同的配置,进行数据库调优。
但是,这些调优技术都有一个共同的问题,那就是仅仅针对某个特定的模块进行优化,无法站在一个比较高的维度去审视全局,导致找不到数据库的全局最优配置,用户不知道应该在不同模块调优投入多少预算,下图就是通过配置参数和索引这两个切入点进行优化,可以明显发现如何组合调优需要大量的测试且相互依赖较为明显,仅仅运用现有单一优化的方法很难找到全局最优解。
除了寻找全局最优解难度大,用户如何分配优化预算更是无从下手,以下图为例,优化索引的时候,到达一定程度后,即使优化索引的投入继续增加,但是因为边际递减效应的存在,收益可以说是非常小了,有些得不偿失。
因此,在数据库调优这个领域,我们亟需一种可以统一调优的框架或者说解决方案,兼顾多模块优化计算量化,寻找出尽可能优秀的全局解。
基于此,张心怡等人首先将不同模块进行一个高度的抽象,支持现有的不同模块的技术特性,并且具有良好的扩展性;其次为了解决资源分配问题,提出了一个亮眼的资源分配策略,该策略即使在面对陌生的因子时,也能在各个模块之间合理的去分配预算;最后为了实现这些不同的优化,不同的代理能更好的协同工作,张心怡等人也提出了一个全新的消息传递协议,来使这些不同的优化代理进行高效的沟通协作。
UniTune的优化流程见下图:
这其中有几个明显的创新亮点,首先是资源的分配(Allocation),张心怡等人设计了一个在代理之间分配调整预算(Budget Allocation)的策略,通过汤普森采样学习不同模块的收益分布,其中,对于收益较高的优化代理(agent)进行充分的利用和探索。
同时UniTune提出新的消息传播协议极为关键,用户依据资源分配模块所选择出的优化代理,它会根据这个信息传递的协议来去进行运作,去优化数据库然后这些模块运行是交替迭代的,直到用户的优化预算耗尽,或者说找到了能让用户满意的全局解。
实验表明,Unitune比传统的调优框架更快更好地调优数据库,取得了至多14.1倍的加速比。
评论留言