性能测试(五)—— 数据库性能测试-mysql

1 mysql性能测试的主要内容

  • MySQL数据库介绍
  • MySQL数据库监控指标
  • MySQL慢查询工作原理及操作
  • SQL的分析与调优方法
  • MySQL索引的概念及作用
  • MySQL索引的工作原理与设计规范
  • MySQL存储引擎
  • MySQL实时监控
  • MySQL集群监控方案
  • MySQL性能测试的用例准备
  • 使用Jmeter开发MySQL性能测试脚本
  • 执行测试

2 mysql数据库分支介绍

MariaDb
  • MySQL之父Widenius创建,目标在于替换现有MySQL
  • 兼容MySQL ,对于开发者来说感知不到变化
  • ariaDB is free and open source software

3 mysql重点监控指标SQL语句

  • QPS

queries per seconds每秒钟查询数量

mysql > show global status like 'Question%';

  • TPS(每秒事务量)

TPS = (Com_commit + Com_rollback) / seconds

mysql > show global status like 'Com_commit';

mysql > show global status like 'Com_rollback';

  • 线程连接数

mysql > show global status like 'Max_ used_ connections';

mysql > show global status like 'Threads%';

  • 最大连接数

mysql > show variables like 'max_ connections';

  • Query Cache

查询缓存用于缓存select查询结果

当下次接收到相同查询请求时,不再执行实际查询处理而直接返回结

适用于大量查询、很少改变表中数据

 
修改my.cnf将query_ cache_ size设置为具体的大小,具体大小是多少取决于查询
的实际情况,但最好设置为1024的倍数,参考值32M增加一行: query_ cache_ type=0/1 / 2
如果设置为1 ,将会缓存所有的结果,除非你的select语句使用
SQL_ _NO_ CACHE禁用了查询缓存。如果设置为2 ,则只缓存在select语句中通过SQL _CACHE指定需要缓
存的查询.

  • Query Cache命中率

show status like 'Qcache%';

Query_cache_hits = (Qcahce_ hits /(Qcache_ hits + Qcache_inserts )) * 100%;

  • 锁定状态

show global status like '%lock%';

Table_ locks_ waited/Table_locks_immediate值越大代表表锁造成的阻塞越严重

  • 锁定状态

show global status like '%lock%';

Table_locks_waited/Table_locks_immediate值越大代表表锁造成的阻塞越严重

Innodb_ row_ lock_waitsinnodb行锁,太大可能是间隙锁造成的

  • 主从延时

查询主,从延时时间: show slave status

4 mysql慢查询

4.1 慢查询定义
  • 执行速度超过定义的时间的查询
  • 不同的系统定,义不容的慢查询指标
4.2 慢查询开启
  • 编辑/etc/my.cnf ,在[mysqld]域中添加: .
  • 开启慢查询: slow_query_log= 1
  • 慢查询日志路径: slow_query_log_file =/data/mysql/slow.log
  • 慢查询的时长: long_query_time= 1
  • 未使用索弓|的查询也被记录到慢查询日志中 log_queries_not_using_indexes=1
慢查询日志分析

mysqldumpslow命令

  • -s是表示按照何种方式排序
  • -t是top n的意思,即为返回前面多少条的数据
  • -g后边可以写一个正则匹配模式,大小写不敏感的
4.3 mysqldumpslow -s 更多参数
 
al   平均锁定时间ar   平均返回记录时间at   平均查询时间(默认)c    访问计数l    锁定时间r    返回记录t    查询时间

  • 得到返回记录集最多的10个SQL

     
    mysqldumpslow -sr -t 10 slow.log
    
  • 得到访问次数最多的10个SQL

     
    mysqldumpslow -sc -t 10 slow.log  
    
  • 得到按照时间排序的前10条里面含有左连接的查询语句

     
    mysqldumpslow-st-t 10 -g "left join" slow.log
    

5 SQL语句性能分析

5.1 explain执行计划
  • 用法: explain select语句
  • 例如:

1explain select * from user; 执行完毕之后,它的输出有以下字段:

id、 select_type、 table、 partitions、 type、 possible_keys、 key、 key_len、 ref、 rows、 Extra

要想知道explain命名怎么使用,就必须把这些字段搞清楚

5.2 explain返回结果分析
  • id

select识别符 ,代表语句的执行顺序,-般在select嵌套 查询时会不 同

id列数字越大越先执行,如果说数字一样大,那么就从上往下依次 执行

id列为null的就表是这是一个结果集,不需要使用它来进行查询。

  • select_ type

simple:表示不需要union操作或者不包含子查询的简单select查询。 有连接查询时,外层的查询为simple ,且只有一个

