前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL压力测试最佳实践(16/16)

MySQL压力测试最佳实践(16/16)

作者头像
十里桃花舞丶
发布2024-04-12 08:25:29
1010
发布2024-04-12 08:25:29
举报
文章被收录于专栏:桥路_大数据桥路_大数据
MySQL压力测试

基本概述

sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。项目地址:http://github.com/akopytov/sysbench

工具安装

1.1 在线安装(CentOS):

代码语言:javascript
复制
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo yum -y install sysbench

安装报错缺少libmysqlclient.so.18(libmysqlclient_18)(64bit)依赖时,需要下载rpm包进行安装:

代码语言:javascript
复制
# CentOS 7
wget http://downloads.mysql.com/archives/get/p/23/file/mysql-community-libs-compat-5.7.22-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-compat-5.7.22-1.el7.x86_64.rpm

其它系统安装方法请见github:https://github.com/akopytov/sysbench

1.2 离线安装(CentOS)

下载安装包后解压,添加相关依赖后进行编译。

代码语言:javascript
复制
unzip sysbench-xxxx.zip

yum install m4 autoconf automake libtool
yum -y install mysql-devel(mysql数据库依赖库,其他数据库要换成对应的xxx-devel)

# 自动生成脚本
./autogen.sh

# 编译安装
./configure
make && make install

# 检验是否安装成功
cd /usr/bin/
./sysbench --version
压力测试
  1. 提前在数据库上创建好sbtest数据库。
  1. 创建一张500w的记录表。
代码语言:javascript
复制
sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua \
--mysql-host=node02 \
--mysql-port=3306 \
--mysql-user=root  \
--mysql-password='DBa2020*' \
--mysql-db=sbtest \
--oltp-test-mode=complex \
--oltp-tables-count=1 \
--oltp-table-size=5000000 \
--threads=128  \
--oltp-nontrx-mode=select \
--oltp-read-only=off \
--max-time=120 \
--report-interval=10 \
prepare
  • 这里使用的是oltp.lua脚本,里面测试内容大概是线程和建表、查询、更改、删表的操作。sysbench还包含其它功能脚本,默认安装后处于/usr/share/sysbench/tests/include/oltp_legacy/目录下。
代码语言:javascript
复制
1. bulk_insert.lua  批量写入操作
2. oltp_delete.lua 写入和删除并行操作
3. oltp_insert.lua  纯写入操作
4. oltp_point_select.lua  只读操作,条件为唯一索引列
5. oltp_read_only.lua  只读操作,包含聚合,去重等操作
6. oltp_read_write.lua 读写混合操作,最常用的脚本
7. oltp_update_index.lua 更新操作,通过主键进行更新
8. oltp_update_non_index.lua 更新操作,不通过索引列
9. oltp_write_only.lua 纯写操作,常用脚本,包括insert update delete
10. select_random_points.lua 随机集合只读操作,常用脚本,聚集索引列的selete in操作
11. select_random_ranges.lua 随机范围只读操作,常用脚本,聚集索引列的selete between操作

-- 内容引用自博客 https://blog.51cto.com/u_13874232/5582905
  • 其它常用参数。
代码语言:javascript
复制
Sysbench中常用的参数如下:

--mysql-table-engine=innodb 表示选择测试表的存储引擎
--oltp_tables_count=10 表示会生成 10 个测试表
--oltp-table-size=100000 表示每个测试表填充数据量为 100000
--rand-init=on 表示每个测试表都是用随机数据来填充的
如果在本机,也可以使用 –mysql-socket 指定 socket 文件来连接。加载测试数据时长视数据量而定,若过程比较久需要稍加耐心等待。

--oltp-read-only=off 表示不要进行只读测试,也就是会采用读写混合模式测试
--report-interval=10 表示每10秒输出一次测试进度报告
--rand-type=uniform 表示随机类型为固定模式,其他几个可选随机模式:uniform(固定),gaussian(高斯),special(特定的),pareto(帕累托)
--max-time=120 表示最大执行时长为 120秒
--max-requests=0 表示总请求数为 0,因为上面已经定义了总执行时长,所以总请求数可以设定为 0;也可以只设定总请求数,不设定最大执行时长
--percentile=99 表示设定采样比例,默认是 95%,即丢弃1%的长请求,在剩余的99%里取最大值
--num-threads=12: 并发线程数,可以理解为模拟的客户端并发连接数

--mysql-db=sbtest:测试使用的目标数据库,这个库名要事先创建
--oltp-tables-count=10:产生表的数量
--oltp-table-size=500000:每个表产生的记录行数
--oltp-dist-type=uniform:指定随机取样类型,可选值有 uniform(均匀分布), Gaussian(高斯分布), special(空间分布)。默认是special
--oltp-read-only=off:表示不止产生只读SQL,也就是使用oltp.lua时会采用读写混合模式。默认 off,如果设置为on,则不会产生update,delete,insert的sql。
--oltp-test-mode=nontrx:执行模式,这里是非事务式的。可选值有simple,complex,nontrx。默认是complex
simple:简单查询,SELECT c FROM sbtest WHERE id=N
complex (advanced transactional):事务模式在开始和结束事务之前加上begin和commit, 一个事务里可以有多个语句,如点查询、范围查询、排序查询、更新、删除、插入等,并且为了不破坏测试表的数据,该模式下一条记录删除后会
在同一个事务里添加一条相同的记录。
nontrx (non-transactional):与simple相似,但是可以进行update/insert等操作,所以如果做连续的对比压测,你可能需要重新cleanup,prepare。
--oltp-skip-trx=[on|off]:省略begin/commit语句。默认是off
--oltp_secondary=on:将ID设置为非主键防止主键冲突。
--oltp_range_size=5: 连续取值5个,必定走到5个分片。
--mysql_table_options='dbpartition by hash(id) tbpartition by hash(id) tbpartitions 2':PolarDB-X 1.0支持拆分表,在建表的时候需要指定拆分方式。

-- 内容引用自博客 https://blog.51cto.com/u_13874232/5582905
  1. 使用4线程(–num-threads=4)进行压力测试,测试60s(–max-time=60),每隔10s(–report-interval=10)输出一次测试信息。
代码语言:javascript
复制
sysbench --mysql-host=node02 \
--mysql-port=3306 \
--mysql-user=root \
--mysql-password=DBa2020* \
--test=/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua \
--oltp_tables_count=1 \
--oltp-table-size=1000000 \
--num-threads=4 \
--oltp-read-only=off \
--report-interval=10 \
--rand-type=uniform \
--max-time=60 \
--max-requests=0 \
run
  1. 测试结果会输出在控制台上,主要关注以下参数。
代码语言:javascript
复制
transactions:                        2428   (39.27 per sec.)
    read/write requests:                 43704  (706.81 per sec.)
    other operations:                    4856   (78.53 per sec.)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL压力测试
    • 基本概述
      • 工具安装
        • 压力测试
        相关产品与服务
        云数据库 MySQL
        腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档