CN112765017A - 基于MySQL数据库的数据查询性能测试方法和装置 - Google Patents

基于MySQL数据库的数据查询性能测试方法和装置 Download PDF

Info

Publication number
CN112765017A
CN112765017A CN202110027795.5A CN202110027795A CN112765017A CN 112765017 A CN112765017 A CN 112765017A CN 202110027795 A CN202110027795 A CN 202110027795A CN 112765017 A CN112765017 A CN 112765017A
Authority
CN
China
Prior art keywords
sql
full
query log
application program
slow query
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202110027795.5A
Other languages
English (en)
Inventor
赵培
周辰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Industrial and Commercial Bank of China Ltd ICBC
Original Assignee
Industrial and Commercial Bank of China Ltd ICBC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Industrial and Commercial Bank of China Ltd ICBC filed Critical Industrial and Commercial Bank of China Ltd ICBC
Priority to CN202110027795.5A priority Critical patent/CN112765017A/zh
Publication of CN112765017A publication Critical patent/CN112765017A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本公开提供了一种基于MySQL数据库的数据查询性能测试方法和装置,可用于金融领域或其他领域。所述方法包括:获取在测试环境下应用程序运行过程中因查询MySQL数据库而产生的慢查询日志;其中,所述应用程序的代码包括嵌入式SQL,所述慢查询日志中所记录的查询语句的响应时间的阀值被设置为0;从所述慢查询日志中获取所述应用程序运行中所使用到的全量SQL语句;以及对所述全量SQL语句进行分析检测。本公开还提供了一种电子设备、以及一种计算机可读存储介质。

Description

