高性能MySQL(二)

MySQL基准测试

为什么需要benchmark

  1. 验证基于系统的假设,确认是否符合实际情况
  2. 重现系统中的某些异常行为,以解决它们
  3. 测试系统当前的运行情况,如果不清楚当前性能,就无法确认优化效果
  4. 模拟比当前系统更高的负载,用于找出可能遇到的拓展性瓶颈
  5. 规划业务增长,评估项目在未来负载下需要什么样的硬件、多大容量的网络及其他资源
  6. 测试应用适应可变环境的能力,如系统在随机的并发峰值下的性能表现
  7. 测试不同硬件、软件和操作系统配置
  8. 证明新采购的设备是否配置正确

策略

一是针对整个系统的整体测试,另外是单独测试MySQL,也称为集成式和单组件式基准测试

测试什么指标

  1. 吞吐量:单位时间内事务处理数,常用单位每秒事务数TPS、每分钟事务数TPM
  2. 响应时间或延迟:任务所需整体时间,单位可以是分钟、秒、毫秒、微秒
  3. 并发性:任意时间有多少同时发生的并发请求,一个Web站点可以同时有5w个用户访问,但可能只有20个并发请求到数据库,因此要关注正在工作的并发操作,检查数据库的Treads_running状态值
  4. 可拓展性:给系统增加一倍的资源,就能获得总共两倍的吞吐量

方法

常见错误:

  1. 使用真实数据的子集而不是全集
  2. 使用错误的数据分布
  3. 使用不真实的分布参数
  4. 在多用户场景中只做单用户的测试
  5. 在单服务器上测试分布式应用
  6. 与真实用户行为不匹配
  7. 反复执行同一个查询
  8. 没有检查错误
  9. 忽视系统预热过程
  10. 使用默认的服务器配置
  11. 测试时间太短

设计和规划基准测试

提出问题并明确目标,决定是标准测试还是专用测试

对连接使用独立线程重现,多次测试,详细记录

基准测试运行时间

应该运行足够长时间

获取系统性能和状态

记录系统状态、性能指标、CPU使用率、磁盘IO、网络流量统计等

#! /bin/shINTERVAL=5
PREFIX=$INTERVAL-sec-status
RUNFILE=/home/benchmarks/running
mysql -e 'SHOW GLOBAL VARIABLES' >> mysql-variables
while test -e $RUNFILE; dofile=$(date +%F_%I)sleep=$(date +%s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}")sleep $sleepts="$(date +"TS %s.%N %F %T")"loadavg="$(uptime)"echo "$ts $loadavg" >> $PREFIX-${file}-statusmysql -e 'SHOW GLOBAL VARIABLES' >> $PREFIX-${file}-status &echo "$ts $loadavg" >> $PREFIX-${file}-innodbstatusmysql -e 'SHOW ENGINE INNODB STATUS\G' >> $PREFIX-${file}-innodbstatus &echo "$ts $loadavg" >> $PREFIX-${file}-processlistmysql -e 'SHOW FULL PROCESSLIST\G' >> $PREFIX-${file}-processlist & echo $ts
done
echo Exiting because $RUNFILE does not exist.
  1. 每5秒执行一次收集的动作
  2. 每个文件名包含该轮测试开始的日期和小时
  3. 每次抓取数据都会记录当前时间戳
  4. 不会处理或过滤数据,保留元数据
  5. 如果需要在测试完成后脚本自动退出,只需删除/home/benchmarks/running文件即可

获得准确的测试结果

外部影响很多,尽可能降低这种影响,同时修改参数也尽量一点一点修改

运行基准测试并分析结果

自动化脚本测试是比较好的方式,结果最好用图表的格式绘制出来,这样可以直观看到很多光看数据无法被发现的问题

基准测试工具

集成式测试工具

ab

针对Web应用服务,结果转换成每秒能满足多少请求,只能针对单个URL进行尽可能快的压力测试

http_load

与ab类似,也被设计为对Web服务器进行测试,比ab更加灵活,通过一个输入文件提供多个URL,在这些URL中随机测试

JMeter

Java应用程序,可以加载其它应用并测试其性能,虽然设计用来测试Web应用,但也可用于测试FTP服务器,或JDBC数据库查询测试,比ab和http_load复杂得多,拥有绘图接口

单组件式测试工具

