基于负载自动预测的数据库自动调优方法及装置与流程

文档序号:18552322发布日期:2019-08-30 22:10阅读:191来源:国知局
基于负载自动预测的数据库自动调优方法及装置与流程

本发明涉及数据库领域,具体地涉及一种基于负载自动预测的数据库自动调优方法及一种基于负载自动预测的数据库自动调优装置。



背景技术:

传统的数据库调优方法是依靠专业dba人工结合硬件配置、业务的数据量、流量等给出一个相对合理的参数配置文件。由于线上负载随时有可能发生变化,这种方法不能时刻保持数据库性能是最优的,也不能应对热点事件的突发情况,当有热点事件发生时,由于数据量或者流量的突然增大,数据库的负载会很快上升,而人工无法做到特别及时的响应,这就会导致因为数据库性能不足而出现拒绝连接的情况。此外,如果在业务闲时,数据库负载已经下降,而不及时进行调整的话,就会存在着资源浪费的情况。具体来说,dba人工基于历史情况结合个人经验预测数据库负载,并根据预测结果再次结合个人经验人工调优给出优化配置,最后人工推送上线,缺点在于:由于历史情况比较久远,可参考性有所下降,存在着预测不准确,导致调优结果不理想的情况;由于人工响应的速度比较慢,如果预测不准确,不能及时调整到最优配置;对dba技能要求较高,而且需要收集的信息复杂多样,然后综合考虑,人力成本非常高。

现有一些机器学习自动调参的方案是基于当前负载寻找优化配置,并且不会自动推送上线,缺点在于:由于需要先观察数据库至少一个周期,获取当前负载信息,然后再开始调优,这中间存在着时间差,等调优完成后线上负载情况已发生变化,得到的最优配置已经不合适最新情况;由于不会自动推送上线,因此要想真正应用到线上,是需要人工跟进,等到产生最优配置后,由人工推送上线,人力成本较高。



技术实现要素:

本发明实施方式的目的是做到对数据库负载的提前预测,针对预测的结果自动做好数据库的提前优化配置工作,当负载增大或减小时直接将优化后的配置替换到线上以做到及时应对,可更好的应对突发情况,节省资源,提高效率,还可以节省运维人力成本。

为了实现上述目的,在本发明第一方面,提供一种基于负载自动预测的数据库自动调优方法,所述自动调优方法包括:

s1)基于历史数据库的历史负载预测在线数据库即将发生的负载;

s2)根据步骤s1)得到的所述在线数据库即将发生的负载调整训练数据库配置参数,得到优化后的数据库配置参数;

s3)将步骤s2)得到的优化后的数据库配置参数在与其对应的在线数据库负载实际发生时配置给所述在线数据库。

进一步的,所述步骤s1)包括如下步骤:

s11)从所述历史数据库的历史负载提取特征值,生成样例;

s12)将所述步骤s11)中生成的所述样例作为高斯回归模型的输入,预测历史数据库的即将发生的负载;

s13)将所述步骤s12)得到的所述历史数据库的即将发生的负载与所述历史数据库的历史负载进行比较,根据比较结果对所述高斯回归模型进行模型调整;

s14)重复步骤s11)-s13)直至得到所述历史数据库的即将发生的负载与所述历史数据库的历史负载之间的误差最小并且收敛时的高斯回归模型;

s15)将所述误差最小并且收敛时的高斯回归模型用于基于历史数据库的历史负载预测在线数据库即将发生的负载。

进一步的,所述步骤s2)包括:

在已存在所述即将发生的负载对应的优化后的数据库配置参数的情况下,直接调用所述优化后的数据库配置参数;

当不存在所述即将发生的负载对应的优化后的数据库配置参数的情况下,通过线下实时训练获得所述即将发生的负载对应的优化后的数据库配置参数。

进一步的,所述通过线下实时训练获得所述即将发生的负载对应的优化后的数据库配置参数,包括:

通过调整tpcc配置的方式,或者通过抽取线上实际sql进行流量等比放大、缩小的方式,调整数据量和流量,在所述训练数据库构造所述在线数据库即将发生的负载;

根据训练数据库的sql响应时间和qps不断调整所述训练数据库配置参数;

重复上述步骤m次,将所述m次重复中所述sql响应时间最短和qps最大时的所述即将发生的负载对应的训练数据库配置参数作为所述优化后的数据库配置参数。