基于MySQL数据库的数据查询性能测试方法和装置
技术领域
本公开属于大数据技术领域,更具体地,涉及一种机基于MySQL数据库的数据查询性能测试方法和装置、一种电子设备、以及一种计算机可读存储介质。
背景技术
随着开源数据库的逐步应用,MySQL数据库替代传统集中式数据库成为主流,更多的逻辑实现由后端的存储过程转为前端应用程序实现,而特别复杂的逻辑处理难以用一条交互式SQL语句完成,此时需要结合高级语言中经常出现的顺序、分支和循环结构帮助处理,于是基于MySQL数据库嵌入式SQL的开发成为一种趋势。其中,嵌入式SQL为将SQL语句嵌入到某一种高级语言(例如mybatis,java,C++等)中使用。
包含有嵌入式SQL的应用程序在运行过程中,通过代码中的嵌入的SQL语句查询MySQL数据库。因此,对于应用程序查询MySQL数据库进行预先测试,对于保障应用程序的稳定和快速运行非常关键。目前的做法通常是在开发人员完成代码开发后,手动从程序代码中获取各个逻辑单元的SQL代码部分,然后组合成完整的sql代码,并在此基础上进行SQL性能预估。
然而过多依赖开发人员手动操作,往往出现遗漏某个分支导致拼接的SQL语句不完整,以及手动编辑出现多余空格、换行等准确性问题,导致与实际运行SQL代码写法不一致,性能预估结果失真。
发明内容
有鉴于此,本公开实施例提供了一种可以自动获取应用程序运行中执行的全量SQL语句的基于MySQL数据库的数据查询性能测试方法和装置、以及相应的电子设备和计算机可读存储介质。
本公开实施例的一个方面提供了一种基于MySQL数据库的数据查询性能测试方法。所述方法包括:获取在测试环境下应用程序运行过程中因查询MySQL数据库而产生的慢查询日志;其中,所述应用程序的代码包括嵌入式SQL,所述慢查询日志中所记录的查询语句的响应时间的阀值被设置为0;从所述慢查询日志中获取所述应用程序运行中所使用到的全量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加入ignore标记。
本公开实施例的另一方面,提供了一种基于MySQL数据库的数据查询性能测试装置。所述装置包括第一获取模块、第二获取模块、以及性能检测模块。第一获取模块用于获取在测试环境下应用程序运行过程中因查询MySQL数据库而产生的慢查询日志;其中,所述应用程序的代码包括嵌入式SQL,所述慢查询日志中所记录的查询语句的响应时间的阀值被设置为0。第二获取模块用于从所述慢查询日志中获取所述应用程序运行中所使用到的全量SQL语句。性能检测模块用于对所述全量SQL语句进行分析检测。
根据本公开的实施例,所述装置还包括参数设置模块。所述参数设置模块用于预先设置在测试环境下所述慢查询日志的关键参数,其中,所述关键参数包括所述响应时间的阀值。
根据本公开的实施例,所述装置还包括优化模块。所述优化模块用于基于所述分析检测,优化所述应用程序的代码中设置的嵌入式SQL。
本公开实施例的另一方面,提供了一种电子设备。所述电子设备包括一个或多个存储器、以及一个或多个处理器。所述存储器存储有可执行指令。所述处理器执行所述可执行指令以实现如上所述的方法。
本公开实施例的另一方面,提供了一种计算机可读存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
本公开实施例的另一方面,提供了一种计算机程序,所述计算机程序包括计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
上述一个或多个实施例,针对相关技术中SQL全量代码手动获取不完整和不准确的问题,通过在测试环境将慢查询日志中所记录的查询语句的响应时间的阀值被设置为0,使得应用程序运行中执行的所有SQL语句都可以被写入到慢查询日志中,从而可以从慢查询日志中自动准确地获取全量SQL语句。
根据本公开的另一些实施例,通过在测试环境将慢查询日志的关键参数进行特殊设置,可以从慢查询日志中获取到SQL语句多维度的信息,从而可以提供多维度分析方法对全量SQL进行全面性能检测,有效改善相关技术中仅通过执行计划单维度来判断是否存在潜在性能风险的不足。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的基于MySQL数据库的数据查询性能测试方法和装置的系统架构;
图2示意性示出了根据本公开一实施例的基于MySQL数据库的数据查询性能测试方法的流程图;
图3示意性示出了根据本公开另一实施例的基于MySQL数据库的数据查询性能测试方法的流程图;
图4示意性示出了根据本公开一实施例的基于MySQL数据库的数据查询性能测试装置的框图;
图5示意性示出了根据本公开实施例的基于MySQL数据库的数据查询性能测试方法的一个应用实例的流程图;
图6示意性示出了与图5的方法流程对应的基于MySQL数据库的数据查询性能测试装置的框图;
图7示意性示出了应用图6所示的装置进行数据查询性能测试的方法流程图;以及
图8示意性示出了适于实现根据本公开实施例的基于MySQL数据库的数据查询性能测试方法的电子设备的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B或C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
本公开的实施例提供了一种基于MySQL数据库的数据查询性能测试方法和装置、一种电子设备、以及一种计算机可读存储介质。该方法包括首先获取在测试环境下应用程序运行过程中因查询MySQL数据库而产生的慢查询日志,其中,该应用程序的代码包括嵌入式SQL,该慢查询日志中所记录的查询语句的响应时间的阀值被设置为0。然后从慢查询日志中获取应用程序运行中所使用到的全量SQL语句。之后,对全量SQL语句进行分析检测。
根据本公开的实施例,针对相关技术中SQL全量代码手动获取不完整和不准确的问题,通过在测试环境将慢查询日志中所记录的查询语句的响应时间的阀值设置为0,使得应用程序运行中执行的所有SQL语句都可以被写入到慢查询日志中,从而可以从慢查询日志中自动准确地获取全量SQL语句。
根据本公开的另一些实施例,通过在测试环境将慢查询日志的关键参数进行特殊设置,可以从慢查询日志中获取到SQL语句多维度的信息,从而可以提供多维度分析方法对全量SQL进行全面性能检测,有效改善相关技术中仅通过执行计划来判断是否存在潜在性能风险的缺陷。
需要说明的是,本公开实施例确定的基于MySQL数据库的数据查询性能测试方法和装置可用于金融领域,也可用于除金融领域之外的任意领域(例如,物流、医疗、航天、军工等),本公开对应用领域不做限定。
图1示意性示出了根据本公开实施例的基于MySQL数据库的数据查询性能测试方法和装置的系统架构100。需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
如图1所示,根据该实施例的系统架构100可以包括终端设备101、网络104和一个或多个数据库服务器103。网络102为用以在终端设备101、和数据库服务器103之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
终端设备101上可以安装客户端应用,例如手机银行App等(仅为示例)。用户通过在终端设备101中操作该客户端应用,与数据库服务器103进行交互。
数据库服务器103例如可以是基于MySQL数据库的服务器。数据库服务器103可以接收用户利用终端设备101发送的访问请求,并运行为客户端应用提供后台服务的应用程序。其中,该应用程序的代码中例如可以包括嵌入式SQL。该应用程序在运行过程中,可以通过代码中的嵌入式SQL调用相应的SQL查询语句,进行MySQL数据库的查询操作。
本公开实施例应用于该应用程序投入生产之前的测试环节,例如终端设备101具体为测试用终端,并且在数据库服务器103中模拟生产环境的数据量、数据类型等,构造出独立于生产环境的测试环境,并在该测试环境下由数据库服务器103执行本公开实施例的方法,自动获取应用程序运行过程中使用的全量SQL语句,并进行性能分析,以此来预估应用程序投产后查询MySQL数据库的性能。
应该理解,图1中的终端设备、网络和服务器的种类和数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
图2示意性示出了根据本公开一实施例的基于MySQL数据库的数据查询性能测试方法的流程图。
如图2所示,该基于MySQL数据库的数据查询性能测试方法可以包括操作S210~操作S230。
在操作S210,获取在测试环境下应用程序运行过程中因查询MySQL数据库而产生的慢查询日志。其中,应用程序的代码包括嵌入式SQL,慢查询日志中所记录的查询语句的响应时间的阀值被设置为0。
根据本公开的一个实施例,该响应时间的阀值可以是在操作S210之前对慢查询日志进行预先设置确定的。例如,可以预先设置在测试环境下慢查询日志的关键参数,其中,关键参数包括响应时间的阀值。
根据本公开的一些实施例,该关键参数除了上述的响应时间的阀值外,还可以包括未使用索引监控参数、SQL执行开销分析参数、或者路径选择分析参数等。
在测试环境下所使用的参数状态与生产环境下可能不同。例如,通常在生产运营环境下,该响应时间的阀值都是大于0的,通过将响应时间大于阀值的查询语句写入慢查询日志,可以便于通过慢查询日志监控对MySQL数据库进行查询时可能出现的问题。本公开实施例在测试环境下将中所记录的查询语句的响应时间的阀值设置为0,可以使应用程序运行过程中使用到的SQL语句都写入到慢查询日志中。
又例如,未使用索引监控参数、SQL执行开销分析参数、或者路径选择分析参数等参数在生产环境下可能设置为关闭不获取,这样可以降低生产环境下的数据处理量。而在测试环境下,可以开启相应的参数的记录,以便于对数据查询过程进行相应的性能分析。
在操作S220,从慢查询日志中获取应用程序运行中所使用到的全量SQL语句。慢查询日志中会记录响应时间超过阀值的查询语句,而由于本公开实施例中在测试环境下该响应时间的阀值设置为0,从而可以从慢查询日志中比较完整地获取到应用程序运行所使用到的SQL语句,减少获取SQL语句时存在的遗漏。
在操作S230,对全量SQL语句进行分析检测。根据本公开的实施例,该分析检测例如可以包括多维度的分析检测。
例如,在慢查询日志中记录有每个SQL语句的执行时间、锁表时间、访问数据量、执行次数中的至少一个参数时,可以按照慢查询日志中记录的全量SQL语句中每个SQL语句的执行时间、锁表时间、访问数据量、执行次数中的至少一个参数,按照一定的策略或规则筛选出性能最为低下的一组第一SQL语句,然后通过查看每个第一SQL语句的执行计划,确定第一SQL语句的可优化内容。
或者例如,在预先设置的慢查询日志的关键参数包括了未使用索引监控参数的情况下(例如,设置log_queries_not_using_indexes=on),可以基于在慢查询日志中每个SQL语句的未使用索引监控参数的取值,查看未使用的索引、或者各个索引的使用频率。如果有未使用的索引,说明这些索引很可能是冗余的,需要进一步核实和精简索引。根据各个索引的使用频率,可以对索引的位置排序进行调整,将使用率高的索引排序靠前,便于提高SQL语句基于索引查表的效率。
再或者例如,在预先设置的慢查询日志的关键参数包括了SQL执行开销分析参数的情况下(例如,设置profiling=1),可以基于在慢查询日志中每个SQL语句的SQL执行开销分析参数的取值,分析全量SQL语句的开销所集中的事件。一般情况下,SQL执行开销分析通常集中在CPU消耗、或者I/O消耗上。如果分析中发现SQL语句的开销所集中的事件在其他方面,此时就需要警惕,例如检查是否存在SQL语句设计错误、或者检查数据库状态。
又或者例如,在预先设置的慢查询日志的关键参数包括了路径选择分析参数的情况下(例如,设置optimizer_trace=’enabled=on’),则可以基于在慢查询日志中每个SQL语句的路径选择分析参数的取值,分析全量SQL语句中使用了错误执行计划的SQL语句的路径选择失败原因。
可见,根据本公开的实施例,通过在测试环境将慢查询日志的关键参数进行特殊设置,可以从慢查询日志中获取到SQL语句多维度的信息,从而可以提供多维度分析方法对全量SQL进行全面性能检测,有效改善相关技术中仅通过执行计划来判断是否存在潜在性能风险的缺陷。
图3示意性示出了根据本公开另一实施例的基于MySQL数据库的数据查询性能测试方法的流程图。
如图3所示,根据本公开实施例该数据查询性能测试方法在操作S210~操作S230之后,还可以包括操作S340。
在操作S340,基于分析检测,优化应用程序的代码中设置的嵌入式SQL。
例如,在慢查询日志中查询到存在针对一个记录的多步DML操作时,可以将该多步DML操作对应的应用程序的代码进行整合。
再例如,在通过慢查询日志查询到存在重复值插入失败的第二SQL语句时,可以对第二SQL语句对应的应用程序的代码中设置的嵌入式SQL加入ignore标记,以此来忽略主键冲突。
又例如,在通过慢查询日志查询到SQL语句的开销信息时,对于I/O消耗比较高的SQL,可以对基于TCC(Try-Confirm/Cancle)逻辑的事务,将每笔交易自动commit修改为批量commit(例如,500笔commit),以此来降低I/O消耗。
图4示意性示出了根据本公开一实施例的基于MySQL数据库的数据查询性能测试装置400的框图。
如图4所示,根据本公开实施例的装置400可以包括第一获取模块410、第二获取模块420、以及性能检测模块430。根据本公开另一些实施例,该装置400还可以进一步包括参数设置模块440、和/或优化模块450。该装置400可以用于执行参考图2和图3所描述的方法。
第一获取模块410例如可以执行操作S210,用于获取在测试环境下应用程序运行过程中因查询MySQL数据库而产生的慢查询日志;其中,应用程序的代码包括嵌入式SQL,慢查询日志中所记录的查询语句的响应时间的阀值被设置为0。
第二获取模块420例如可以执行操作S220,用于从慢查询日志中获取应用程序运行中所使用到的全量SQL语句。
性能检测模块430例如可以执行操作S230,用于对全量SQL语句进行分析检测。
参数设置模块440用于预先设置在测试环境下慢查询日志的关键参数。
优化模块450例如可以执行操作S340,用于基于分析检测,优化应用程序的代码中设置的嵌入式SQL。
根据本公开实施例的装置400,通过在测试环境将慢查询日志中所记录的查询语句的响应时间的阀值设置为0,使得应用程序运行中执行的所有SQL语句都可以被写入到慢查询日志中,从而可以从慢查询日志中自动准确地获取全量SQL语句。根据本公开的另一些实施例,通过在测试环境将慢查询日志的关键参数进行特殊设置,可以从慢查询日志中获取到SQL语句多维度的信息,从而可以提供多维度分析方法对全量SQL进行全面性能检测。具体参考前述图2~图3的描述,此处不再赘述。
图5示意性示出了根据本公开实施例的基于MySQL数据库的数据查询性能测试方法的一个应用实例的流程图。
如图5所示,该应用实例涉及环境数据及参数准备、在测试阶段获取全量SQL、通过多维分析进行性能分析、以及提供优化建议等多个过程。
图6示意性示出了与图5的方法流程对应的基于MySQL数据库的数据查询性能测试装置600的框图。图7示意性示出了应用图6所示的装置进行数据查询性能测试的方法流程图。可以理解,图6和图7所示的应用实例仅为本公开实施例的一个示例性说明,不对本公开构成任何限定。
结合图6和图7,该数据查询性能测试装置600可以包括环境配置单元610、全量SQL捕获单元620、性能分析单元630、以及优化措施单元640。
具体地,环境配置单元610可以用于执行图7中的操作S101~操作S103,包括数据量预估、模拟造数、以及参数设置。具体地,数据量预估,可以是为了在测试环境下模拟应用程序在生产环境下某一场景中运行时的情况,预估在生产环境下该场景中MySQL数据库中的数据量、数据类型、数据存储格式等。模拟造数是根据数据量预估结果,准备一套独立于生产环境的MySQL性能测试环境。参数设置即设置在测试环境下慢查询日志的关键参数。该关键参数例如可以包括:SQL响应时间的阀值long_query_time(例如,设置long_query_timeO)、和/或未使用索引监控参数log_queries_not_using_indexes(例如可根据需要选择开启)、和/或SQL执行开销分析参数profiling(例如,可以设置profiling=1)、和/或路径选择分析参数optimizer_trace(例如,可以设置optimizer_trace=’enabled=on’)。
全量SQL捕获单元620可以用于执行图7中的操作S201~操作S203,包括交易完整性测试、写入慢日志、以及SQL过滤。例如,可以依赖环境配置单元610中对关键参数的设置,对需要涉及的全量交易进行通过性测试,将查询数据库的SQL语句写入慢查询日志,然后通过操作系统grep命令对无关SQL(例如,与操作系统相关而非应用程序相关的SQL语句)进行过滤,获取到应用程序运行过程中使用到的全量SQL。
性能分析单元630可以用于执行图7中的操作S301~操作S305,包括TOP SQL筛选、执行计划分析、索引使用分析、开销分析、和/或路径选择分析。
TOP SQL筛选例如可以使用Mysqldumpslow工具,按照执行时间、锁表时间、访问数据量、或执行次数等筛选出性能低下一组SQL语句,并进行分析优化。
执行计划分析例如,可以通过exlplain和show warnings看SQL语句的可优化内容;对于分区表,可以通过explain partitions可以定位访问的分区范围。
索引使用分析,例如可以结合执行计划,进一步通过schema_unused_indexes视图在sys库查看未使用的索引、和/或索引使用频率。
开销分析例如可以通过show profile分析SQL资源消耗情况,进一步定位开销集中在哪些事件上。
路径选择分析,例如,对于使用了错误执行计划的SQL,通过information_schema.optimizer_trace视图深入分析路径选择失败原因。
优化措施单元640可以用于执行图7中的操作S401,提供优化建议。例如,可以通过Mysqldumpslow工具查看性能低下的SQL语句,并通过性能分析单元630的多维度分析,给出一些优化建议。例如,针对查询语句,通过explain执行计划定位出进行全表扫描的SQL语句。针对这类SQL语句可以结合开销分析确定优化目标。例如,可以建议此类SQL语句所查询的普通表改为分区表,并通过schema_unused_indexes视图进行索引分析,创建分区表索引提升访问效率。或者例如,针对对一个记录进行插入、更新等多步DML(Data ManipulationLanguage,数据操作语言)操作,经分析可以通过on duplicate key类merge的方法实现一步整合。再或者例如,在慢查询日志获取的全量SQL中发现有重复值插入失败的SQL语句,建议对这类SQL语句在嵌入程序代码时添加Insert ignore,以此来忽略主键冲突。又或者例如,对基于TCC(Try-Confirm/Cancle)逻辑的事务,将每笔交易自动commit修改为分阶段批量commit(例如,500笔commit)。
在本发明人的一个实际应用实践中,通过在不同数据集中进行测试对比,在使用了事务控制和ignore,可使等待时间大于1s的SQL语句等待数量快速下降。
根据本公开的实施例的模块、子模块、单元、子单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块、单元、子单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
例如,第一获取模块410、第二获取模块420、性能检测模块430、参数设置模块440、优化模块450、环境配置单元610、全量SQL获取单元620、性能分析单元630、以及优化措施单元640中的任意多个可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,第一获取模块410、第二获取模块420、性能检测模块430、参数设置模块440、优化模块450、环境配置单元610、全量SQL获取单元620、性能分析单元630、以及优化措施单元640中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,第一获取模块410、第二获取模块420、性能检测模块430、参数设置模块440、优化模块450、环境配置单元610、全量SQL获取单元620、性能分析单元630、以及优化措施单元640中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图8示意性示出了适于实现根据本公开实施例的基于MySQL数据库的数据查询性能测试方法的电子设备800的方框图。图8示出的电子设备800仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图8所示,根据本公开实施例的电子设备800包括处理器801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储部分808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。处理器801例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器801还可以包括用于缓存用途的板载存储器。处理器801可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 803中,存储有电子设备800操作所需的各种程序和数据。处理器801、ROM802以及RAM 803通过总线804彼此相连。处理器801通过执行ROM 802和/或RAM 803中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,程序也可以存储在除ROM802和RAM 803以外的一个或多个存储器中。处理器801也可以通过执行存储在一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备800还可以包括输入/输出(I/O)接口805,输入/输出(I/O)接口805也连接至总线804。电子设备800还可以包括连接至I/O接口805的以下部件中的一项或多项:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
根据本公开的实施例,根据本公开实施例的方法流程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被处理器801执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM802和/或RAM 803和/或ROM 802和RAM 803以外的一个或多个存储器。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行本公开实施例所提供的方法的程序代码,当计算机程序产品在电子设备上运行时,该程序代码用于使电子设备实现本公开实施例所提供的图像识别方法。
在该计算机程序被处理器801执行时,执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分809被下载和安装,和/或从可拆卸介质811被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

