一种数据库代码的检查装置和方法技术领域
本发明涉及网络数据库技术领域,尤指一种数据库代码的检查装置和方法。
背景技术
结构化查询语言(Structured Query Language,SQL)是一种数据库查询和程序设
计语言,用于存取数据以及查询、更新和管理关系型数据库系统,现有的关系型数据库包括
Oracle、DB2、SQL Server、Sybase、MySQL等。
随着关系型数据库应用的日益广泛,越来越多的数据需要存储及访问。数据库索
引好比是一本书前面的目录,如果合理设置索引,能加快数据库的查询速度;如果没有设置
索引或索引设置不合理,则会降低数据库的查询效率,而且,当数据库的数据访问量达到几
十万甚至更多时,就会出现数据库的瓶颈问题,严重的可能造成数据库资源耗尽,造成系统
应用崩溃。
因此,在系统应用开发过程中,如何检测开发代码中的数据库是否设置了合理的
表索引,进而对开发人员进行预警,具有非常重要的实际意义。
发明内容
为了解决上述技术问题,本发明提供了一种数据库代码的检查装置和方法,能够
及时检测开发代码中的数据库是否设置了合理的表索引。
为了达到本发明目的,本发明实施例的技术方案是这样实现的:
一种数据库代码的检查装置,包括日志模块和分析模块,其中,
日志模块,用于开启数据库的日志,拉取数据库的日志文件并复制到备份文件中;
分析模块,用于对备份文件中的语句进行索引分析,得到数据库中没有设置索引
或索引设置不合理的数据表。
进一步地,本发明实施例的数据库代码的检查装置,还包括过滤模块,其中,
过滤模块,用于使用预先设定的规则,对备份文件中的语句进行过滤;
所述分析模块,用于对所述备份文件中过滤后的语句进行索引分析,得到数据库
中没有设置索引或索引设置不合理的数据表。
进一步地,所述预先设定的规则包括:不需要检查的数据表、表数据量的检查阈
值、调用频率阈值或无需检查的语句中的至少一种。
进一步地,本发明实施例的数据库代码的检查装置,还包括统计模块,其中,
所述分析模块,还用于将所述没有设置索引或索引设置不合理的数据表输出至统
计模块;
统计模块,用于对所述没有设置索引或索引设置不合理的数据表,按照预设的属
性进行统计。
进一步地,所述预设的属性包括:表使用频率、表数据量或是否慢查询属性中的至
少一种。
一种数据库代码的检查方法,包括:
开启数据库的日志,拉取数据库的日志文件并复制到备份文件中;
对备份文件中的语句进行索引分析,得到数据库中没有设置索引或索引设置不合
理的数据表。
进一步地,本发明实施例的数据库代码的检查方法,还包括:在对备份文件中的语
句进行索引分析前,使用预先设定的规则,对备份文件中的语句进行过滤。
进一步地,所述预先设定的规则,包括不需要检查的数据表、表数据量的检查阈
值、调用频率阈值或无需检查的语句中的至少一种。
进一步地,本发明实施例的数据库代码的检查方法,还包括:对所述没有设置索引
或索引设置不合理的数据表,按照预设的属性进行统计。
进一步地,所述预设的属性包括表使用频率、表数据量或是否慢查询属性中的至
少一种。
本发明提供的数据库代码的检查装置和方法,基于现有的数据库日志和索引分析
技术,通过拉取数据库日志,对数据库日志中的SQL语句进行索引分析,检测开发代码中的
数据库是否设置了合理的表索引;
进一步地,本发明中通过预先设定的规则对数据库日志中的SQL语句进行过滤,灵
活控制了检测范围,减少了误判断的情况;
进一步地,在需要时,本发明对索引分析的结果进行进一步统计,对项目开发人员
进行预警,降低了故障风险。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发
明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明的数据库代码的检查装置的第一实施例的结构示意图;
图2为本发明的数据库代码的检查装置的第二实施例的结构示意图;
图3为本发明的数据库代码的检查装置的第三实施例的结构示意图;
图4为本发明的数据库代码的检查方法的第一实施例的流程示意图;
图5为本发明的数据库代码的检查方法的第二实施例的流程示意图;
图6为本发明的数据库代码的检查方法的第三实施例的流程示意图。
具体实施方式
下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
如图1所示,根据本发明的数据库代码的检查装置的第一实施例,包括日志模块和
分析模块,其中,
日志模块,用于开启数据库的日志,拉取数据库的日志文件并复制到备份文件中;
分析模块,用于对备份文件中的语句进行索引分析,得到数据库中没有设置索引
或索引设置不合理的数据表。
可选地,日志模块开启的数据库的日志为查询日志。数据库常见的日志类型包括:
错误日志、二进制日志、查询日志、慢查询日志和更新日志;其中查询日志,用于记录建立的
客户端连接和执行的语句;慢查询日志,用于记录执行时间超过预设的慢查询时间的所有
查询或不使用索引的查询。
在MySQL数据库中,用--log[=日志文件名]或-l[日志文件名]命令启动查询日
志。如果没有给定日志文件名的值,默认日志文件名是host_name.log。MySQL数据库开启查
询日志后,用户可以在日志文件中,查看MySQL数据库中所执行的SQL语句。用-log-slow-
queries命令启动慢查询日志。
可选地,日志模块通过定时执行脚本,拉取数据库的日志文件。例如,日志模块可
以使用linux系统的定时执行脚本,定时拉取数据库的日志文件。
可选地,日志模块使用文本传输协议(FTP)或简单文本传输协议(TFTP),将拉取的
日志文件复制到备份文件中。
可选地,当数据库为MYSQL时,分析模块使用EXPLAIN命令对过滤后的语句进行索
引分析,得到数据库中没有设置索引或索引设置不合理的表。EXPLAIN的返回结果中包括多
个字段,其中,possible_keys字段指出能在该表中使用哪些索引有助于查询,如果为空,说
明没有可用的索引;key字段指出实际从possible_keys中选择使用的索引,如果为空,说明
没有使用索引。当返回结果里包括Using filesort和Using temporary字段时,表示数据库
根本不能使用索引,效率会受到重大影响,应尽可能对此进行优化,其中,Using filesort
表示会对结果使用一个外部索引排序,而不是从表里按索引次序读到相关内容,可能在内
存或者磁盘上进行排序;Using temporary表示在对查询结果排序时使用临时表。因此,当
EXPLAIN的返回结果中出现possible_keys字段为空、key字段为空、包括Using filesort字
段或包括Using temporary字段中的任意一种时,认为对应的数据表没有设置索引或索引
设置不合理。
如图2所示,根据本发明的数据库代码的检查装置的第二实施例,包括日志模块、
过滤模块和分析模块,其中,
日志模块,用于开启数据库的日志,拉取数据库的日志文件并复制到备份文件中;
过滤模块,用于使用预先设定的规则,对备份文件中的语句进行过滤;
分析模块,用于对备份文件中过滤后的语句进行索引分析,得到数据库中没有设
置索引或索引设置不合理的数据表。
可选地,过滤模块预先设定的规则,包括不需要检查的数据表、表数据量的检查阈
值、调用频率阈值或无需检查的语句中的至少一种。例如,如果设置了不需要检查的数据表
为a,则过滤模块将所有只调用数据表a的SQL语句,从备份文件中删除掉;如果设置了表数
据量的检查阈值为10000条,则过滤模块将表数据量小于10000条的数据表的SQL语句,从备
份文件中删除掉;如果设置了调用频率阈值为10次/分钟,则过滤模块将调用频率小于10
次/分钟的SQL语句,从备份文件中删除掉;如果设置了无需检查的语句为CREATE TABLE,则
过滤模块将包含CREATE TABLE命令的SQL语句,从备份文件中删除掉。
如图3所示,根据本发明的数据库代码的检查装置的第三实施例,还包括统计模
块,其中,
分析模块,还用于将没有设置索引或索引设置不合理的数据表输出至统计模块,
统计模块,用于对没有设置索引或索引设置不合理的数据表,按照预设的属性进
行统计。
可选地,上述预设的属性包括表使用频率、表数据量、是否慢查询等属性中的至少
一种。
可选地,统计模块将统计后的结果存储在后台管理系统中。
可选地,统计模块还将统计后的结果,定时通过邮件发送至各数据表对应的项目
开发负责人。各数据表对应的项目开发负责人,在收到邮件后,对统计结果进行排查,若无
需优化的,可在后台管理系统中设置该数据表为不需要检查的表,这样,后续过滤模块将过
滤该数据表的SQL语句,从而使得分析模块和统计模块不再对该数据表进行分析和统计。
本发明的数据库代码的检查装置,基于现有的数据库日志和索引分析技术,通过
拉取数据库日志,对数据库日志中的SQL语句进行索引分析,检测开发代码中的数据库是否
设置了合理的表索引;进一步地,通过预先设定的规则对数据库日志中的SQL语句进行过
滤,灵活控制了检测范围,减少了误判断的情况;进一步地,在需要时,本发明对索引分析的
结果进行进一步统计,对项目开发人员进行预警,降低了故障风险。
如图4所示,根据本发明的数据库代码的检查方法的第一实施例,包括如下步骤:
开启数据库的日志,拉取数据库的日志文件并复制到备份文件中;
对备份文件中的语句进行索引分析,得到数据库中没有设置索引或索引设置不合
理的数据表。
可选地,所开启的数据库的日志为查询日志。查询日志,用于记录建立的客户端连
接和执行的语句。在MySQL数据库中,用--log[=日志文件名]或-l[日志文件名]命令启动
查询日志,如果没有给定日志文件名的值,默认日志文件名是host_name.log。MySQL数据库
开启查询日志后,用户可以在日志文件中,查看MySQL数据库中所执行的SQL语句。
可选地,通过定时执行脚本,拉取数据库的日志文件。例如,可以使用linux系统的
定时执行脚本,定时拉取数据库的日志文件。
可选地,使用文本传输协议(FTP)或简单文本传输协议(TFTP),将拉取的日志文件
复制到备份文件中。
可选地,当数据库为MYSQL时,使用EXPLAIN命令对过滤后的语句进行索引分析,得
到数据库中没有设置索引或索引设置不合理的表。EXPLAIN的返回结果中包括多个字段,其
中,possible_keys字段指出能在该表中使用哪些索引有助于查询,如果为空,说明没有可
用的索引;key字段指出实际从possible_keys中选择使用的索引,如果为空,说明没有使用
索引。当返回结果里包括Using filesort和Using temporary字段时,表示数据库根本不能
使用索引,效率会受到重大影响,应尽可能对此进行优化,其中,Using filesort表示会对
结果使用一个外部索引排序,而不是从表里按索引次序读到相关内容,可能在内存或者磁
盘上进行排序;Using temporary表示在对查询结果排序时使用临时表。因此,当EXPLAIN的
返回结果中出现possible_keys字段为空、key字段为空、包括Using filesort字段或包括
Using temporary字段中的任意一种时,认为对应的数据表没有设置索引或索引设置不合
理。
如图5所示,根据本发明的数据库代码的检查方法的第二实施例,包括如下步骤:
开启数据库的日志,拉取数据库的日志文件并复制到备份文件中;
使用预先设定的规则,对备份文件中的语句进行过滤;
对备份文件中过滤后的语句进行索引分析,得到数据库中没有设置索引或索引设
置不合理的数据表。
可选地,预先设定的规则,包括不需要检查的数据表、表数据量的检查阈值、调用
频率阈值或无需检查的语句中的至少一种。例如,如果设置了不需要检查的数据表为a,则
将所有只调用数据表a的SQL语句,从备份文件中删除掉;如果设置了表数据量的检查阈值
为10000条,则将表数据量小于10000条的数据表的SQL语句,从备份文件中删除掉;如果设
置了调用频率阈值为10次/分钟,则将调用频率小于10次/分钟的SQL语句,从备份文件中删
除掉;如果设置了无需检查的语句为CREATE TABLE,则将包含CREATE TABLE命令的SQL语
句,从备份文件中删除掉。
如图6所示,根据本发明的数据库代码的检查方法的第三实施例,还包括:对没有
设置索引或索引设置不合理的数据表,按照预设的属性进行统计。
可选地,上述预设的属性包括表使用频率、表数据量或是否慢查询等属性中的至
少一种。
可选地,本发明的数据库代码的检查方法,将统计后的结果存储在后台管理系统
中。
可选地,本发明的数据库代码的检查方法,还将统计后的结果定时通过邮件,发送
至各数据表对应的项目开发负责人。各数据表对应的项目开发负责人,在收到邮件后,对统
计结果进行排查,若无需优化的,可在后台管理系统中设置该数据表为不需要检查的表,这
样,后续将不再对该数据表的SQL语句,进行分析和统计。
本发明的数据库代码的检查方法,基于现有的数据库日志和索引分析技术,通过
拉取数据库日志,对数据库日志中的SQL语句进行索引分析,检测开发代码中的数据库是否
设置了合理的表索引;进一步地,本发明通过预先设定的规则对数据库日志中的SQL语句进
行过滤,灵活控制了检测范围,减少了误判断的情况;进一步地,在需要时,本发明对索引分
析的结果进行进一步统计,在需要时,对项目开发人员进行预警,降低了故障风险。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排
他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而
且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有
的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该
要素的过程、方法、物品或者装置中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方
法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下
前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做
出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质
(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服
务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发
明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技
术领域,均同理包括在本发明的专利保护范围内。