primary :一个需要union操作或者含有子查询的select ,位于最外 层的单位查询的select_type即为primary。且只有一个

union : union连接的两个select查询,第一个查询是dervied派生 表,除了第一个表外,第二个以后的表select_type都是union

dependent union :与union一样,出现在union或union all语句 中,但是这个查询要受到外部查询的影响

union result :包含union的结果集,在union和union all语句中,因 为它不需要参与查询,所以id字段为null

subquery :除了from字句中包含的子查询外,其他地方出现的子 查询都可能是subquery

dependent subquery :与dependent union类似,表示这个 subquery的查询要受到外部表查询的影响

derived : from字句中出现的子查询,也叫做派生表,其他数据库 中可能叫做内联视图或嵌套select

  • table

显示的查询表名

如果查询使用了别名,那么这里显示的是别名

如果不涉及对数据表的操作,那么这显示为null

如果显示为尖括号括起来的< derived N>就表示这个是临时表

依次从好到差: system , const,eq_ref , ref , fulltext , ref_or_null, unique_subquery , index_subquery , range , index_merge , index , ALL

除了all之外,其他的type都可以使用到索引,除了index_ merge之 外,其他的type只可以用到一个索引

  • type (从好到坏)重点代表了SQL的好与坏

system :表中只有一行数据或者是空表,职能用于myisam和 memory表。如果是Innodb引擎表, type列在这个情况通常都是 all或者index

const :使用唯一索引或者主键,返回记录-定是1行记录的等值 where条件时,通常type是const。其他数据库也叫做唯一索引扫描

eq_ref :出现在要连接过个表的查询计划中,驱动表只返回一-行数据,且这行数据是第二个表的主键或者唯一索引,且必须为not null ,唯一索引和主键是多列时,只有所有的列都用作比较时才会出现eq_ref

ref :不像eq_ref那样要求连接顺序,也没有主键和唯一索引 的要求只要使用相等条件检索时就可能出现,常见与辅助索引|的等值查找。或者多列主键、唯一索引中,使用第一个列之外的列作为等值查找也会出现,总之,返回数据不唯一的等值查找就可能出现。

fulltext :全文索引检索,要注意,全文索引的优先级很高,若全文索引和普通索弓|同时存在时,mysq|不管代价,优先选择使用全文索引。

ref_or_null :与ref方法类似,只是增加了null值的比较。实际用的不多。

unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值。

index_ subquery:用于in形式子查询使用到了辅助索引|或者in常数列表,子查询可能返回重复值,可以使用索弓|将子查询去重。

range :索弓|范围扫描,常见于使用>,<,is null,between ,in ,like等运算符的查询中。

index_ merge :表示查询使用了两个以上的索引,最后取交集或者并集,常见and,or的条件使用了不同的索引,官方排序这个在ref_or_null之后,但是实际上由于要读取所个索引,性能可能大部分时间都不如range

index :索引全表扫描,把索引从头到尾扫一遍,常见于使用索引列就可以处理不需要读取数据文件的查询、可以使用索引|排序或者分组的查询。

all :这个就是全表扫描数据文件,然后再在server层进行过滤返回符合要求的记录。

  • possible_ keys

查询可能使用到的索引|都会在这里列出来

  • key

查询真正使用到的索引,select__type为index__merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个。

  • key_len

用于处理查询的索引长度,如果是单列索引,那就整个索引长度算进去,如果是多列索引,那么查询不一定都能使用到所有的列,具体使用到了多少个列的索引,这里就会计算进去,没有使用到的列,这里不会计算进去

  • ref

如果是使用的常数等值查询,这里会显示const,如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段,如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func

  • rows

这里是执行计划中估算的扫描行数,不是精确值

  • Extra常见返回

distinct :在select部分使用了distinc关键字

no tables used :不带from字句的查询或者From dual查询

using filesort :排序时无法使用到索引时,就会出现这个。常见于 order by和group by语句中

using index :查询时不需要回表查询,直接通过索弓|就可以获取查 询的数据。

using intersect :表示使用and的各个索引的条件时,该信息表示 是从处理结果获取交集

using union :表示使用or连接各个使用索引的条件时,该信息表 示从处理结果获取并集

using where :表示存储引擎返回的记录并不是所有的都满足查询 条件,需要在server层进行过滤

6 MYSQL索引介绍