Claims (13)

1.一种基于MySQL数据库的数据查询性能测试方法,包括:
获取在测试环境下应用程序运行过程中因查询MySQL数据库而产生的慢查询日志;其中,所述应用程序的代码包括嵌入式SQL,所述慢查询日志中所记录的查询语句的响应时间的阀值被设置为0;
从所述慢查询日志中获取所述应用程序运行中所使用到的全量SQL语句;以及
对所述全量SQL语句进行分析检测。
2.根据权利要求1所述的方法,其中,所述对所述全量SQL语句进行分析检测包括:
按照所述全量SQL语句中每个SQL语句的执行时间、锁表时间、访问数据量、执行次数中的至少一个参数,筛选出所述全量SQL语句中性能最为低下的一组第一SQL语句;以及
通过查看每个所述第一SQL语句的执行计划,确定所述第一SQL语句的可优化内容。
3.根据权利要求1所述的方法,其中,所述方法还包括:
预先设置在测试环境下所述慢查询日志的关键参数,其中,所述关键参数包括所述响应时间的阀值。
4.根据权利要求3所述的方法,其中,所述关键参数还包括以下至少之一:
未使用索引监控参数;
SQL执行开销分析参数;或者
路径选择分析参数。
5.根据权利要求4所述的方法,其中,所述对所述全量SQL语句进行分析检测包括:
基于在所述慢查询日志中每个SQL语句的未使用索引监控参数的取值,查看未使用的索引、或者各个索引的使用频率。
6.根据权利要求4所述的方法,其中,所述对所述全量SQL语句进行分析检测包括:
基于在所述慢查询日志中每个SQL语句的SQL执行开销分析参数的取值,分析所述全量SQL语句的开销所集中的事件。
7.根据权利要求4所述的方法,其中,所述对所述全量SQL语句进行分析检测包括:
基于在所述慢查询日志中每个SQL语句的路径选择分析参数的取值,分析所述全量SQL语句中使用了错误执行计划的SQL语句的路径选择失败原因。
8.根据权利要求1~7任一项所述的方法,其中,所述方法还包括:
基于所述分析检测,优化所述应用程序的代码中设置的嵌入式SQL。
9.根据权利要求8所述的方法,其中,所述基于所述分析检测,优化所述应用程序的代码中设置的嵌入式SQL包括:
在所述慢查询日志中查询到存在针对一个记录的多步操作时,将所述多步操作对应的所述应用程序的代码进行整合。
10.根据权利要求8所述的方法,其中,所述基于所述分析检测,优化所述应用程序的代码中设置的嵌入式SQL包括:
在通过所述慢查询日志查询到存在重复值插入失败的第二SQL语句时,对所述第二SQL语句对应的所述应用程序的代码中设置的嵌入式SQL加入ignore标记。
11.一种基于MySQL数据库的数据查询性能测试装置,包括:
第一获取模块,用于获取在测试环境下应用程序运行过程中因查询MySQL数据库而产生的慢查询日志;其中,所述应用程序的代码包括嵌入式SQL,所述慢查询日志中所记录的查询语句的响应时间的阀值被设置为0;
第二获取模块,用于从所述慢查询日志中获取所述应用程序运行中所使用到的全量SQL语句;以及
性能检测模块,用于对所述全量SQL语句进行分析检测。
12.一种电子设备,包括:
一个或多个存储器,存储有可执行指令;以及
一个或多个处理器,执行所述可执行指令,以实现根据权利要求1~10中任一项所述的方法。
13.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行根据权利要求1~10中任一项所述的方法。
CN202110027795.5A 2021-01-08 2021-01-08 基于MySQL数据库的数据查询性能测试方法和装置 Pending CN112765017A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110027795.5A CN112765017A (zh) 2021-01-08 2021-01-08 基于MySQL数据库的数据查询性能测试方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110027795.5A CN112765017A (zh) 2021-01-08 2021-01-08 基于MySQL数据库的数据查询性能测试方法和装置

