• 0
  • 0
分享
  • 数据库性能监控如何做?简单3步实现慢SQL、长事务监控!——软件测试圈
  • 恬恬圈 2024-10-08 16:54:19 字数 2896 阅读 430 收藏 0

  1.背景说明

  对于使用关系型数据库的系统而言,在系统投产上线后,及时发现程序运行中的慢SQL语句,能有效降低系统运行风险;对于分布式应用系统来说,在系统日常运行中,为避免因数据库长事务导致主备切换风险,实现对数据库长事务的监控,也是必不可少的。本文以MySQL数据库为例,概述通过数据库自带功能特性performance_schema实现对慢SQL和长事务的监控方法。

  2.performance_schema特性介绍

  (1)performance_schema 是运行在较低级别的用于监控MySQL Server运行过程中的资源消耗、资源等待等情况的一个功能特性,可以高效便捷实现对数据库事务和慢SQL的监控。

  (2)performance_schema的数据只保存在本地server的内存中,该库的数据发生变化时不会被写入binlog中,也不会通过复制机制被复制到其他server中,因此如果服务器重启,则历史数据丢失。

  3.performance_schema监控简介

  (1)慢SQL监控主要包含performance_schema的语句事件表,一般通过*_history、*_history_long表查询相关历史记录即可,*_current作为实时监控表仅供必要时参考。

  (2)事务监控主要包含performance_schema的事务事件表,一般通过*_history、*_history_long表查询相关历史记录,*_current实时监控表仅供必要时参考参考。

-1.png

  (3)因performance_schema中无法通过特定标识实现对慢SQL/事务的监控,因此一般需要利用请求执行时段作为筛选条件,实现对慢SQL/事务的监控和命中。

  (4)performance_schema计时器说明:

  1)事件的时间信息包含TIMER_START、TIMER_END、TIMER_WAIT共3个字段,q其单位均为皮秒(10-12秒)。TIMER_START和TIMER_END值分别表示事件开始时间、结束时间,TIMER_WAIT是事件持续时间,是衡量是否为长事务的主要指标。

  2)时间信息都是相对计时器基线(“时间零点”)以来的皮秒,计时器基线指自服务器启动期以来的时间。

  3)如果事件尚未完成,TIMER_END 则为当前计时器值并且 TIMER_WAIT是到目前为止经过的时间 ( TIMER_END- TIMER_START)。

  4.使用performance_schema监控步骤详解

  以事务监控为例,详细说明performance_schema用法。

  (1)performance_schema支持查验

  若PERFORMANCE_SCHEMA对应的Support列值为YES,则说明支持。

  -- 检查当前数据库版本是否支持performance_schema

  show engines;

  (2)查看 performance_schema启用是否生效

  -- 查看 performance_schema启用是否生效

  show variables like 'performance_schema';

  (3)直接访问performance_schema相关表

  1)获取实例启动时间

  获取实例已运行时间,用当前时间-实例已运行时间=实例启动时间。

  -- 获取实例已运行时间,单位为秒

  show global status like 'uptime';

  2)事件执行时段获取

  事件执行时段相关字段为TIMER_START、TIMER_END,计算方法为:

  TIMER_START=请求执行开始时间-实例启动时间;

  TIMER_END=请求执行结束时间-实例启动时间。

  3)长事务筛选

  长事务查询根据计算得出的事件开始时间TIMER_START、事件结束时间TIMER_END,系统设定长事务响应时间阈值TIMER_WAIT共同实现。例如:

  -- 查询某执行时段,事务响应时间超过0.01秒的数据库事务:

  select * from performance_schema.events_statements_history 

  where TIMER_START >= 3600000000000000 and TIMER_END <= 216000000000000000

  and TIMER_WAIT >= 10000000000;

  (4)示例

  请求执行时段为XXX,长事务响应时间阈值为0.01s,长事务查询过程如下:

  1)获取实例启动时间

  当前时间为2024/6/3 21:25:28,实例已运行时间为185270秒,则:

  实例启动时间=2024/6/3 21:25:28 - 185270

              =2024/6/1 17:57:38

  2)事件执行时段获取

  根据上一步骤,获取实例启动时间为2024/6/1 17:57:38,已知请求执行时段为2024/6/3 20:36:15-2024/6/3 20:36:17,则可得事件开始时间TIMER_START、事件结束时间TIMER_END分别为:

  TIMER_START=2024/6/3 20:36:15-2024/6/1 17:57:38

  =182317秒

  =182317000000000000皮秒

  TIMER_END=2024/6/3 20:36:17-2024/6/1 17:57:38

  =182319秒

  =182319000000000000皮秒

  3)长事务筛选

  已知事件开始时间TIMER_START、事件结束时间TIMER_END分别为182317000000000000皮秒、182319000000000000皮秒,系统长事务响应时间阈值为0.01s即10000000000皮秒,则据此组成筛选条件访问事务相关表:

  -- 查询执行时段为2024/6/3 20:36:15-2024/6/3 20:36:17,响应时间超过0.01秒的数据库事务:

  select * from performance_schema.events_statements_history 

  where TIMER_START >= 182317000000000000 and TIMER_END <= 182319000000000000 

  and TIMER_WAIT >= 10000000000;

  可根据查询结果中的SQL_TEXT字段定位对应SQL语句,附图如下:

-2.png

  5.总结

  数据库慢SQL、长事务因对请求响应时间、系统稳定运行存在一定影响,因此需要尽量在程序开发测试阶段识别并解决,此外还需加强投产上线的日常巡检,通过多阶段管控尽量避免问题发生,实现系统安全平稳运行。


微信底部.png

作者:常斌    

来源:http://www.51testing.com/html/72/n-7802672.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 简介pytest是动态编程语言Python专用的测试框架,它具有易于上手、功能强大、可扩展性好、兼容性强、效率高、第三方插件丰富等特点。功能特征:完整的文档,包括安装,教程和PDF文档简单而又详细的断言模式(使用纯assert语句)自动发现测试模块和功能(以test为标识)可以运行unittest和nose框架的测试用例灵活的固件,用于管理小型或参数化的长期测试资源丰富的插件架构,拥有三百多个外部插件和丰富的社区编写规则:测试文件以test_开头(以_test结尾也可以)测试类以Test开头,并且不能带有 init 方法测试函数以test_开头断言使用基本的assert即可自动发现规则:如果未...
            11 12 3157
            分享
          • 软件测试属于偏技术类的岗位,所以面试过程中会有很多技术方面的知识需要准备,但基本的面试要求还是跟其他岗位差不多的。首先简历是到公司面试的敲门砖,如果无法通过的第一步简历筛选,就没有后面的事了。所以简历一定要写好,千万不要出现错别字或者语句不通的地方,特别是别把专业名词写错了。如果有条件,可以找老师或者同学帮你看看简历,力求第一印象良好。如果是自荐简历,特别是校招,发送到邮箱的时候,一定要署名!一般格式(谁+应聘什么岗位+技术等级),这样可以让面试官面方便找到你的简历,你也可以在众多没名字的简历中脱颖而出。拿到面试机会之后,准备的内容跟普通岗位也是差不多的。首先就是想好一分钟的自我介绍(毕业学校...
            0 0 719
            分享
          • 对于一个待测试的对象,我们通常通过以下几个方面来进行测试:功能测试、可靠性测试、易用性测试、效率、可维护性、可移植性、安全性测试、界面测试等。本文将其分成两个方面来看:(1)站在测试人员的技术测试角度(功能测试、可靠性测试、兼容性、可维护性、效率、可移植性、安全性测试、可维护性)(2)站在用户的角度(功能测试、易用性测试)站在测试人员的技术测试角度:1.功能测试功能测试是软件测试中最基本的测试,功能实现不满足要求,软件就不能发布测试。要进行功能测试,首先就需要了解朋友圈的各个功能,那么如何了解朋友圈的功能呢?——需求文档。因为所有的开发设计、测试设计等,都是以需求文档来进行的。需求文档中规定了...
            0 0 6244
            分享
          •   见习测试工程师  任职要求:  1.应往届理工科毕业生,有志于在IT行业发展。  2.计算机相关专业;  3.有计算机语言者优先,如:C语言、C++、Java、.Net等。  初级测试工程师  任职要求:  1.一年以上软件测试经验,熟悉各种测试方法、测试工具、测试流程;  2.本科及以上学历,计算机相关专业;  3.有较强的分析问题能力和文字表达能力,逆向思维好;能完成测试方案、测试案例、测试报告的编写;  4.热爱软件测试工作,可以胜任重复性工作;  5.具有较强的沟通理解能力和协调能力,对工作积极主动、认真负责;  中级测试工程师  任职要求:  1.三年以上软件测试工作经验;  2...
            0 0 3585
            分享
          •   导读  当前,在计算机主机的应用处理模式中,批量处理作为一种事后数据处理方式,一直是一种简单而又非常重要的处理方式,尤其是对于海量数据处理,批量方式就更能显示其高效的处理效果。随着批量交易变得越来越复杂,以及对批量处理时效性的要求,迫切需要有一种有效的、快速的批量作业测试方式,以实现对批量处理的自动化测试。  批量处理  批量处理是指将数据以按批处理的模式完成大量的数据访问、计算、分类、分析、汇总的过程,最终输出大量的营业分析报表,表现出数据访问量大,计算量大,流程复杂等特性。  一般而言,批量处理通过建立作业计划模板,以人工干预或系统自动调起程序的方式执行,模板中包含若干根据业务逻辑处理...
            0 1 2544
            分享
      • 51testing软件测试圈微信