进一步的,步骤s3)包括:

监测所述在线数据库的负载变化情况,在存在与变化后负载对应的优化后的数据库配置参数的情况下,将与变化后负载对应的优化后的数据库配置参数配置给所述在线数据库;

在不存在与变化后负载对应的优化后的数据库配置参数的情况下,则返回步骤s2)进行所述线下实时训练,直至获得与变化后负载对应的优化后的数据库配置参数。

进一步的,所述将与变化后负载对应的优化后的数据库配置参数配置给所述在线数据库,包括:

按照先修改在线数据库的从库,然后进行在线数据库的主库和在线数据库的从库的切换,再修改在线数据库的新从库的方式进行在线数据库参数配置。

在本发明第二方面,还提供一种基于负载自动预测的数据库自动调优装置,包括控制器,所述控制器被配置用于:

基于历史数据库的历史负载预测在线数据库即将发生的负载;

根据所述在线数据库即将发生的负载调整训练数据库配置参数,得到优化后的数据库配置参数;

将所述优化后的数据库配置参数在与其对应的在线数据库负载实际发生时配置给所述在线数据库。

进一步的,所述基于历史数据库的历史负载预测在线数据库即将发生的负载,包括:

从所述历史数据库的历史负载提取特征值,生成样例;

将生成的所述样例作为高斯回归模型的输入,预测历史数据库的即将发生的负载;

将所述历史数据库的即将发生的负载与所述历史数据库的历史负载进行比较,根据比较结果对所述高斯回归模型进行模型调整;

重复上述步骤直至得到所述历史数据库的即将发生的负载与所述历史数据库的历史负载之间的误差最小并且收敛时的高斯回归模型;

将所述误差最小并且收敛时的高斯回归模型用于基于历史数据库的历史负载预测在线数据库即将发生的负载。

进一步的,所述根据所述在线数据库即将发生的负载调整训练数据库配置参数,得到优化后的数据库配置参数,包括:

在已存在所述即将发生的负载对应的优化后的数据库配置参数的情况下,直接调用所述优化后的数据库配置参数;

当不存在所述即将发生的负载对应的优化后的数据库配置参数的情况下,通过线下实时训练获得所述即将发生的负载对应的优化后的数据库配置参数。

进一步的,所述通过线下实时训练获得所述即将发生的负载对应的优化后的数据库配置参数,包括:

通过调整tpcc配置的方式,或者通过抽取线上实际sql进行流量等比放大、缩小的方式,调整数据量和流量,在所述训练数据库构造所述在线数据库即将发生的负载;

根据训练数据库的sql响应时间和qps不断调整所述训练数据库配置参数;

重复上述步骤m次,将所述m次重复中所述sql响应时间最短和qps最大时的所述即将发生的负载对应的训练数据库配置参数作为所述优化后的数据库配置参数。

进一步的,所述将所述优化后的数据库配置参数在与其对应的在线数据库负载实际发生时配置给所述在线数据库,包括:

监测所述在线数据库的负载变化情况,在存在与变化后负载对应的优化后的数据库配置参数的情况下,将与变化后负载对应的优化后的数据库配置参数配置给所述在线数据库;

在不存在与变化后负载对应的优化后的数据库配置参数的情况下,则进行所述线下实时训练,直至获得与变化后负载对应的优化后的数据库配置参数。

进一步的,所述将与变化后负载对应的优化后的数据库配置参数配置给所述在线数据库,包括:

按照先修改在线数据库的从库,然后进行在线数据库的主库和在线数据库的从库的切换,再修改在线数据库的新从库的方式进行在线数据库参数配置。

在本发明第三方面,还提供一种机器可读存储介质,该机器可读存储介质上存储有指令,该指令在被控制器执行时能够使得所述控制器执行如前所述的基于负载自动预测的数据库自动调优方法。

本发明的技术方案通过对数据库的负载进行自动预测,并结合预测结果进行自动调优,具有如下效果:

1)自动化进行,无需人力干预,减少运维人力成本;

2)动态弹性调整资源分配,资源使用最大化,不浪费;

3)实时应对突发状况,保证云数据库的可用性。

本发明实施方式的其它特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本发明实施方式的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明实施方式,但并不构成对本发明实施方式的限制。在附图中:

图1是本发明实施方式提供的基于负载自动预测的数据库自动调优方法的步骤流程图;

