基于关系型数据库索引的自动运维系统和方法与流程

文档序号:20277247发布日期:2020-04-07 14:39阅读:266来源:国知局
基于关系型数据库索引的自动运维系统和方法与流程

本发明涉及系统运维领域,具体而言涉及一种基于关系型数据库索引的自动运维系统和方法。



背景技术:

现有关系型数据库索引运维,一般靠有经验的数据库管理员来实现(databaseadministrator,简称dba),通过编写零散脚本来监控数据库索引状态,一般无索引备份,当出现索引失效、数据查询慢等问题后,需要根据职业经验分析索引类型,创建时使用的并行度为多大,其运维非常依赖个人经验,难以实现系统化和自动化的数据库运维,效率低下。



技术实现要素:

本发明目的在于提供一种基于关系型数据库索引的自动运维系统和方法,将索引备份直接存放在自定义索引备份数据表中,并通过多种关系型数据库索引的自动运维,无需人工干预。

本发明的另一方面提出一种基于关系型数据库索引的自动运维方法,包括以下步骤:

步骤1、根据数据库类型,备份数据库索引定义到索引定义备份表中,所述数据库为oracle、mysql、postgresql中的至少一种;备份的数据库索引定义包括索引用户、索引名称、当前状态、索引依附表用户、索引依附表名称、索引依附表是否分区、索引依附表分区类型、索引类型以及索引是否为唯一索引的组合,并将索引用户、索引名称、当前状态插入监控表中;

步骤2、获取索引和索引依附表的多维度信息,包括索引物理大小、数据表物理大小、数据表数据量大小、叶子索引的数据块数量以及不同索引值的数量,然后根据预设评分卡模型对索引重建的耗时预期进行预测,得到每个索引重建的耗时预期得分、最高分和最低分;

步骤3、根据每个索引重建的耗时预期得分、最高分和最低分,获取重建索引时使用的数据库线程数量,即并行度;

步骤4、将重建索引时使用的数据库线程数量更新到索引定义备份表中;

步骤5、读取更新的索引定义备份表,转化为不同类型数据库的操作语言,重建索引;

步骤6、输出索引重建过程中的报错信息及过程信息到监控表中,并执行下述监控处理:

根据监控表中记录的错误信息,提醒进干预处理;

根据监控表中记录的过程信息,实现重建索引过程的监控。

优选地,前述步骤2中,根据预设评分卡模型对索引重建的耗时预期进行预测,得到每个索引重建的耗时预期得分、最高分和最低分,其操作过程包括:

获取索引和索引依附表的索引物理大小、数据表物理大小、数据表数据量大小、叶子索引的数据块数量、不同索引值的数量的多维度信息,调用评分卡模型的输出评分卡,每个维度的数据根据范围得到相应的分值,汇总得到每个索引重建的耗时预期的总分值;

遍历每个索引重建的耗时预期分值得到最高分和最低分。

优选地,前述步骤3中,根据每个索引重建的耗时预期得分、最高分和最低分,获取重建索引时使用的数据库线程数量的操作包括:

根据预测得到的最高分、最低分和数据库所在主机的cpu线程数,获取每个索引重建的数据库线程数量:

索引重建的合适数据库线程数量=floor(((最高分-最低分)/数据库所在主机的cpu线程数)*数据库所在主机的cpu线程数)

其中,floor运算为结果向下取整运算。

优选地,所述步骤5中,重建索引的操作包括:

针对不同类型数据库,读取索引定义备份表中索引名称、索引依附表、索引依附表的分区、索引类型以及索引创建使用的数据库线程数量信息,并针对不同的数据库执行索引重建:

在oracle数据库中,转换为createindexwithparallel语句进行重建;

在mysql数据库中,修改会话级别innodb_read_io_threads和innodb_write_io_threads的参数值,并转换为createindex语句;

在postgresql数据库中,修改会话级别max_parallel_maintenance_workers的参数值,并转换为createindex语句。

优选地,在所述步骤1的备份的操作过程中,每月执行一次备份,并对新增索引进行备份,旧索引备份删除,其中,只备份索引定义,不备份索引的物理数据。

优选地,根据监控表中的过程数据进行数据库索引的监控,包括:

每隔设定的第一周期监控索引状态是否正常,每隔设定的第二周期监控上次重建时间是否距当下时间超半年,且当前时间为0:00-6:00,满足条件则重建索引,否则不重建。

优选地,所述第一周期为10s,所述第二周期为6个月。

根据本发明还提出一种基于关系型数据库索引的自动运维系统,其特征在于,包括备份模块、监控模块和重建模块,其中:

备份模块,用于索引定义的备份,并更新每个索引重建数据库线程数量到索引定义备份表;

重建模块,用于根据更新的索引定义备份表,转化为不同类型数据库的操作语言,重建索引并输出报错信息及过程信息到监控表中;

监控模块,用于根据索引重建过程中的报错信息及过程信息,对重建索引的过程进行监控,提示干预操作以及控制是否重建索引。