6.1类型
  • 主键索引

    它是一种特殊的唯一索引 ,不允许有空值

    一般是在建表的时候同时创建 主键索引

  • 全文索引

    fulltext是一种只适用于MyISAM表的一个索引类型

    被索引列的数据类型只能是以下三种的组合char、varchar、text

    MySQL是通过match)和against()这两个函数来实现它的全文索引查询的功能。

  • 唯一索引 索引列的值必须唯一, 但允许有空值

  • 组合索引

    也叫多列索引,就是在多列上同时创建索引,使得多列的组合值唯一,创建组合索引|的好处是比分别创建多个单列索弓引|的查 询速度要快很多。

    组合索弓|创建遵循“最左前缀”规则

    如三列: id、name、age创建组合索引,则相当于分别创建了id、 name、 age , id、 name , id这三个索引

  • 普通索引

    最基本的索引,它没有任何限制

7 MYSQL索引创建规范

  • 索引是一把双刃剑,它可以提高查询效率但也会降低插入和更新的速度并占用磁盘空间
  • 在插入与更新数据时,要重写索引文件
  • 单张表中索弓|数量不超过5个
  • 单个索引|中的字段数不超过5个
  • 不使用更新频繁地列作为主键
  • 合理创建组合索引(避免冗余)
  • 不在低基数列上建立索引,例如'性别'
  • 不在索弓|列进行数学运算和函数运算,会使索引失效
  • 不使用%前导的查询,如like"%xxx" 无法使用索引
  • 不使用反向查询,如not in / not like ,无法使用索引,导致全表扫描
  • 选择越小的数据类型越好,因为通常越小的数据类型通常在磁盘,内存,cpu,缓存中占用的空间很少,处理起来更快
  • 在经常需要排序(order by),分组(group by)和的distinct列上加索引(单独order by用不了索引,索引考虑加where或加limit)
  • 在表与表的而连接条件.上加,上索引,可以加快连接查询的速度
  • 使用短索引l,如果你的一一个字段是Char(32)或者int(32),在创建索引的时候指定前缀长度,比如前10个字符(前提是多数值是唯一的)那么短索引可以提高查询速度,并且可以减少磁盘的空间,也可以减少I/0操作.

8 mysql存储引擎

8.1 MyISAM
  • 优点

    读的性能比InnoDB高很多

    索引与数据分开,使用了压缩,从而提高了内存使用率.

  • 缺点

    不支持事务

    写入数据时,直接锁表

8.2 InnoDB
  • 优点

    支持事务

    支持外键

    支持行级锁

  • 缺点

    不支持fulltext索引 (全文索引)

    行级所并不绝对,当不确定扫描范围时,锁全表

    索引与数据是紧密捆绑的,没有使用压缩导致体积庞大

9 mysql数据库的实时监控

9.1orzdba shell脚本

orzdba是淘宝DBA团队开发出来的一个perl监控脚本,主要功能是监控mysql数据库,也有一些磁盘和cpu的监控选项,好不好用就见仁见智,毕竟各公司需求不尽相同.

下载:网上找一下,脚本内容即可

  • 启动

./orzdba

  • 使用
 
Info  :Created By zhuxu@taobao.com
Usage :
Command line options :-h,--help           打印帮助信息.-i,--interval       时间(秒)间隔.-C,--count          次数时间.-t,--time           打印当前时间.-nocolor            打印无颜色.-l,--load           打印加载信息.-c,--cpu            打印Cpu信息.-s,--swap           打印交换信息.-d,--disk           打印磁盘信息.-n,--net            打印网络信息.-P,--port            用于mysql连接的端口号(默认3306).-p,--passwd         用于mysql连接的用户密码(默认为null)-S,--socket        套接字用于mysql连接的套接字文件。-com                打印MySQL状态 Status(Com_select,Com_insert,Com_update,Com_delete).-hit                Print Innodb Hit%.命中率-innodb_rows        Print Innodb Rows 行 Status(Innodb_rows_inserted/updated/deleted/read).-innodb_pages       Print Innodb Buffer Pool Pages Status(Innodb_buffer_pool_pages_data/free/dirty/flushed)缓冲池页面状态-innodb_data        Print Innodb Data Status(Innodb_data_reads/writes/read/written)-innodb_log         Print Innodb Log  Status(Innodb_os_log_fsyncs/written)-innodb_status      Print Innodb Status from Command: 'Show Engine Innodb Status'(history list/ log unflushed/uncheckpointed bytes/ read views/ queries inside/queued)-T,--threads        Print Threads Status(Threads_running,Threads_connected,Threads_created,Threads_cached).-rt                 Print MySQL DB RT(us).-B,--bytes          Print Bytes received from/send to MySQL(Bytes_received,Bytes_sent).-mysql              Print MySQLInfo (include -t,-com,-hit,-T,-B).-innodb             Print InnodbInfo(include -t,-innodb_pages,-innodb_data,-innodb_log,-innodb_status)-sys                Print SysInfo   (include -t,-l,-c,-s).-lazy               Print Info      (include -t,-l,-c,-s,-com,-hit).-L,--logfile        Print to Logfile.-logfile_by_day     One day a logfile,the suffix of logfile is 'yyyy-mm-dd';and is valid with -L.
Sample 案例:shell> nohup ./orzdba -lazy -d sda -C 5 -i 2 -L /tmp/orzdba.log  > /dev/null 2>&1 &

