简介
mysql性能衡量标准
mysql吞吐量
一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。
系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间
QPS(每秒查询数)
QPS即每秒查询率,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。因特网上,经常用每秒查询率来衡量域名系统服务器的机器的性能,即为QPS。
MySQL 有一个名为 Questions 的内部计数器(根据 MySQL 用语,这是一个服务器状态变量),客户端每发送一个查询语句,其值就会加一。
获取方式:show status like "Questions";
mysqladmin -uroot -p123 -h127.0.0.1 -i 1 -r extended | grep -i questions
开启一个ssh渠道进行查询实验
select * from mysql.user;
TPS(每秒处理事务数量)
每秒钟系统能够处理的交易或事务的数量。它是衡量系统处理能力的重要指标。TPS是LoadRunner中重要的性能参数指标。
TPS=(com_commit+com_rollback)/seconds
(提交+回滚处理次数)/s
mysqladmin -uroot -p123 -h127.0.0.1 -i 1 -r extended | grep -i Com_commit
mysqladmin -uroot -p123 -h127.0.0.1 -i 1 -r extended | grep -iw com_rollback
响应时间
例子:如果一个订单业务需要5秒响应,50并发时,TPM为2000,可能有%95的业务可以达到要求,100并发时,TPM为3500,可能此时只有55%的业务可以达到要求
并发性:
须知:如果同时500人在线,如果不是1秒内请求刚好是500,并发就不是500,如果此时web有100个并发请求,并不是所有的web请求都会访问数据库,所以mysql的并发请求并不会到达100
查看最大连接数
show variables like "max_connections";
查看运行的线程数
show status like "Thread%";
Threads_running 1 表示运行的线程数为1
其他性能指标
磁盘IOPS:每秒IO请求数
磁盘吞吐量:每次IO操作产生的流量
查看磁盘IO
yum -y install sysstat.x86_64
压测工具
mysqlslap 压测工具
确定硬件资源:
确定几核cpu:lscpu
开启查询QPS
mysqladmin -uroot -p123 -h127.0.0.1 -i 1 -r extended | grep -i questions
测试
mysqlslap --no-defaults -uroot -p123 -h127.0.0.1 \
--auto-generate-sql \
--auto-generate-sql-add-autoincrement \
--auto-generate-sql-load-type=mixd \
--auto-generate-sql-execute-number=5000 \
--concurrency=1 \
--create-schema=abc \
--engine=innodb
--auto-generate-sql, -a 自动生成测试表和数据,表示用mysqlslap工具自己生成的SQL脚本来测试并发压力。
--auto-generate-sql-add-auto-increment 代表对生成的表自动添加auto_increment列,从5.1.18版本开始支持
--create-schema 代表自定义的测试库名称,测试的schema,MySQL中schema也就是database。
--auto-generate-sql-load-type=type 测试语句的类型。代表要测试的环境是读操作还是写操作还是两者混合的。取值包括:read,key,write,update和mixed(默认)。
--concurrency=N, -c N 表示并发量,也就是模拟多少个客户端同时执行select。可指定多个值,以逗号或者--delimiter参数指定的值做为分隔符。例如:--concurrency=100,200,500。
查看
查看CPU状态
vmstat 1
命令输出字段说明:
procs
- r 可运行进程的数量(正在运行或等待运行)
- b 正在等待 I/O 完成,被阻塞的进程数
memory
- swpd 使用的交换空间大小
- free 空闲的内存大小
- buff 写缓存的大小
- cache 读缓存的大小
- inact 使用 -a 选项才能看到; 非活动内存大小
- active 使用 -a 选项才能看到; 活动内存大小
swap
- si 每秒从磁盘换入的内存大小(内存-->磁盘)
- so 每秒从磁盘换出的内存大小(磁盘-->内存)
io
- bi 每秒从块设备接收的数据,单位 block
- bo 每秒从块设备发送的数据,单位 block
system
- in 每秒的中断(interrupts)数,包括CPU时钟
- cs 每秒上下文切换的次数
cpu
单位是:
CPU 总时间的百分比
- us 运行用户空间代码所花费的时间
- sy 运行内核空间代码所花费的时间
- id 空闲时间
- wa 等待 I/O 所花费的时间
- st 被虚拟机管理程序(hypervisor) 偷走/占用的时间
从上图可知:
idel空闲使用率最低为58,压力最大时cpu占用率为42%
再次修改并发量为2执行测试
并发量修改为4
修改为16
改为32,处理总量时间越来越长
继续修改64、128... 当到达256时,出现报错
tpcc压测工具
安装:
官方:https://code.launchpad.net/~percona-dev/perconatools/tpcc-mysql
官方github:https://github.com/Percona-Lab/tpcc-mysql
安装包:tpcc-mysql-master.zip
load.sh中可以调用其他脚本
多进程脚本:在一个脚本中多次调用另外一个脚本多次
进入到tpcc目录中
cd tpcc-mysql-master/src
make
cd ..
创建一个叫tpcc_test的库,在库下source create_table.sql
create database tpcc_test;
use tpcc_test;
source create_table.sql;
在执行脚本时报错
find / -name libmysqlclient.so.20
创建链接
ln -s /usr/src/mysql-5.7.22-linux-glibc2.12-x86_64/lib/libmysqlclient.so.20 /usr/lib/libmysqlclient.so.20
echo "/usr/local/lib" >>/etc/ld.so.conf
测试
./tpcc_start 命令格式说明:
Usage: tpcc_start
-h server_host: 服务器名
-P port : 端口号,默认为3306
-d database_name: 数据库名
-u mysql_user : 用户名
-p mysql_password : 密码
-w warehouses: 仓库的数量
-c connections : 指定并发连接数,默认为1
-r warmup_time : 热身时间,单位:s,默认为10s ,热身是为了将数据加载到内存。
-l running_time: 测试时间,单位:s,默认为20s
-i report_interval: 指定生成报告间隔时长
-f report_file: 测试结果输出文件
chmod +x load.sh
./load.sh tpcc_test 1000
执行单线程
./tpcc_load -h 127.0.0.1 -d tpcc_test -u root -p "123" -w 2
watch du -sh /usr/local/mysql/data/tpcc_test
持续写入数据
根据当前目录*.out文件查看
发布者:LJH,转发请注明出处:https://www.ljh.cool/6667.html