mysqlsalp

可模拟服务器的负载并输出即时信息

MySQL benchmark suite(sql-bench)

单线程的,主要用于测试服务器执行查询的速度,结果显示哪种类型的操作在服务器上执行得更快,包含了大量预定义的测试,也可用于高层次测试,缺点是单用户模式,数据集很小且无法使用指定的数据,无法测试多CPU能力,还需要Perl和BDB的支持

Super Smack

用于MySQL和PostgreSQL的肌醇测试工具,可提供压力测试和负载生成,可模拟多用户访问,可加载测试数据到数据库,支持使用随机数据填充测试表

sysbench

多线程系统压测工具,可用来测试文件IO、操作系统调度器、内存分配和传输速度、POSIX线程以及数据库服务器,支持Lua脚本语言

MySQL内置的BENCHMARK()函数

测试某些特定操作的执行速度,参数是需要执行的次数和表达式,返回值永远是0,但可通过返回时间判断执行的时间,不适合用来做真正的测试

案例

http_load

http_load -parallel 1 -seconds 10 [filename]    # 单用户
http_load -parallel 5 -seconds 10 [filename]    # 5个并发用户
http_load -rate 5 -seconds 10 [filename]    # 每秒5次请求

sysbench

CPU基准测试

sysbench --test=cpu --cpu-max-prime=20000 run

文件IO基准测试

# 准备阶段
sysbench --test=fileio --file-total-size=150G prepare
# 运行阶段
sysbench --test=fileio --file-total-size=150G --file-test-mode=[seqwr/seqrewr/seqrd/rndrd/rndwr/rdnrw] \
--init-rng=on --max-time=300 --max-requests=0 run
# 清楚测试文件
sysbench --test=fileio --file-total-size=150G cleanup

OLTP基准测试

# 生成百万行记录的表
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test/
--mysql-user=root prepare
# 测试(8个并发线程,只读模式,测试60秒)
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root \
--max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run

其他特性

内存连续读写/线程调度器/互斥锁/顺序写性能

转载于:https://www.cnblogs.com/ikct2017/p/9530315.html

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

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

相关文章

python的用算法进制转换详解_学习python第五天进制转换

6.进制之间的转换(重要)二进制:满二进一 范围:0、1符号:0b例如:0b10...【注意】计算机只能识别二进制数据八进制:满八进一 范围:0~7符号:0o例如:0o66十进制:满十进一 范围:0~9十六进…

android之多媒体篇(一)

2019独角兽企业重金招聘Python工程师标准>>> Android 4.0.3(Api Level 15)支持的多媒体格式。 注意:有些设备可能支持其他的文件格式。 1.Audio AAC LC/LTP、HE-AACv1(AAC)、AMR-NB、AMR-WB、MP3、MIDI、Ogg Vorbis、PCM/WAVE、FLAC&#…

全国计算机等级考试题库二级C操作题100套(第77套)

第77套: 给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。 例如,输入一个整数:27638496&#xff0c…

第二章:用户登录管理模块

本章简介 1.项目分层 2.创建MyHibernateSessionFactory 3.设计用户接口和实现类 4.设计所有Action父类 5.设计用户Action类 6.页面调用 7.完成显示登录成功用户名和注销功能 8.显示报错信息 1.项目分层 实体层(模型层):entity包 学生类、用户…

python组合数据分类_Python 数据可视化:分类特征统计图