10 mysql集群监控工具介绍

  • 天兔LEPUS工具

    • 为所有数据库管理者、互联网企业数据库 监控而设计
    • 无需部署Agent,轻松监控1000+数据库实例,完善灵活的告警配置,详细的性能分析指标
  • 搭建及教程

官方文档:www.dbarun.com/docs/lepus/

11 开发性能测试脚本及执行

11.1用例准备
  • 使用sq|模拟用户使用场景
11.2JMeter开发mysq|性能测试
  • 步骤

1.DBC Connection Configuration配置mysq|配置

2.DBC Request写sq|脚本

3.打开性能监控工具进行查询

  • 其他 监控部署好、SQL架构是否合理、异常类测试(主从延迟、主从宕机)

  下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

​​编辑资料获取方式 :xiaobei_upup,添加时备注“csdn alex”

我是小北,专注软件测试和测试开发高薪就业和跳槽,有很多就业方案可以分享给你。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/31001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows更新报错 0xc1900101 0x30018 解决方案

卸载自带的电脑管家&#xff08;比如华硕、联想、华为等&#xff09; 通过禁用第三方驱动启动Windows&#xff08;winr 运行 msconfig&#xff09;&#xff0c;然后禁用掉第三方服务&#xff0c;重启系统。 检查更新&#xff0c;应该问题就能解决 记得重新运行msconfig&…

1分钟解决海康威视摄像头网页预览失败显示纯灰色问题

先用老IE浏览器登录&#xff0c;会提醒下载插件 下载这个Web的插件安装后&#xff0c;重开网页就都能看了

使用 Python 中的美丽汤进行网络数据解析的完整指南

Beautiful Soup 是一个广泛使用的 Python 库&#xff0c;在数据提取方面发挥着重要作用。它为解析 HTML 和 XML 文档提供了强大的工具&#xff0c;使从网页中轻松提取有价值的数据成为可能。该库简化了处理互联网上非结构化内容的复杂过程&#xff0c;使您可以将原始网页数据转…

【C语言】函数指针

首先看一段代码&#xff1a; #include <stdio.h>void test(){printf("hehe\n");}int main(){printf("%p\n", test);printf("%p\n", &test);return 0;} 输出的结果&#xff1a; 输出的是两个地址&#xff0c;这两个地址是 test 函数的…

Nuxt 3组件开发与管理

title: Nuxt 3组件开发与管理 date: 2024/6/20 updated: 2024/6/20 author: cmdragon excerpt: 摘要&#xff1a;本文深入探讨了Nuxt 3的组件开发与管理&#xff0c;从基础概念、安装配置、目录结构、组件分类与开发实践、生命周期与优化&#xff0c;到测试与维护策略。详细…

源代码保密的七种有效方法分享

在当今数字化时代&#xff0c;访问安全和数据安全成为企业面临的重要挑战。传统的边界防御已经无法满足日益复杂的内网办公环境&#xff0c;层出不穷的攻击手段已经让市场单一的防御手段黔驴技穷。当企业面临越来越复杂的网络威胁和数据泄密风险时&#xff0c;更需要一种综合的…

多组学双疾病串扰怎么做?PAN-AD九个机器学习+MR+单细胞,工作量不少

说在前面 “串扰”这个名词听起来高级了一个level&#xff0c;其实就是MR-通路的双疾病联合分析。虽然是筛选标志物的思路&#xff0c;但是工作量不小&#xff0c;作者还收集了13个不同AD自身免疫疾病数据集用于验证自己的机器学习模型&#xff0c;分析就是一些常规的WGCNA、P…

SpringBoot集成logback初始化源码解析(部分)

一.SpringBoot配置扩展点 SpringBoot日志模块使用监听的方式进行初始化&#xff0c;在SpringBoot项目启动后&#xff0c;会通知日志监听器 在日志监听器中ApplicationStartingEvent事件用来确定到底使用哪个日志系统&#xff0c;logback log4j等 在日志监听器中ApplicationEn…

PTA - 编写函数计算薪资

