51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1489|回复: 1
打印 上一主题 下一主题

性能测试之数据库监控与分析

[复制链接]
  • TA的每日心情
    无聊
    前天 09:05
  • 签到天数: 1050 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2020-10-27 09:41:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    性能测试过程中,数据库相关性能对系统的影响是不可小觑的。以Mysql为例,做一个简单介绍。  影响数据库性能的因素
      服务器硬件
      mysql参数配置
    1. show variables like '%query_cache%';  查询缓存

    2.   show variables like '%read_buffer_size%';读入缓冲区大小

    3.   show variables like '%max_connections%';连接数

    4.   show variables like '%tmp_table_size%';临时表大小

    5.   慢sql语句
    复制代码
    ..........  性能测试如何获取慢sql
      mysql服务器硬件和mysql参数配置,可能在我们日常分析工作中会有占用分析时间会小于慢sql语句,那如何获取慢sql?
      使用连接池工具直接获取
      比如较常用的连接池——druid
      浏览器访问:项目地址/druid/sql.html  可以直接看到慢sql

    通过慢日志获取慢sql
      -- 慢查询日志是否开启
      show variables like "slow_query_log";
      -- 慢sql的时间定义
      show variables like 'slow_launch_time';
      -- 慢日志输出方式FILE/TABLE
      show variables like 'slow_query_log_file';
      set可以设置如上变量。
      慢sql的文件地址在slow_query_log_file,可以直接查看。
      注:推荐一款慢日志分析工具:pt-query-digest

    分析慢sql
      profiling
      show variables like '%profiling%';
      set profiling=1; 打开profiling
      执行你从慢日志中看到的语句
      show profiles;
      show profile ALL for query 10; 10为show  profiles中慢sql的执行id
      profiling可以看到sql执行的全过程,和各个环节的时间耗费,方便定位问题


    2. explain 执行计划

    explain  慢sql语句; 查看sql的执行计划
      执行计划中各字段的含义
      type:访问方式 (最重要)
      性能越靠下越高
      ALL   全表扫描
      index 全索引表扫描
      range 索引进行范围扫描
      index_merge 合并索引,使用多个单列索引扫描
      ref_or_null
      ref 非唯一索引扫描
      eq_ref  唯一索引扫描
      system
      const
      NULL
      table:正在访问的表名
      possible_keys:可能使用的索引
      key_len:MySQL中使用索引字节长度
      rows:预估为了找到所需的行而要读取的行数
      select_type:       解释    示例sql
      simple  简单的select   select * from tb_student
      primary 需要union或者子查询    select (select name from tb_student where id =1) from tb_student
      union   union操作 select * from tb_student union select * from tb_student
      dependent union 查询与外部相关(mysql优化器会将in优化成exists)  select * from tb_student where id in(select id from tb_student union select id from tb_student)      select * from tb_student a where EXISTS (select 1 from tb_student where id = a.id union select id from tb_student where id = a.id)
      union result    union结果集    select * from tb_student union select * from tb_student
      subquery    除了from包含的子查询 select (select name from tb_student where id =1) from tb_student
      depend subquery 类似depend union select (select name from test.tb_student a where a.id=b.id) from test.tb_student b
      derived 派生表 select * from (select * from tb_student) t





    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏1
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-12-31 08:59
  • 签到天数: 975 天

    连续签到: 1 天

    [LV.10]测试总司令

    2#
    发表于 2020-12-25 09:30:54 | 只看该作者
    有可视化的更好
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-23 07:57 , Processed in 0.067987 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表