Publications (1)

Publication Number Publication Date
CN112765017A true CN112765017A (zh) 2021-05-07

Family

ID=75701179

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110027795.5A Pending CN112765017A (zh) 2021-01-08 2021-01-08 基于MySQL数据库的数据查询性能测试方法和装置

Country Status (1)

Country Link
CN (1) CN112765017A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113434529A (zh) * 2021-06-22 2021-09-24 青岛海尔科技有限公司 业务数据查询方法、装置、存储介质、处理器及电子设备
CN113535773A (zh) * 2021-07-27 2021-10-22 工银科技有限公司 数据库优化方法、数据库优化装置、电子设备和存储介质
CN114020794A (zh) * 2022-01-06 2022-02-08 北京快成科技有限公司 一种MySQL数据库慢查询的处理方法、装置、介质和设备
CN115982211A (zh) * 2022-12-02 2023-04-18 北京凌云雀科技有限公司 基于云原生的MySQL数据查询分析方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106844497A (zh) * 2016-12-26 2017-06-13 努比亚技术有限公司 一种数据库代码的检查装置和方法
CN108509530A (zh) * 2018-03-14 2018-09-07 武汉斗鱼网络科技有限公司 一种MySQL慢查询语句自动优化方法、计算机设备和存储介质
CN110209395A (zh) * 2019-06-04 2019-09-06 沈阳欧瑞科技有限公司 一种将sql嵌入高级语言的方法、设备及介质
CN112181840A (zh) * 2020-09-30 2021-01-05 深圳前海微众银行股份有限公司 一种数据库状态的确定方法及装置、设备、存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106844497A (zh) * 2016-12-26 2017-06-13 努比亚技术有限公司 一种数据库代码的检查装置和方法
CN108509530A (zh) * 2018-03-14 2018-09-07 武汉斗鱼网络科技有限公司 一种MySQL慢查询语句自动优化方法、计算机设备和存储介质
CN110209395A (zh) * 2019-06-04 2019-09-06 沈阳欧瑞科技有限公司 一种将sql嵌入高级语言的方法、设备及介质
CN112181840A (zh) * 2020-09-30 2021-01-05 深圳前海微众银行股份有限公司 一种数据库状态的确定方法及装置、设备、存储介质

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113434529A (zh) * 2021-06-22 2021-09-24 青岛海尔科技有限公司 业务数据查询方法、装置、存储介质、处理器及电子设备
CN113434529B (zh) * 2021-06-22 2023-06-16 青岛海尔科技有限公司 业务数据查询方法、装置、存储介质、处理器及电子设备
CN113535773A (zh) * 2021-07-27 2021-10-22 工银科技有限公司 数据库优化方法、数据库优化装置、电子设备和存储介质
CN113535773B (zh) * 2021-07-27 2022-08-12 工银科技有限公司 数据库优化方法、数据库优化装置、电子设备和存储介质
CN114020794A (zh) * 2022-01-06 2022-02-08 北京快成科技有限公司 一种MySQL数据库慢查询的处理方法、装置、介质和设备
CN115982211A (zh) * 2022-12-02 2023-04-18 北京凌云雀科技有限公司 基于云原生的MySQL数据查询分析方法及装置
CN115982211B (zh) * 2022-12-02 2023-09-26 北京凌云雀科技有限公司 基于云原生的MySQL数据查询分析方法及装置