应当理解,前述构思以及在下面更加详细地描述的额外构思的所有组合只要在这样的构思不相互矛盾的情况下都可以被视为本公开的发明主题的一部分。另外,所要求保护的主题的所有组合都被视为本公开的发明主题的一部分。

结合附图从下面的描述中可以更加全面地理解本发明教导的前述和其他方面、实施例和特征。本发明的其他附加方面例如示例性实施方式的特征和/或有益效果将在下面的描述中显见,或通过根据本发明教导的具体实施方式的实践中得知。

附图说明

附图不意在按比例绘制。在附图中,在各个图中示出的每个相同或近似相同的组成部分可以用相同的标号表示。为了清晰起见,在每个图中,并非每个组成部分均被标记。现在,将通过例子并参考附图来描述本发明的各个方面的实施例,其中:

图1是根据本发明的实施例实施例的自动运维方法的流程示例。

图2是根据图1示例的备份和重建的示意图。

图3是根据图1示例的监控重建是否异常的示意图。

图4是根据本发明的实施例实施例的自动运维系统的框架示例。

图5是根据图4示例的备份模块的示意图。

具体实施方式

为了更了解本发明的技术内容,特举具体实施例并配合所附图式说明如下。

在本公开中参照附图来描述本发明的各方面,附图中示出了许多说明的实施例。本公开的实施例不必定意在包括本发明的所有方面。应当理解,上面介绍的多种构思和实施例,以及下面更加详细地描述的那些构思和实施方式可以以很多方式中任意一种来实施,这是因为本发明所公开的构思和实施例并不限于任何实施方式。另外,本发明公开的一些方面可以单独使用,或者与本发明公开的其他方面的任何适当组合来使用。

结合图1-图5所示,根据本发明示例性示例的基于关系型数据库索引的自动运维方法,其特征在于,包括以下步骤:

步骤1、根据数据库类型,备份数据库索引定义到索引定义备份表中,所述数据库为oracle、mysql、postgresql中的至少一种;备份的数据库索引定义包括索引用户、索引名称、当前状态、索引依附表用户、索引依附表名称、索引依附表是否分区、索引依附表分区类型、索引类型以及索引是否为唯一索引的组合,并将索引用户、索引名称、当前状态插入监控表中;

步骤2、获取索引和索引依附表的多维度信息,包括索引物理大小、数据表物理大小、数据表数据量大小、叶子索引的数据块数量以及不同索引值的数量,然后根据预设评分卡模型对索引重建的耗时预期进行预测,得到每个索引重建的耗时预期得分、最高分和最低分;

步骤3、根据每个索引重建的耗时预期得分、最高分和最低分,获取重建索引时使用的数据库线程数量,即并行度;

步骤4、将重建索引时使用的数据库线程数量更新到索引定义备份表中;

步骤5、读取更新的索引定义备份表,转化为不同类型数据库的操作语言,重建索引;

步骤6、输出索引重建过程中的报错信息及过程信息到监控表中,并执行下述监控处理:

根据监控表中记录的错误信息,提醒进干预处理;

根据监控表中记录的过程信息,实现重建索引过程的监控。

在前述步骤2中,根据预设评分卡模型对索引重建的耗时预期进行预测,得到每个索引重建的耗时预期得分、最高分和最低分,其操作过程包括:

获取索引和索引依附表的索引物理大小、数据表物理大小、数据表数据量大小、叶子索引的数据块数量、不同索引值的数量的多维度信息,调用评分卡模型的输出评分卡,每个维度的数据根据范围得到相应的分值,汇总得到每个索引重建的耗时预期的总分值;

然后,遍历每个索引重建的耗时预期分值得到最高分和最低分。

其中,前述步骤2中,所述预设的评分卡按照下述操作创建:

获取索引物理大小、数据表物理大小、索引类型、数据表数据量大小、数据表类型、索引列数量、被索引字段长度、数据表字段总长度、索引层级、叶子索引的数据块数量、索引改变是否记录到日志、不同索引值的数量、索引的每个值平均在多少叶子块中、单线程索引重建耗时、索引用户、索引名称、当前状态、索引依附表用户、索引依附表名称、索引依附表是否分区、索引依附表分区类型、索引类型、索引是否为唯一索引的多维度数据,对数据进行预处理;

利用pandas读取训练集数据和测试集数据;

目标变量定义,包括:首先定义耗时多长为算耗时长,与数据集中单线程索引重建耗时数据相关,作为目标变量,多维度数据中其他的数据作为解释变量;定义单线程索引重建耗时超过30分钟的为耗时长类,定义单线程索引重建耗时不足30分钟的为耗时短类,其中耗时长类标记为1,耗时短类标记为0;

变量预处理,对多维度数据中的数据采用无监督等距分箱,转化为woe编码,代替原始数据;

iv排序,其中在排序过程中,选择iv>0.02的变量,使用numpy的corrcoef算法进行多变量分析,保留相关性低于阈值0.6的变量,并基于xgboost算法确定变量重要性,进行变量筛选;

其中,先选择前4个最重要变量放入statsmodels算法的logit模型,变量分别是索引物理大小、数据表物理大小、数据表数据量大小和叶子索引的数据块数量,计算器系数和显著性;继续向logit模型里面加变量,直至不显著或系数为正为止;最终选择五个数据作为变量,分别为索引物理大小、数据表物理大小、数据表数据量大小、叶子索引的数据块数量及不同索引值的数量;

使用sklearn算法中的的logisticregression建模,使用roc曲线和ks曲线验证是否过拟合,如果过拟合则重新建模,否则输出模型作为评分卡模型。

当然,在另外的实施例中,还可以根据前述的多维数据进行其他形式的评分卡模型训练和建模,从而在进行自动运维时进行索引重建的耗时预期检测。

前述步骤3中,根据每个索引重建的耗时预期得分、最高分和最低分,获取重建索引时使用的数据库线程数量的操作包括:

根据预测得到的最高分、最低分和数据库所在主机的cpu线程数,获取每个索引重建的数据库线程数量:

索引重建的合适数据库线程数量=floor(((最高分-最低分)/数据库所在主机的cpu线程数)*数据库所在主机的cpu线程数)

其中,floor运算为结果向下取整运算。

其中,所述步骤5中,重建索引的操作包括:

针对不同类型数据库,读取索引定义备份表中索引名称、索引依附表、索引依附表的分区、索引类型以及索引创建使用的数据库线程数量信息,并针对不同的数据库执行索引重建:

在oracle数据库中,转换为createindexwithparallel语句进行重建;

在mysql数据库中,修改会话级别innodb_read_io_threads和innodb_write_io_threads的参数值,并转换为createindex语句;

在postgresql数据库中,修改会话级别max_parallel_maintenance_workers的参数值,并转换为createindex语句。

在所述步骤1的备份的操作过程中,每月执行一次备份,并对新增索引进行备份,旧索引备份删除,其中,只备份索引定义,不备份索引的物理数据,无额外的硬盘消耗。

结合图1、2和图3所示,在本实施例的实现过程中,根据监控表中的过程数据进行数据库索引的监控,包括:

每隔设定的第一周期监控索引状态是否正常,每隔设定的第二周期监控上次重建时间是否距当下时间超半年,且当前时间为0:00-6:00,满足条件则重建索引,否则不重建。

优选地,所述第一周期为10s,所述第二周期为6个月。当然,可以根据需要和维护的数据量等实际情况进行周期的调节。

结合图4、5所示,根据本发明前述公开的实施例的示例性实现,本发明还可以配置如下。

一种基于关系型数据库索引的自动运维系统,包括备份模块、监控模块和重建模块。

备份模块,用于索引定义的备份,并更新每个索引重建数据库线程数量到索引定义备份表。

重建模块,用于根据更新的索引定义备份表,转化为不同类型数据库的操作语言,重建索引并输出报错信息及过程信息到监控表中。

监控模块,用于根据索引重建过程中的报错信息及过程信息,对重建索引的过程进行监控,提示干预操作以及控制是否重建索引。

尤其优选的例子中,备份模块包括第一子模块、第二子模块、第三子模块和第四子模块。

第一子模块用于根据数据库类型,备份数据库索引定义到索引定义备份表中,所述数据库为oracle、mysql、postgresql中的至少一种;备份的数据库索引定义包括索引用户、索引名称、当前状态、索引依附表用户、索引依附表名称、索引依附表是否分区、索引依附表分区类型、索引类型以及索引是否为唯一索引的组合,并将索引用户、索引名称、当前状态插入监控表中。

第二子模块用于获取索引和索引依附表的多维度信息,包括索引物理大小、数据表物理大小、数据表数据量大小、叶子索引的数据块数量以及不同索引值的数量,然后根据预设评分卡模型对索引重建的耗时预期进行预测,得到每个索引重建的耗时预期得分、最高分和最低分。

第三子模块用于根据每个索引重建的耗时预期得分、最高分和最低分,获取重建索引时使用的数据库线程数量,即并行度。

第四子模块用于将重建索引时使用的数据库线程数量更新到索引定义备份表中。

监控模块包括重建控制模块,用于每隔设定的第一周期监控索引状态是否正常、每隔设定的第二周期监控上次重建时间是否距当下时间超半年,以及判断当前时间为0:00-6:00,如果均满足条件则重建索引,否则不重建。

结合本发明的上述实施例,索引备份直接存放在自定义索引备份数据表中,无额外的硬盘消耗;同时,通过评分卡模型对数据库索引创建的耗时预期进行打分,根据分数确定创建索引时使用的数据库线程数量(并行度),分数越高,数据库线程数量(并行度)越高。在监控到索引失效或者上次重建时间距当下时间超半年,根据评分卡分数确定重建的数据库线程数量(并行度),自动以最合理的数据库线程数量(并行度)创建,自动运维,仅在异常情况下需要人工干预,从而实现系统化和自动化的数据库运维,提高运维效率和降低成本。

虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明。本发明所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可作各种的更动与润饰。因此,本发明的保护范围当视权利要求书所界定者为准。

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