某公司销售员底薪为5000&#xff0c;销售业绩与利润提成的关系如下表所示&#xff08;计量单位&#xff1a;元&#xff09; 编写函数&#xff0c;计算员工月薪。 函数接口定义&#xff1a; salary(sales) 其中 参数 sales表示员工的月销售业绩。 裁判测试程序样例&#xff…

管理咨询公司的五个招聘秘密

在管理咨询中&#xff0c;人是业务&#xff1b;客户支付数百万美元&#xff0c;要求管理顾问确认问题&#xff0c;并推荐解决方案。由于收入和合规性受到威胁&#xff0c;招聘错误的成本可能非常昂贵&#xff0c;一些公司更倾向于谨慎而不是效率。然而&#xff0c;在当今竞争激…

Java23种设计模式(五)

1、MVC 模式 MVC 模式代表 Model-View-Controller&#xff08;模型-视图-控制器&#xff09; 模式。这种模式用于应用程序的分层开发。 Model&#xff08;模型&#xff09; - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑&#xff0c;在数据变化时更新控制器。…

第三期【Demo教程】教你使用SeaTunnel把数据从MySQL导到Hive

随着数据技术的快速发展&#xff0c;了解并掌握各种工具和技术变得尤为重要。为此&#xff0c;我们准备在Apache SeaTunnel社区发起如何使用连接器的Demo演示计划&#xff0c;邀请所有热爱数据同步技术的同学分享他们的知识和实操经验! 我们第三期主题是&#xff1a;如何使用Se…

Python MongoDB 基本操作

本文内容主要为使用Python 对Mongodb数据库的一些基本操作整理。 目录 安装类库 操作实例 引用类库 连接服务器 连接数据库 添加文档 添加单条 批量添加 查询文档 查询所有文档 查询部分文档 使用id查询 统计查询 排序 分页查询 更新文档 update_one方法 upd…

【Linux工具】yum软件包管理器与Vim编辑器的高效运用

目录 Linux 软件包管理器 YUM 什么是软件包 安装工具 rzsz 及注意事项 查看软件包 安装和卸载软件 安装软件 卸载软件 Linux 开发工具 编辑器 - Vim 使用 ​编辑 Vim 与 Vi 的区别 Vim 的基本概念 三种模式 Vim 的基本操作 操作尝试&#xff1a; Vim 命令集解释…

根据滚珠丝杆规格适配丝杆支撑座!

丝杆支撑座是机械设备中常见的支撑座装置&#xff0c;支撑着滚珠丝杆&#xff0c;起到稳定和支撑的作用&#xff0c;避免丝杆弯曲变形和震动&#xff0c;从而保证设备的稳定运行。那么&#xff0c;我们应该如何正确选择丝杆支撑座呢&#xff1f; 在选择丝杆支撑座时&#xff0c…

opencv 打开图片后,cv::mat存入共享内存的代码,实现消费者与生产者模型。XSI信号量和POSIX 信号量

文章目录 基于 sys 系统信号量(XSI信号量)常用api参考 基于 POSIX 信号量有名信号量常用 api 无名信号量常用 api 参考 实践-基于POSIX有名信号量生产者消费者模型任务说明同步关系互斥关系 设置一个互斥信号量&#xff0c;实现对共享内存的互斥访问设置两个信号量&#xff0c;…

铁路防鸟有哪些措施?铁路专用太阳能雷达驱鸟扇

铁路沿线的电杆、接触网支柱以及硬横梁等结构&#xff0c;因其牢固稳定以及无晃动的特点&#xff0c;成为了鸟儿们心仪的筑巢佳地&#xff0c;众多鸟类选择在此“安营扎寨”。而鸟巢中的树枝、草根和铁丝等杂物&#xff0c;极易引起铁路供电设备跳闸&#xff0c;导致短路停电&a…

【云岚到家】-day04-1-数据同步方案-Canal-MQ

【云岚到家】-day04-1-数据同步方案-Canal-MQ 1 服务搜索1.1 服务搜索技术方案1.1.1 需求分析1.1.2 技术方案1.1.2.1 使用Elasticsearch进行全文检索1.1.2.2 索引同步方案 1.1.3 CanalMQ1.1.3.1 MySQL主从数据同步1.1.3.2 Canal工作流程1.1.3.3 具体实现方案 1.2 MQ技术方案1.2…

【QT】

通信服务端实现 widget.h文件 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QTcpServer>//服务器类 #include <QMessageBox>//消息 #include <QTcpServer> #include <QList> #include <QTcpSocket> QT_BEGIN_NAMESPAC…

我在高职教STM32——LCD液晶显示(2)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…