Similar Documents

Publication Publication Date Title
KR101989802B1 (ko) 테스트 케이스를 이용하여 테스트를 수행하는 방법 및 장치
US9898280B2 (en) Automatic code review and code reviewer recommendation
US9208057B2 (en) Efficient model checking technique for finding software defects
CN112765017A (zh) 基于MySQL数据库的数据查询性能测试方法和装置
US9507697B2 (en) Completing functional testing
US9047402B2 (en) Automatic calculation of orthogonal defect classification (ODC) fields
US8473915B2 (en) Coverage analysis tool for testing database-aware software applications
US20090037873A1 (en) Displaying and refactoring programs that include database statements
Macke et al. Fine-grained lineage for safer notebook interactions
EP3215947B1 (en) Application testing
US20160019056A1 (en) Techniques for Automatically Identifying Input Files Used to Generate Output Files in a Software Build Process
AU2021201363B2 (en) Format-specific data processing operations
Shacham et al. Verifying atomicity via data independence
CN102981946A (zh) Etl冒烟测试方法
US8510714B2 (en) Implementing integrated documentation and application testing
US9679245B2 (en) Predicting the impact of change on events detected in application logic
CN114968817A (zh) 代码改动影响范围的评估方法、装置、设备及存储介质
US11100131B2 (en) Simulation of a synchronization of records
Li et al. Spinart: A spin-based verifier for artifact systems
US9098624B1 (en) Deep type parsing
CN116339755A (zh) 数据库对象的安装方法、装置、设备和介质
CN117707976A (zh) 一种确定代码变更的影响范围的方法、装置和设备
CN116136800A (zh) 一种操作系统死锁静态检测方法及相关设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination