SQL日志收集分析方法及装置
技术领域
本发明涉及计算机技术领域,特别是涉及一种SQL日志收集分析方法及装置。
背景技术
SQL(Structured Query Language,结构化查询语言),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下公司。MySQL最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System,关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。
在对MySQL数据库进行维护时,经常需要收集各个MySQL服务器上的SQL日志并进行分析,目前使用的方法日志收集效率不高,且分析工作都靠人工进行,给用户带来很大的不便。
发明内容
本发明提出了一种MySQL数据库下线回收方法及装置以便提供一种克服上述问题或者至少部分地解决上述问题。
根据本发明的一个方面,提供了一种SQL日志收集分析方法,包括:
获取MySQL服务器集群的SQL全量日志,所述SQL全量日志中包括MySQL服务器集群执行过的所有SQL语句;
根据预定策略对所述SQL全量日志中的SQL语句的执行情况进行分析,得到相应的分析结果;
根据所述分析结果,给出SQL语句执行优化建议和/或数据库表结构优化建议。
可选地,所述获取MySQL服务器集群的SQL全量日志具体包括:
在所述MySQL服务器集群中的每个MySQL服务器上收集SQL日志并实时上传至各个所述MySQL服务器对应的中心服务器;
对各个MySQL服务器上传至所述中心服务器的SQL日志进行汇总;
定时将各个中心服务器中汇总的SQL日志上传至分布式文件系统,获取所述SQL全量日志。
可选地,所述获取MySQL服务器集群的SQL全量日志具体包括:
在所述MySQL服务器集群中的每个MySQL服务器上收集SQL日志并实时上传至各个所述MySQL服务器对应的中心服务器;
对各个MySQL服务器上传至所述中心服务器的SQL日志进行汇总;
当所述中心服务器中汇总后的所述SQL日志的大小达到预定阈值时,将所述SQL日志上传至分布式文件系统,获取所述SQL全量日志。
可选地,所述根据预定策略对所述SQL全量日志中的SQL语句的执行情况进行分析,得到相应的分析结果具体包括:
统计每种类型的SQL语句的条目个数,及每种类型的SQL语句的条目个数在所述SQL全量日志包括的所有SQL语句的条目总数中所占的百分比;
分析每个SQL语句的执行时长、返回响应的数据行数,根据每个SQL语句的执行时长及其对应的数据行数对所有的SQL语句进行排行,统计出执行时长大于第一阈值的SQL语句。
可选地,所述根据所述分析结果,给出SQL语句执行优化建议和/或数据库表结构优化建议具体包括:
获取在所述所有SQL语句的条目总数中所占百分比低于第二阈值的SQL语句类型,获取与所述SQL语句类型对应的索引,给出删除所述索引以优化数据库表结构的建议和/或删除所述索引;和/或
分析造成所述执行时长大于第一预定阈值的SQL语句的执行时长大于所述第一阈值的原因,当所述原因为缺少特定索引时,给出在数据库表结构中添加所述特定索引以优化SQL语句执行的建议和/或在数据库表结构中添加所述特定索引。
可选地,所述根据预定策略对所述SQL全量日志中的SQL语句的执行情况进行分析还包括:
将所述SQL全量日志对应的结构化的数据文件映射为一张数据库表;
基于用户输入的SQL查询语句,进行SQL查询。
根据本发明的另一个方面,还提供了一种SQL日志收集分析装置,包括:
全量获取模块,用于获取MySQL服务器集群的SQL全量日志,所述SQL全量日志中包括MySQL服务器集群执行过的所有SQL语句;
执行分析模块,用于根据预定策略对所述SQL全量日志中的SQL的语句执行情况进行分析,得到相应的分析结果;
优化建议模块,用于根据所述分析结果,给出SQL语句执行优化建议和/或数据库表结构优化建议。
可选地,所述全量获取模块包括:
第一获取单元,用于在所述MySQL服务器集群中的每个MySQL服务器上收集SQL日志并实时上传至各个所述MySQL服务器对应的中心服务器;
第二获取单元,用于对各个MySQL服务器上传至所述中心服务器的SQL日志进行汇总;
第三获取单元,用于定时将各个中心服务器中汇总的SQL日志上传至分布式文件系统,获取所述SQL全量日志。
可选地,所述全量获取模块日志包括:
第四获取单元,用于在所述MySQL服务器集群中的每个MySQL服务器上收集SQL日志并实时上传至各个所述MySQL服务器对应的中心服务器;
第五获取单元,用于对各个MySQL服务器上传至各个所述中心服务器的SQL日志进行汇总;
第六获取单元,用于当所述中心服务器中汇总后的所述SQL日志的大小达到预定阈值时,将所述SQL日志上传至分布式文件系统,获取所述SQL全量日志。
可选地,所述执行分析模块包括:
数量分析单元,用于统计每种类型的SQL语句的条目个数,及每种类型的SQL语句的条目个数在所述SQL全量日志包括的所有SQL语句的条目总数中所占的百分比;
时长分析单元,用于分析每个SQL语句的执行时长、返回响应的数据行数,根据每个SQL语句的执行时长及其对应的数据行数对所有的SQL语句进行排行,统计出执行时长大于第一阈值的SQL语句。
可选地,所述优化建议模块包括:
第一优化单元,用于获取在所述所有SQL语句的条目总数中所占百分比低于第二阈值的SQL语句类型,获取与所述SQL语句类型对应的索引,给出删除所述索引以优化数据库表结构的建议和/或删除所述索引;和/或
第二优化单元,用于分析造成所述执行时长大于第一预定阈值的SQL语句的执行时长大于所述第一阈值的原因,当所述原因为缺少特定索引时,给出在数据库表结构中添加所述特定索引以优化SQL语句执行的建议和/或在数据库表结构中添加所述特定索引。
可选地,所述执行分析模块还包括:
数据映射单元,用于将所述SQL全量日志对应的结构化的数据文件映射为一张数据库表;
查询执行单元,用于基于用户输入的SQL查询语句,进行SQL查询。
本发明提供的技术方案会收集MySQL服务器集群的SQL全量日志,并基于获取的SQL全量日志对SQL语句的执行情况进行分析,进而可以给出相应的优化建议。本发明提供的技术方案可以自动地对SQL全量日志进行收集和分析,并根据得到的结果给出相应的优化建议,大大的方便了用户的使用,提高了用户体验。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是根据本发明一个实施例的SQL日志收集分析方法的流程示意图;
图2是根据本发明一个实施例的获取MySQL服务器集群的SQL全量日志的方法的流程示意图;
图3是根据本发明另一个实施例的获取MySQL服务器集群的SQL全量日志的方法的流程示意图;
图4是根据本发明另一个实施例的SQL日志收集分析方法的流程示意图;
图5是根据本发明一个实施例的收集和分析SQL日志的过程的示意图;
图6是根据本发明一个实施例的SQL日志收集分析装置的结构框图;
图7是根据本发明另一个实施例的SQL日志收集分析装置的结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。需要说明的是,在不冲突的前提下,本发明实施例和实施例中的技术特征可以相互结合。
图1是根据本发明一个实施例的SQL日志收集分析方法的流程示意图。如图1所示,上述方法可以包括:
步骤S102,获取MySQL服务器集群的SQL全量日志,上述SQL全量日志中包括MySQL服务器集群执行过的所有SQL语句;
步骤S104,根据预定策略对SQL全量日志中的SQL语句的执行情况进行分析,得到相应的分析结果;
步骤S106,根据上述分析结果,给出SQL语句执行优化建议和/或数据库表结构优化建议。
本发明提供的方法会收集MySQL服务器集群的SQL全量日志,并基于获取的SQL全量日志对SQL语句的执行情况进行分析,进而可以给出相应的优化建议。本发明提供的技术方案可以自动地对SQL全量日志进行收集和分析,并根据得到的结果给出相应的优化建议,大大的方便了用户的使用,提高了用户体验。
在上述实施例提供的方法中,需要获取MySQL服务器集群的SQL全量日志,以实现各位准确全面的分析结果。为了高效地获取到SQL全量日志,本发明实施例还提供了几种可SQL全量日志的方案。
在本发明的一个实施例中,如图2所示,步骤S102中获取MySQL服务器集群的SQL全量日志的步骤可以包括:
步骤S202,在MySQL服务器集群中的每个MySQL服务器上收集SQL日志并实时上传至各个MySQL服务器对应的中心服务器;
步骤S204,对各个MySQL服务器上传至中心服务器的SQL日志进行汇总;
步骤S206,定时将各个中心服务器中汇总的SQL日志上传至分布式文件系统,获取SQL全量日志。
本实施例提供的收集SQL日志的方法将SQL日志的收集分为了三个层次,每个MySQL服务器实时上传、每个中心服务器及时汇总、所有中心服务器定时上传,进而最终得到SQL全量日志。本实施例提供的技术方案,结构合理,日志收集流畅,可以高效地获取到SQL全量日志。
在本发明的另一个实施例中,如图3所示,步骤S102中获取MySQL服务器集群的SQL全量日志的步骤也可以包括:
步骤S302,在MySQL服务器集群中的每个MySQL服务器上收集SQL日志并实时上传至各个MySQL服务器对应的中心服务器;
步骤S304,对各个MySQL服务器上传至中心服务器的SQL日志进行汇总;
步骤S306,当中心服务器中汇总后的SQL日志的大小达到预定阈值时,将SQL日志上传至分布式文件系统,获取SQL全量日志。
本实施例提供的收集SQL日志的方法,也将SQL日志的收集分为了三个层次,但与上述实施例提供的方法有所不同,每个MySQL服务器还是需要实时上传、每个中心服务器也要及时汇总,但在最终汇总得到SQL全量日志时,每个中心服务器是在自己汇总的SQL日志的大小达到预定阈值时在进行上报。图2和图3所示的方法适应于不同的环境,图2所示的方法更适应于资源较为充足的环境,图3所示的方法则更适用于资源有限的环境。
实际上,在汇总SQL全量日志时还可以考虑由MySQL数据库直接将SQL日志上传至分布式文件系统的方式,但是这种方式需要强大的处理能力。
在得到了SQL全量日志后即可出于不同的需要进行多种有针对性的分析,在以SQL语句的执行情况为目标进行分析时,可以优先选择对每种类型的SQL语句的数目、占比以及每个SQL语句的执行时长、返回响应的数据行数、对应的排行进行分析,这些结果可以直观的反映出当前SQL语句的基本执行情况。在本发明的一个实施例中,上述步骤S104可以包括:
1、统计每种类型的SQL语句的条目个数,及每种类型的SQL语句的条目个数在SQL全量日志包括的所有SQL语句的条目总数中所占的百分比;
2、分析每个SQL语句的执行时长、返回响应的数据行数,根据每个SQL语句的执行时长及其对应的数据行数对所有的SQL语句进行排行,统计出执行时长大于第一阈值的SQL语句。
基于本实施里提供的方案即可得到每种类型的SQL语句的数目、占比以及执行时长、返回响应的数据行数、对应的排行,进而可以确定占比较少的SQL语句类型,以及执行较慢的SQL语句,从而为后续提供建议打下基础。
在本发明的一个实施例中,上述步骤S106可以包括:
1、获取在所有SQL语句的条目总数中所占百分比低于第二阈值的SQL语句类型,获取与该SQL语句类型对应的索引,给出删除上述索引以优化数据库表结构的建议;和/或
2、分析造成执行时长大于第一预定阈值的SQL语句的执行时长大于第一阈值的原因,当原因为缺少特定索引时,给出在数据库表结构中添加上述特定索引以优化SQL语句执行的建议。
在本发明的一个实施例中,上述步骤S106也可以包括:
1、获取在所有SQL语句的条目总数中所占百分比低于第二阈值的SQL语句类型,获取与该SQL语句类型对应的索引,删除上述索引;和/或
2、分析造成执行时长大于第一预定阈值的SQL语句的执行时长大于第一阈值的原因,当原因为缺少特定索引时,在数据库表结构中添加上述特定索引。
上述两个实施例提供的技术方案提供了几种典型的可根据SQL语句执行情况给出的优化建议。对于在SQL语句的条目总数中占比较小的SQL类型,其很可能属于过度规划的情况,为这类SQL语句专门设置的索引就属于对资源的浪费,因此可以考虑删除这样的索引以优化数据库表结构,就具体的方案来说可以只给出删除这样的索引的建议供用户选择,也可以直接删除这样的索引。对于执行较慢的SQL语句来说,造成执行较慢的原因可能是多种多样的,当这种原因为缺少特定索引时,则说明数据库表结构的前期设计不合理,因此可以考虑添加这样的索引以优化SQL语句执行,就具体的方案来说可以添加这样的索引的建议供用户选择,也可以直接添加这样的索引。
本发明各个实施例涉及的各个阈值的具体数值可以根据应用的具体环境确定,本发明不做具体限定。
进一步的,在得到了SQL全量日志后还可以对其执行查询的操作,以满足用户的不同需求。在本发明的一个实施例中,上述步骤S104还可以包括:将SQL全量日志对应的结构化的数据文件映射为一张数据库表;基于用户输入的SQL查询语句,进行SQL查询。
下面通过一个具体的实施例对上述各个实施例进行说明。图4是根据本发明另一个实施例的SQL日志收集分析方法的流程示意图,图5根据本发明一个实施例的收集和分析SQL日志的过程的示意图,图5简要的描述了图4所示方法的收集和分析SQL日志的过程。如图4所示,上述方法可以包括步骤S402-S414。
步骤S402,在MySQL服务器集群中的每个MySQL服务器上收集SQL日志并实时上传至各个MySQL服务器对应的中心服务器。
步骤S404,对各个MySQL服务器上传至中心服务器的SQL日志进行汇总。
步骤S406,定时或者当中心服务器中汇总后的SQL日志的大小达到预定阈值时,将SQL日志上传至分布式文件系统,获取SQL全量日志。
在上述步骤中,在每台部署MySQL服务的机器上收集SQL日志,同时也部署了日志汇总程序,实时将收集到的日志按照数据库实例标记汇总到此服务器节点的中心机,即中心服务器,中心机一般按安装机房划分,一个机房一个中心机。中心机收到子节点发送的SQL日志并汇总后根据配置传入分布式文件系统中,从而得到SQL全量日志。此处涉及的配置为:实时传入、及时汇总、汇总到一定大小传入或定时传入。
步骤S408,统计每种类型的SQL语句的条目个数,及每种类型的SQL语句的条目个数在SQL全量日志包括的所有SQL语句的条目总数中所占的百分比。
在上述步骤中,SQL语句类型可以大致分为增删改查(insert,delete,update,select)四大类,其中select还可以根据查询条件不同再次细分。
步骤S410,分析每个SQL语句的执行时长、返回响应的数据行数,根据每个SQL语句的执行时长及其对应的数据行数对所有的SQL语句进行排行,统计出执行时长大于第一阈值的SQL语句,即执行较慢的SQL语句。
步骤S412,获取在所有SQL语句的条目总数中所占百分比低于第二阈值的SQL语句类型,获取与该SQL语句类型对应的索引,给出删除上述索引以优化数据库表结构的建议,当情况允许时也可以直接删除上述索引。
步骤S414,分析造成执行时长大于第一预定阈值的SQL语句的执行时长大于第一阈值的原因,当原因为缺少特定索引时,给出在数据库表结构中添加特定索引以优化SQL语句执行的建议,当情况允许时也可以直接在数据库表结构中添加特定索引。
上述步骤S412和S414中,主要目的是通过精细化分析统计,详细分析各项排名靠后的SQL,并结合数据表结构判断SQL执行效率,从而给出SQL优化建议。同时,通过对全量日志的分析,反过来可以判断表结构设计是否合理,索引添加是否合理,反推优化表结构。当执行较慢的SQL语句较多时,可以优先分析占比高但是执行慢的SQL语句,或优先分析执行效率排名倒数几位的,即执行最慢的几个SQL语句,当执行较慢的SQL语句较多时究竟分析哪些SQL语句可以根据不同的需求设置不同的策略。
下面通过一个具体实例对上述实施例进行说明。
例如,有一个学生成绩表有学生个人信息以及各科成绩,现在需要得到数学成绩大于60分的学生名单,而且这个需求很频繁,通过上述分析发现这个查询出现次数很多,但是效率比较差执行很慢,通过判断发现之所以执行很慢是因为学生成绩表中数学成绩这列没有索引,所以可以给出给数学成绩列添加索引的优化建议,这样这个查询效率将大大提高。
这个例子描述情况,是一种典型的前期表结构设计的时候没有考虑到后期的使用场景,索引设计不合理的情况,后来根据线上统计的结果,发现需要添加索引。
另一种场景就是前期过度规划,添加了许多索引,但是实际使用场景中没有用到,根据我们统计结果也可以删除这些无用索引,释放资源。例如,在学生成绩表中针对美术成绩这列设置了索引,但是通过分析发现基本上没有人查询学生的美术成绩,那么就可以给出删除针对美术成绩这列设置的索引的建议。
基于上述的学生成绩表的例子,本发明实施例提供的方案的应用可以描述如下:
1、获取针对学生成绩表的SQL全量日志;
2、通过分析发现,查询数学成绩大于60分的学生的SQL语句数量很多,但是执行时长较长,而查询美术成绩的SQL语句很少;
3、分析查询数学成绩大于60分的学生的SQL语句执行很慢的原因,得到的结果是由于学生成绩表中数学成绩这列没有索引;
4、给出在学生成绩表中数学成绩这列添加索引的建议,或者在权限够高的前提下直接在学生成绩表中数学成绩这列添加索引;
5、给出在学生成绩表中删除美术成绩这列的索引的建议,或者在权限够高的前提下直接删除美术成绩这列的索引。
对应于上述的方法权利要求,本发明实施例还提供了一种SQL日志收集分析装置。图6是根据本发明一个实施例的SQL日志收集分析装置的结构框图。如图6所示,上述装置包括:
全量获取模块10,用于获取MySQL服务器集群的SQL全量日志,SQL全量日志中包括MySQL服务器集群执行过的所有SQL语句;
执行分析模块20,用于根据预定策略对SQL全量日志中的SQL的语句执行情况进行分析,得到相应的分析结果;
优化建议模块30,用于根据分析结果,给出SQL语句执行优化建议和/或数据库表结构优化建议。
本发明提供的装置会收集MySQL服务器集群的SQL全量日志,并基于获取的SQL全量日志对SQL语句的执行情况进行分析,进而可以给出相应的优化建议。本发明提供的技术方案可以自动地对SQL全量日志进行收集和分析,并根据得到的结果给出相应的优化建议,大大的方便了用户的使用,提高了用户体验。
在本发明的一个实施例中,如图7所示,全量获取模块10可以包括:
第一获取单元11,用于在MySQL服务器集群中的每个MySQL服务器上收集SQL日志并实时上传至各个MySQL服务器对应的中心服务器;
第二获取单元12,用于对各个MySQL服务器上传至中心服务器的SQL日志进行汇总;
第三获取单元13,用于定时将各个中心服务器中汇总的SQL日志上传至分布式文件系统,获取SQL全量日志。
在本发明的一个实施例中,如图7所示,全量获取模块10也可以包括:
第四获取单元14,用于在MySQL服务器集群中的每个MySQL服务器上收集SQL日志并实时上传至各个MySQL服务器对应的中心服务器;
第五获取单元15,用于对各个MySQL服务器上传至各个中心服务器的SQL日志进行汇总;
第六获取单元16,用于当中心服务器中汇总后的SQL日志的大小达到预定阈值时,将SQL日志上传至分布式文件系统,获取SQL全量日志。
需要说明的是,在图6中,全量获取模块10包括了全部的获取单元,即第一获取单元11、第二获取单元12、第三获取单元13、第四获取单元14、第五获取单元15、第六获取单元16,但是为实现全量获取模块10的功能只需要设置第一获取单元11、第二获取单元12、第三获取单元13,或者只设置第四获取单元14、第五获取单元15、第六获取单元16,而不需要设置所有的获取单元。当然,设置所有的单元也是可以的。
在本发明的一个实施例中,如图7所示,执行分析模块20可以包括:
数量分析单元21,用于统计每种类型的SQL语句的条目个数,及每种类型的SQL语句的条目个数在SQL全量日志包括的所有SQL语句的条目总数中所占的百分比;
时长分析单元22,用于分析每个SQL语句的执行时长、返回响应的数据行数,根据每个SQL语句的执行时长及其对应的数据行数对所有的SQL语句进行排行,统计出执行时长大于第一阈值的SQL语句。
在本发明的一个实施例中,如图7所示,优化建议模块30可以包括:
第一优化单元31,用于获取在所有SQL语句的条目总数中所占百分比低于第二阈值的SQL语句类型,获取与SQL语句类型对应的索引,给出删除上述索引以优化数据库表结构的建议和/或删除上述索引;和/或
第二优化单元32,用于分析造成执行时长大于第一预定阈值的SQL语句的执行时长大于第一阈值的原因,当原因为缺少特定索引时,给出在数据库表结构中添加上述特定索引以优化SQL语句执行的建议和/或在数据库表结构中添加上述特定索引。
在本发明的一个实施例中,如图7所示,执行分析模块20还可以包括:
数据映射单元23,用于将SQL全量日志对应的结构化的数据文件映射为一张数据库表;
查询执行单元24,用于基于用户输入的SQL查询语句,进行SQL查询。
本发明实施例提供的技术方案可以快速、高效地收集到MySQL服务器集群的SQL全量日志,并基于获取的SQL全量日志对SQL语句的执行情况进行分析,进而可以给出相应的优化建议。本发明提供的技术方案可以自动地对SQL全量日志进行收集和分析,并根据得到的结果给出相应的优化建议,大大的方便了用户的使用,提高了用户体验。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的SQL日志收集分析装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
根据本发明的一个方面,提供了A1.一种SQL日志收集分析方法,包括:
获取MySQL服务器集群的SQL全量日志,所述SQL全量日志中包括MySQL服务器集群执行过的所有SQL语句;
根据预定策略对所述SQL全量日志中的SQL语句的执行情况进行分析,得到相应的分析结果;
根据所述分析结果,给出SQL语句执行优化建议和/或数据库表结构优化建议。
A2.根据A1所述的方法,其中,所述获取MySQL服务器集群的SQL全量日志具体包括:
在所述MySQL服务器集群中的每个MySQL服务器上收集SQL日志并实时上传至各个所述MySQL服务器对应的中心服务器;
对各个MySQL服务器上传至所述中心服务器的SQL日志进行汇总;
定时将各个中心服务器中汇总的SQL日志上传至分布式文件系统,获取所述SQL全量日志。
A3.根据A1所述的方法,其中,所述获取MySQL服务器集群的SQL全量日志具体包括:
在所述MySQL服务器集群中的每个MySQL服务器上收集SQL日志并实时上传至各个所述MySQL服务器对应的中心服务器;
对各个MySQL服务器上传至所述中心服务器的SQL日志进行汇总;
当所述中心服务器中汇总后的所述SQL日志的大小达到预定阈值时,将所述SQL日志上传至分布式文件系统,获取所述SQL全量日志。
A4.根据A1所述的方法,其中,所述根据预定策略对所述SQL全量日志中的SQL语句的执行情况进行分析,得到相应的分析结果具体包括:
统计每种类型的SQL语句的条目个数,及每种类型的SQL语句的条目个数在所述SQL全量日志包括的所有SQL语句的条目总数中所占的百分比;
分析每个SQL语句的执行时长、返回响应的数据行数,根据每个SQL语句的执行时长及其对应的数据行数对所有的SQL语句进行排行,统计出执行时长大于第一阈值的SQL语句。
A5.根据A4所述的方法,其中,所述根据所述分析结果,给出SQL语句执行优化建议和/或数据库表结构优化建议具体包括:
获取在所述所有SQL语句的条目总数中所占百分比低于第二阈值的SQL语句类型,获取与所述SQL语句类型对应的索引,给出删除所述索引以优化数据库表结构的建议和/或删除所述索引;和/或
分析造成所述执行时长大于第一预定阈值的SQL语句的执行时长大于所述第一阈值的原因,当所述原因为缺少特定索引时,给出在数据库表结构中添加所述特定索引以优化SQL语句执行的建议和/或在数据库表结构中添加所述特定索引。
A6.根据A1-A 5任一项所述的方法,其中,所述根据预定策略对所述SQL全量日志中的SQL语句的执行情况进行分析还包括:
将所述SQL全量日志对应的结构化的数据文件映射为一张数据库表;
基于用户输入的SQL查询语句,进行SQL查询。
根据本发明的另一个方面,还提供了B7.一种SQL日志收集分析装置,包括:
全量获取模块,用于获取MySQL服务器集群的SQL全量日志,所述SQL全量日志中包括MySQL服务器集群执行过的所有SQL语句;
执行分析模块,用于根据预定策略对所述SQL全量日志中的SQL的语句执行情况进行分析,得到相应的分析结果;
优化建议模块,用于根据所述分析结果,给出SQL语句执行优化建议和/或数据库表结构优化建议。
B8.根据B7所述的装置,其中,所述全量获取模块包括:
第一获取单元,用于在所述MySQL服务器集群中的每个MySQL服务器上收集SQL日志并实时上传至各个所述MySQL服务器对应的中心服务器;
第二获取单元,用于对各个MySQL服务器上传至所述中心服务器的SQL日志进行汇总;
第三获取单元,用于定时将各个中心服务器中汇总的SQL日志上传至分布式文件系统,获取所述SQL全量日志。
B9.根据B7所述的装置,其中,所述全量获取模块日志包括:
第四获取单元,用于在所述MySQL服务器集群中的每个MySQL服务器上收集SQL日志并实时上传至各个所述MySQL服务器对应的中心服务器;
第五获取单元,用于对各个MySQL服务器上传至各个所述中心服务器的SQL日志进行汇总;
第六获取单元,用于当所述中心服务器中汇总后的所述SQL日志的大小达到预定阈值时,将所述SQL日志上传至分布式文件系统,获取所述SQL全量日志。
B10.根据B7所述的装置,其中,所述执行分析模块包括:
数量分析单元,用于统计每种类型的SQL语句的条目个数,及每种类型的SQL语句的条目个数在所述SQL全量日志包括的所有SQL语句的条目总数中所占的百分比;
时长分析单元,用于分析每个SQL语句的执行时长、返回响应的数据行数,根据每个SQL语句的执行时长及其对应的数据行数对所有的SQL语句进行排行,统计出执行时长大于第一阈值的SQL语句。
B11.根据B10所述的装置,其中,所述优化建议模块包括:
第一优化单元,用于获取在所述所有SQL语句的条目总数中所占百分比低于第二阈值的SQL语句类型,获取与所述SQL语句类型对应的索引,给出删除所述索引以优化数据库表结构的建议和/或删除所述索引;和/或
第二优化单元,用于分析造成所述执行时长大于第一预定阈值的SQL语句的执行时长大于所述第一阈值的原因,当所述原因为缺少特定索引时,给出在数据库表结构中添加所述特定索引以优化SQL语句执行的建议和/或在数据库表结构中添加所述特定索引。
B12.根据B7-B11任一项所述的装置,其中,所述执行分析模块还包括:
数据映射单元,用于将所述SQL全量日志对应的结构化的数据文件映射为一张数据库表;
查询执行单元,用于基于用户输入的SQL查询语句,进行SQL查询。