图2是本发明实施方式提供的方法中基于历史数据库的历史负载预测在线数据库即将发生的负载的步骤流程图。

技术词语解释

tpcc:即tpc-c,针对数据库不同的使用场景由tpc(transactionprocessingcouncil,事务处理性能委员会)发布的多项测试标准。其中被业界广泛接受和使用的有tpc-c、tpc-h和tpc-ds。是针对oltp(on-linetransactionprocess,联机事务处理系统)的基准测试,通过每分钟事务数来衡量。

具体实施方式

以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。

在本发明实施方式中,在未作相反说明的情况下,使用的方位词如“上、下、顶、底”通常是针对附图所示的方向而言的或者是针对竖直、垂直或重力方向上而言的各部件相互位置关系描述用词。

图1是本发明提供的基于负载自动预测的数据库自动调优方法的步骤流程图。本发明提供一种基于负载自动预测的数据库自动调优方法,所述自动调优方法包括:

步骤s1):基于历史数据库的历史负载预测在线数据库即将发生的负载;

所述历史数据库存储的是已知负载的各种数据,包括已知负载的配置参数,如功率控制参数、切换参数、小区选择参数等。

步骤s2):根据步骤s1)得到的所述在线数据库即将发生的负载调整训练数据库配置参数,得到优化后的数据库配置参数;将所述训练数据库经过训练后得到的数据库配置参数,意即优化后的数据库配置参数发送给优化数据库。

步骤s3):将步骤s2)得到的优化后的数据库配置参数在与其对应的在线数据库负载实际发生时配置给所述在线数据库。

此步骤中,在线数据库即线上数据库,在线数据库一般包括在线数据库的主库、在线数据库的从库。在线数据库集群一般为一主多从的集群模式。

图2是本发明提供的方法中基于历史数据库的历史负载预测在线数据库即将发生的负载的步骤流程图。

具体地,所述步骤s1)中,基于历史数据库的历史负载预测在线数据库即将发生的负载,包括:

步骤s11):从所述历史数据库的历史负载提取特征值,生成样例;

所述历史负载可以为当前正在发生的、近几分钟的、近一小时的、过去一天相同时段的、过去一周相同时段的、过去一月相同时段的、过去一年相同时段的、历史突发事件引起的、历史促销产生的等。

步骤s12):将所述步骤s11)中生成的所述样例作为高斯回归模型的输入,预测历史数据库的即将发生的负载;输入为所述历史数据库的历史负载的样例,在经过高斯回归模型后,会得到预测出的历史数据库即将发生的负载的各种参数。意即,以少量的历史数据库的参数通过高斯回归模型预测出历史数据库即将发生的数据库的整个的负载。

高斯过程回归模型是机器学习中常用的比较知名的模型,具体实现是公知常识,在此不再赘述。

步骤s13):将所述步骤s12)得到的所述历史数据库的即将发生的负载与所述历史数据库的历史负载进行比较,根据比较结果对所述高斯回归模型进行模型调整;

将预测出的即将发生的负载的各种参数与历史数据库的历史负载的各种已知的对应参数进行比较,根据参数的比较结果对高斯回归模型中的参数进行调整。例如,当预测出的数据库配置参数中的功率控制参数与历史数据库的历史负载中的数据库配置参数中的功率控制参数有差异,则修改该高斯回归模型中的参数,以期待在新修改的高斯回归模型用于预测时能够得到和历史数据库的历史负载中的数据库配置参数中的功率控制参数能够更接近,甚至相等。

步骤s14):重复步骤s11)-s13)直至得到所述历史数据库的即将发生的负载与所述历史数据库的历史负载之间的误差最小并且收敛时的高斯回归模型;收敛在此处的意思是误差很小并且不会再继续改变,或者有改变但是改变小到可以忽略

步骤s15):将所述误差最小并且收敛时的高斯回归模型用于基于历史数据库的历史负载预测在线数据库即将发生的负载。

数据库工作负载的直观体现为数据库内部的统计信息:pg_stat_archiver.archived_count、pg_stat_archiver.failed_count、pg_stat_bgwriter.checkpoints_timed、pg_stat_database.deadlocks等,对应的向量为v={v1,v2,v3,…}。

高斯回归模型的输入样例为x={x1,x2,…,xm},m为样例总数;每个样例都对应一个特征值向量w={w1,w2,w3,w4,w5,w6,w7,w8,w9},w1-w9分别表示当前正在发生的、近几分钟的、近一小时的、过去一天相同时段的、过去一周相同时段的、过去一月相同时段的、过去一年相同时段的、历史突发事件引起的、历史促销产生的负载情况;每种负载情况都对应着一个向量v。

高斯回归模型的输出预测值表示为y={y1,y2,…,ym},m为预测值总数,每个预测值都对应一个向量v。

将线下训练好的高斯回归模型作用于线上后,即可以根据线上当前负载情况预测出下一时刻即将发生的负载。

具体地,所述步骤s2)包括:

在已存在所述即将发生的负载对应的优化后的数据库配置参数的情况下,直接调用所述优化后的数据库配置参数;优化库用于存储即将发生的负载对应的优化后的数据库配置参数。当然,优化库也在实时更新,以获得与某一种负载对应的真正最优的数据库配置参数。

当不存在所述即将发生的负载对应的优化后的数据库配置参数的情况下,通过线下实时训练获得所述即将发生的负载对应的优化后的数据库配置参数。该步骤是通过线下的训练数据库不断训练获取数据库配置参数的。

进一步的,所述通过线下实时训练获得所述即将发生的负载对应的优化后的数据库配置参数,包括:

通过调整tpcc配置的方式,或者通过抽取线上实际sql进行流量等比放大、缩小的方式,调整数据量和流量,在所述训练数据库构造所述在线数据库即将发生的负载;

根据训练数据库的sql响应时间和qps不断调整所述训练数据库配置参数;qps意思是每秒查询率,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

重复上述步骤m次,将所述m次重复中所述sql响应时间最短和qps最大时的所述即将发生的负载对应的训练数据库配置参数作为所述优化后的数据库配置参数。本方案中,通过不断调整核心参数的值,然后持续迭代直至找到最优的性能,即响应时间最短和qps值最大,最后将此工作负载对应的性能最优的参数配置信息保存到优化库中供后续使用。

进一步的,步骤s3)包括:

监测所述在线数据库的负载变化情况,在存在与变化后负载对应的优化后的数据库配置参数的情况下,将与变化后负载对应的优化后的数据库配置参数配置给所述在线数据库;

在不存在与变化后负载对应的优化后的数据库配置参数的情况下,则返回步骤s2)进行所述线下实时训练,直至获得与变化后负载对应的优化后的数据库配置参数。

进一步的,所述将与变化后负载对应的优化后的数据库配置参数配置给所述在线数据库,包括:

按照先修改在线数据库的从库,然后进行在线数据库的主库和在线数据库的从库的切换,再修改在线数据库的新从库的方式进行在线数据库参数配置。举例来说,可采用如下的方式来实施:

第一步:线上数据库集群一般为一主多从的集群模式,为了降低变更引起集群故障的风险,一般不会对整个集群一起变更,而是采用分步变更的方法,这里假定集群规模为一主两从,主库标记为m,从库分别标记为n1,n2;

第二步:修改n1的配置信息;

第三步:修改n2的配置信息;

第四步:在n1和n2中随机选择一个作为新主库,这里假定选择n1;

第五步:进行主从切换:将m切换为新从库标记为n’1,n1切换为新主库标记为m’,(由于m’就是以前的n1,因此已经是最新配置),此时只需对n’1(也就是以前的m)做配置信息修改;

第六步:基于此,整个集群的配置信息都已为最新状态。

通过执行本发明方法中的步骤s1)-s3),可做到自动根据近期任务的资源消耗情况预测即将发生的工作负载情况,然后基于预测的负载通过实时自动训练找出在此负载的情况下最优性能的配置信息,最后在预测负载发生时及时替换线上配置情况,以达到时刻保持数据库性能最优。

在本发明第二方面,还提供一种基于负载自动预测的数据库自动调优的装置,包括控制器,所述控制器被配置用于:

基于历史数据库的历史负载预测在线数据库即将发生的负载;

根据所述在线数据库即将发生的负载调整训练数据库配置参数,得到优化后的数据库配置参数;

将所述优化后的数据库配置参数在与其对应的在线数据库负载实际发生时配置给所述在线数据库。

进一步的,所述基于历史数据库的历史负载预测在线数据库即将发生的负载,包括:

从所述历史数据库的历史负载提取特征值,生成样例;

将生成的所述样例作为高斯回归模型的输入,预测历史数据库的即将发生的负载;

将所述历史数据库的即将发生的负载与所述历史数据库的历史负载进行比较,根据比较结果对所述高斯回归模型进行模型调整;

重复上述步骤直至得到所述历史数据库的即将发生的负载与所述历史数据库的历史负载之间的误差最小并且收敛时的高斯回归模型;

将所述误差最小并且收敛时的高斯回归模型用于基于历史数据库的历史负载预测在线数据库即将发生的负载。

进一步的,所述根据所述在线数据库即将发生的负载调整训练数据库配置参数,得到优化后的数据库配置参数,包括:

在已存在所述即将发生的负载对应的优化后的数据库配置参数的情况下,直接调用所述优化后的数据库配置参数;

当不存在所述即将发生的负载对应的优化后的数据库配置参数的情况下,通过线下实时训练获得所述即将发生的负载对应的优化后的数据库配置参数。

进一步的,所述通过线下实时训练获得所述即将发生的负载对应的优化后的数据库配置参数,包括:

通过调整tpcc配置的方式,或者通过抽取线上实际sql进行流量等比放大、缩小的方式,调整数据量和流量,在所述训练数据库构造所述在线数据库即将发生的负载;

根据训练数据库的sql响应时间和qps不断调整所述训练数据库配置参数;

重复上述步骤m次,将所述m次重复中所述sql响应时间最短和qps最大时的所述即将发生的负载对应的训练数据库配置参数作为所述优化后的数据库配置参数。

进一步的,所述将所述优化后的数据库配置参数在与其对应的在线数据库负载实际发生时配置给所述在线数据库,包括:

监测所述在线数据库的负载变化情况,在存在与变化后负载对应的优化后的数据库配置参数的情况下,将与变化后负载对应的优化后的数据库配置参数配置给所述在线数据库;

在不存在与变化后负载对应的优化后的数据库配置参数的情况下,则进行所述线下实时训练,直至获得与变化后负载对应的优化后的数据库配置参数。

进一步的,所述将与变化后负载对应的优化后的数据库配置参数配置给所述在线数据库,包括:

按照先修改在线数据库的从库,然后进行在线数据库的主库和在线数据库的从库的切换,再修改在线数据库的新从库的方式进行在线数据库参数配置。

在本发明第三方面,还提供一种机器可读存储介质,该机器可读存储介质上存储有指令,该指令在被控制器执行时能够使得所述控制器执行如上所述的基于负载自动预测的数据库自动调优方法。

本发明设计了一种可以对线上数据库负载进行自动预测,并根据预测结果进行自动调整数据库参数以达到性能最优的一整套方案。此方案的实现采用ai相关技术,并且使用online-learning技术,根据新产生的特征值并结合历史情况综合考虑,以达到可以对线上数据库负载提前自动准确的预测,然后结合预测的工作负载,再使用强化学习技术自动推荐出在既定负载下的数据库最优配置,做到提前调优参数配置以应对即将到来的负载变化时仍然可以保证数据库性能最优。

本发明部署上线后,整个工作过程全程自动化,无需人员干预,可以减少数据库运维人员工作负担,解放人力,使更多的人力可以投入到做更有价值的事情中去。此外,由于此方案是实时预测即将发生的情况,因此可以更好的应对突发状况,增强可用性,保证事件发生时,数据库仍然可用,并且性能最优;还可根据负载预测结果动态调整一些共享资源的分配方案,保证资源利用最大化,不存在浪费。

本发明除了应用于云数据库(包括mysql、postgresql、sqlserver、fusiondb等)保证云上的服务性能以外,还可以应用于企业自建数据库服务,为企业节省人力成本。

以上结合附图详细描述了本发明的可选实施方式,但是,本发明实施方式并不限于上述实施方式中的具体细节,在本发明实施方式的技术构思范围内,可以对本发明实施方式的技术方案进行多种简单变型,这些简单变型均属于本发明实施方式的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本发明实施方式对各种可能的组合方式不再另行说明。

本领域技术人员可以理解实现上述实施方式的方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得单片机、芯片或处理器(processor)执行本发明各个实施方式所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

此外,本发明的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明实施方式的思想,其同样应当视为本发明实施方式所公开的内容。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1