上一课已经体验到了 Seaborn 相对 Matplotlib 的优势,本课将要介绍的是 Seaborn 对分类数据的统计,也是它的长项。针对分类数据的统计图,可以使用 sns.catplot 绘制,其完整参数如下:seaborn.catplot(xNone, yNone, hue…

MongoDB 主从集群配置

创建必要的目录和认证文件: [rootmongo mongo]# mkdir keyfile [rootmongo mongo]# echo "mongo cluster one" > keyfile/m1[rootmongo mongo]# echo "mongo cluster one" > keyfile/m2[rootmongo mongo]# echo "mongo cluster one&…

linux进程互斥要点,linux进程之间互斥

总所周知,在linux中pthread_mutex_t可以用于同一进程内多个线程之间的同步。我们所需要做的工作,仅仅是定义一个全局的pthread_mutex_t类型变量即可。但是对于进程之间的互斥,就没有那么简单了。我们必须将pthread_mutex_t类型变量放到各个进…

java定时器_拾遗Timer定时器

一 Timer 介绍在开发中我们经常会遇到一些简单定时任务的需求,而不需要量级较重的定时任务就可以采取java定时器;java.util.Timer工具类中的Timer 是定时器,但定时任务写在java.util.TimerTask 中,由 Timer 执行 TimerTask &#…

逻辑门电路的知识点归纳

1.半导体二极管与MOS管的开关特性 二极管:正向导通,反向截止,但是要注意的是从反向截止到正向导通的时间极其短,但是从正向导通到反向截止要经过反向恢复(电荷存储效应)的过程,这个过程实际上就…

全国计算机等级考试题库二级C操作题100套(第78套)

第78套: 给定程序中,函数fun的功能是:将NN矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换。例如,若N3,有下列矩阵: 1 2 3 4 5 6 7 8 9 交换后为: 3 2 1 4 5 6 9 8 7 请在程序的下划线处…

善心

2019独角兽企业重金招聘Python工程师标准>>> 一个穷苦学生郝武德.凯礼,为了付学费,挨家挨户地推销货品。 到了晚上,发现自己的肚子很饿,而口袋里只剩下一个小钱。他在大街上犹豫徘徊了半天,终于鼓起勇气&a…

linux权限sudo和su,Linux su和sudo命令的区别,并获得root权限

su(superuser)su表示切换用户,如: 输入:su命令后回车表示切换当前的用户到root用户,或者: 输入:su - root(或者其他用户名)这里加了"-"后表示也切换的当前的环境变量到新用户的环境变量。su root…

python 清屏_Python学前准备如果你知道要去哪,那么全世界都给你让路

一、Python 已来 AI 不远在当今,人工智能已经渗透到了智能手机、网络搜索,广告分发,人脸识别,语音识别,自动驾驶,智能医疗,无人银行等日常生活领域。人工智能的生活化是不可避免的,它…

软件测试 决策表

决策表技术使用的一下特征的应用 If then else 逻辑关系 输入变量之间存在逻辑关系 计算过程中涉及对输入变量子集的处理 输入与输出之间存在因果关系 圈复杂度较高 决策表规模的增长方式不高(有N个条件的有限项决策表有2^N条规则),有几种方法…

js判断用户是否离开当前页面

简介 VisibilityChange 事件;用于判断用户是否离开当前页面 Code // 页面的 visibility 属性可能返回三种状态 // prerender,visible 和 hidden let pageVisibility document.visibilityState; // 监听 visibility change 事件 document.addEventLi…

全国计算机等级考试题库二级C操作题100套(第79套)

第79套&#xff1a; 给定程序中&#xff0c;函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回&#xff0c;并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串&#xff0c;且串长<N。 请在程序的下划线处填入正确的内容并把…

linux 交叉编译 静态库,在ARM交叉编译时,如何选择要链接的静态库?

小编典典您有两种选择&#xff0c;获取正确的编译器。编写自己的“ C”库。获取正确的编译器。你是 总是 最安全的有一个编译器匹配您的系统。这适用于x86Linux和各种发行版。如果不同的编译器可以工作&#xff0c;您将很幸运。当您交叉编译时&#xff0c;这样做会更加困难&…

python输出可执行文件_重定向-禁止在Python调用中输出可执行文件

重定向-禁止在Python调用中输出可执行文件我有一个名为B的二进制文件&#xff0c;该文件在调用时会生成输出。 如果从Bash shell调用它&#xff0c;则大多数输出将受到A > /dev/null的抑制。所有输出将受到A &> /dev/null的抑制我有一个名为B的Python脚本&#xff0c…

全国计算机等级考试题库二级C操作题100套(第80套)

第80套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;将形参n中&#xff0c;各位上为偶数的数取出&#xff0c;并按原来从高位到低位的顺序组成一个新的数&#xff0c;并作为函数值返回。 例如&#xff0c;从主函数输入一个整数&#xff1a;27638496&#x…

记一次B站答题经历

第一题部分&#xff1a;社区规范卷 --------- ------------ 第二题&#xff1a;社区规范第二部分 -------------------- 第三部分自由选择题 ---------------------- -------------------------------- 最后答题成绩得分 -------------- ------------- 答完题后的感受&#xff…