MySQL 如何使用 sysbench 进行 OLTP 基准测试

分类:编程技术 时间:2024-02-20 15:48 浏览:0 评论:0
0
本文与大家分享MySQL如何使用sysbench进行OLTP基准测试。小编觉得还是比较实用的,所以分享给大家,作为参考。下面就跟随小编来看看吧。

1.安装
①下载源码包:https://dev.mysql.com/downloads/benchmarks.html
②安装依赖 yum -y install automake autoconf libtool
③tar xzvf sysbench-0.4。 12.10.tar.gz; cd sysbench-0.4.12.10/
④./autogen.sh; ./configure
⑤ make && make install
然后我们就可以在sysbench目录下看到可执行文件sysbench

2.命令
首先我们看一下命令的基本用法

root@10.30 .5.2:sysbench# ./sysbench --help

< p>用法:

sysbench [通用选项]... --test= [测试选项]...命令


常规选项:

--num-threads=N                   要使用的线程数 [1]

- -max-requests=N 请求总数限制 [10000]< /p>

--max-time=N 限制 f或以秒为单位的总执行时间 [0]

--forced- shutdown=STRING 在强制关闭之前等待的时间量 [off]

--thread -stack-size=每个线程的堆栈大小 [32K]

--init-rng=[on|off] 初始化随机数生成器 [OFF]

- Seed-RNG = 随机数生成器的 N SEED,当 0 [0] 时忽略

t-Rate = n 目标事务速率 ( tps) [0]

--tx-jitter=N 目标事务变化,以微秒为单位 [0]

--report-interval=N 以指定的时间间隔(以秒为单位)定期报告中间统计信息。 0 禁用中间报告 [0]

--report-checkpoints=[LIST,...]转储完整统计信息并在指定时间点重置所有计数器。参数是逗号分隔值的列表,表示必须执行报告检查点时从测试开始经过的时间(以秒为单位)。报告检查点默认关闭。 []

--test=STRING 运行测试

--debug=[on|off] 打印更多调试信息 [off]

--validate=[on|off] 尽可能执行验证检查 [off]

--help=[on|off] 打印帮助并退出< /p>

--version=[on|off] 打印版本并退出


日志选项:

--verbosity =N 详细级别 {5 - 调试,0 - 仅关键消息} [4]


--percentile=N 要计数的查询响应时间的百分位排名 [ 95]


编译测试:

fileio - 文件 I/O 测试

cpu - CPU 性能test

memory - 内存函数速度测试

threads - 线程子系统性能测试

mutex - 互斥性能测试

oltp - OLTP 测试


命令:准备运行清理帮助版本


参见“sysbench --test=”

从上面可以看出,sysbench可以测试CPU、磁盘IO、内存、线程、MUTEX和OLTP。
常用参数:< br/>--num-threads=N 并发线程数
--max -requests=N 限制总nu数压测请求数
--max-time=N 限制压测时间

以下是OLTP测试方法

./sysbench --test=oltp help

sysbench 0.4.12.10:多线程系统评估基准


oltp选项:

--oltp-test-mode=STRING 使用 {simple,complex,nontrx,sp} [complex] 的测试类型

--oltp-reconnect-mode=STRING 重新连接模式 {session ,transaction,query,random} [会话]

--oltp-sp-name=STRING                     在 SP 测试模式下调用的存储过程的名称 []

-- oltp-read -only=[on|off]仅生成“读”查询(不修改数据库)[off]

--oltp-avoid-deadlocks=[on|off] 按升序生成更新密钥避免死锁 [关闭]

--oltp-skip-trx=[on|off] 跳过 BEGIN/COMMIT 语句 [关闭]

--oltp-range-size=N 范围范围查询的大小 [100]

--oltp-point-selects=N 选择点的数量 [10]

--oltp-use-in-statement=N 使用 IN -每个查询 10 次 PK 查找的语句 [0]

--oltp-simple-ranges=N 简单范围数量 [1]

--oltp-sum-ranges=N 总和范围数量 [1]

--oltp-order-ranges=N 有序范围数量 [1]

--oltp-distinct-ranges=N 不同范围数量 [1]

--oltp-index-updates=N 索引更新次数 [1]

--oltp-non-index-updates=N 非索引更新次数 [1]

--oltp-nontrx-mode=非事务测试的STRING模式 {select, update_key, update_nokey, insert, delete} [select]

--oltp-auto-inc =[on|off] 是否应在 id 列上使用 AUTO_INCRMENT(或等效项)[on]

--oltp-connect-delay=N 连接到数据库后休眠的时间(以微秒为单位)[10000]

- -oltp-user-delay-min=N                                                                                                          最短时间(微秒)每次请求后休眠的时间 [0]

--oltp-user-delay-max=N                                                                    休眠的最短时间(以微秒为单位)每次请求后休眠 [0] /p>

--oltp-table-name=STRING 测试表名称 [sbtest]

--oltp-table-size=N 测试中的记录数表[10000]

--oltp-dist-type=STRING随机数分布{均匀,高斯,特殊} [特殊]

--oltp-dist-iter=N个数用于数字生成的迭代次数 [12]

--oltp-dist-pct=N                             被视为“特殊”的值的百分比(用于特殊分布)[1]

< p>--oltp-dist-res=N p>--oltp-point-select-mysql-handler=[on|off]使用 MySQL HANDLER 进行点选择 [off]

--oltp-点选择所有列=[上| off]为点选查询选择所有列[off]

--oltp-secondary=[on|off]使用二级索引代替PRIMARY索引[off]

< p>--oltp-num-partitions=N 用于测试表的分区数量[0]

--oltp-num-tables=N 测试表数量[1]


常规数据库选项:


--db-driver=STRING 指定数据库驱动程序se(“帮助”获取可用驱动程序列表)

--db-ps-mode=STRING 准备好的语句使用模式 {auto,disable} [auto]


< br/>

内置数据库驱动:

mysql - MySQL驱动


mysql选项:

--mysql-host=[LIST,...] MySQL服务器主机[localhost]

--mysql-port=N MySQL服务器端口[3306]

--mysql-socket=STRING MySQL 套接字

--mysql-user=STRING MySQL 用户 [sbtest]

--mysql-password =STRING MySQL 密码[]

--mysql-db=STRING MySQL 数据库名称[sbtest]

--mysql-table-engine=STRING 用于测试表的存储引擎{myisam,innodb,bdb,heap, ndbcluster,federated} [innodb]

--mysql-engine-trx=STRING 使用的存储引擎是否是事务性的 {yes,no,auto} [auto]

-- mysql-ssl=[on|off]             使用 SSL 连接(如果客户端库中可用)[off]

--myisam-max-rows=N             max-rows MyISAM 表的参数 [1000000]

-- mysql-create-options=STRING附加选项传递给CREATE TABLE[]

说明:
常用参数
①基本参数
--db-driver=mysql 对于mysql进行OLTP基准测试< br/>--mysql-主机、--mysql-端口、--mysql-套接字、--mysql-用户、--mysql-密码。这些都是基本参数,就不解释了
--mysql-db=xxx 压力测试数据库,需要在这里指定
② oltp常用参数
--oltp-test- mode=complex/simple/nontrx 测试模式
--oltp-num-tables=10 oltp 测试的表数量。 0.4.10版本最大表数为16
--oltp-table-size=xxx 测试表的记录数

3.测试
①测试准备:

root@10.30.5.2:sysbench#./sysbench --num-threads=64 --max-requests=200000 - -test = oltp --db-driver=mysql --mysql-user=root --mysql-host=10.30.22.2 --mysql-password=x --oltp-test-mode=complex --mysql-db=tab -- oltp-table-size=5000000 --oltp-num-tables=16 准备

sysbench 0.4.12.10:多- 线程系统评估基准


正在创建表'sbtest14'...

正在创建表'sbtest7'...

正在创建表“sbtest”...

正在创建表“sbtest11”...

正在创建表“sbtest8”...

正在创建表'sbtest6'...

正在创建表'sbtest9'...

正在创建表'sbtest12'...

正在创建表'sbtest3'.. .

正在创建表'sbtest15'...

正在创建表'sbtest2'...

正在创建表'sbtest4'...

正在创建表“sbtest1”...

正在创建表“sbtest5”...

正在创建表“sbtest13”...

正在创建表'sbtest10'...

正在表'sbtest11'中创建5000000条记录...

正在表'sbtest1'中创建5000000条记录...

正在创建表“sbtest14”中有 5000000 条记录...

正在表“sbtest”中创建 5000000 条记录...

正在表“sbtest6”中创建 5000000 条记录...

正在表“sbtest2”中创建 5000000 条记录...

正在表“sbtest13”中创建 5000000 条记录...

正在创建 500000 条记录表“sbtest15”中有 0 条记录...

正在表“sbtest12”中创建 5000000 条记录...

正在表“sbtest4”中创建 5000000 条记录...

正在表“sbtest3”中创建 5000000 条记录...

正在表“sbtest9”中创建 5000000 条记录...

正在表“sbtest8”中创建 5000000 条记录...

正在表“sbtest10”中创建 5000000 条记录...

正在表“sbtest5”中创建 5000000 条记录...

正在表“sbtest7”中创建 5000000 条记录'...

② 测试结果

点击(此处)折叠或打开

root@10.30.5.2: sysbench# ./sysbench --num-threads=64 --max-requests=200000 --test=oltp --db-driver=mysql --mysql-user=root --mysql-host=10.30。 22.xxx --mysql-password=xxx --oltp-test-mode=complex --mysql-db=tab --oltp-table-size=5000000 --oltp-num-tables=16 运行

< p>sysbench 0.4.12.10:多线程系统评估基准


使用以下选项运行测试:

线程数:64

随机数生成器种子为 0 并且将被忽略


< br/>

进行OLTP测试。

运行混合OLTP测试

使用特殊分布(12 次迭代,75% 的情况下返回 1% 的值)

使用“BEGIN”启动事务

在 id 上使用 auto_inc列

OLTP测试最大请求数限制为200000

使用16个测试表

线程已启动!

完成。< /p>


OLTP 测试统计数据:

总计:4200336

事务数:200016(每秒 2000.64 笔) )

死锁:                               (每秒 0.00)

读/写请求:3800304(每秒 38012.16)

其他操作:每秒 4001.28。)


一般统计:

总时间:99.9760s

事件总数:200016

事件执行所花费的总时间:6394.8091

响应时间:

分钟:293.00ms

大约。 95%:52.10ms


线程公平性:

事件(avg/stddev):3125.2500/50.55

执行时间(avg/stddev):99.9189/0.01

③测试清除

点击(此处)折叠或打开

root@10.30.5.2:sysbench# ./sysbench --num-threads=64 --max-requests=200000 --test=oltp --db-driver=mysql -- mysql-user=root --mysql-host=10.30.22.xxx --mysql-password=xxx --oltp -test-mode=complex --mysql-db=tab --oltp-table-size=5000000 -- oltp-num-tables=16 cleanup

sysbench 0.4.12.10:多线程系统评估基准


删除表“sbtest”。 ..

正在删除表“sbtest1”...

正在删除表“sbtest2”...

正在删除表“sbtest3”...

正在删除表“sbtest4”...

正在删除表“sbtest5”...

正在删除表“sbtest6”...

正在删除表'sbtest7'...

删除表'sbtest8'...

删除表'sbtest9'...

删除表'sbtest10'。 ..

删除表“sbtest11”...

删除表“sbtest12”...

删除表“sbtest13”...

删除表 'sbtest14'...

删除表'sbtest15'...

完成。


摘要:
1>准备阶段< br/> 在PREPARE阶段我们需要仔细思考,此时mysql的配置,如innodb_flush_log_at_trx_commit、sync_binlog以及BP大小等
然后结合BP的大小,我们需要创建的记录条数表中的表数、并发线程数等,综合考虑
①如果数据量< BP,则所有数据都会缓存在内存中,此时会添加并发线程数来测试此时整个CPU核心能否承受测试压力
②如果数据量>>BP,主要测试整个系统的稳定性。我们可以结合监控查看缓存命中率(orzdba),以及对应的磁盘IO(iostat/orzdba)等,来获取整个数据库系统的漏洞点击

2>RUN阶段
在RUN阶段,我们可以通过工具查看当前数据库状态比如orzdba/iostat
①从上面的测试结果可以看出,
事务数:200016(每秒2000.64)TPS约为2000
读/写请求:3800304(每秒38012.16) .) QPS 达到 38000
约95分位数:52.10ms 95% 请求响应时间约为52.10ms
可以说性能相当不错(这里我测试的是腾讯云CDB,配置为1000MB BP)
②查看通过orzdba结合运行进程查看数据库状态

点击(此处)折叠或打开

root@10.30.5.2:orzdba_home# ./orzdba -mysql -innodb -rt

.========================================== =========。

|欢迎使用orzdba工具!>'================日期:2017-04-18 ==============='


主机:10.30.22.2 IP:10.30.5.2

数据库:performance_schema|tab

变量:binlog_format[MIXED ] max_binlog_cache_size[17179869184G] max_binlog_size[1G]

max_connect_errors[999999999] max_connections[800] max_user_connections[0]

open_files_limit[102400]sync_binlog[0]table_definition_cache[768]

table_open_cache[512]thread_cache_size[512]


innodb_adaptive_flushing[ON] innodb_adaptive_hash_index[ON] innodb_buffer_pool_size[893M]

innodb_file_per_table[ON] innodb_flush_log_at_trx_commit[2] innodb_flush_method [O_DIRECT]

innodb_io_capacity[2000 0] innodb_lock_wait_timeout[7200 ] innodb_log_buffer_size[64M]

innodb_log_file_size[500M] innodb_log_files_in_group[2] innodb_max_dirty_pages_pct[75]

innodb_open_files[ 1024] innodb_read_io_threads[4] innodb_thread_concurrency[0]

innodb_write_io_threads[4]


--------   -QPS- -TPS- -Hit%- ---innodb bp 页面状态-- - ----innodb数据状态---- --innodb日志--他的--log(byte)--读取--查询--- ------线程------ --- --bytes---- --------tcprstat(us)--------

时间 | INS Upd Del Sel Iud | INS 更新洛·希特 |无数据脏冲洗 |读 写 读 写 | Fsyncs 编写 |列表 Uflush UCKPT VIE阙内W |运行 Conne Cre Cae Ca C |接收发送|计数平均 95-平均 99-平均|

17:24:53| 0 0 0 0 0| 0 100.00| 0 0 0 0 0| 0| 0 0| 0 0 0 0 0 0 0 0| 0 0 0 0 0| 0 0| 0 0 0 0 0|

17:24:54| 2153 6 454 2153 30115 10760| 478891 97.72| 55869 0 19432 2372| 11355 6686 177.4m 79.2m| 2 5.1m| 137 1.7m 180.6m 57 0 0| 20 68 0 1| 1.1m 10.7m| 23711 267 1 83 236|

17:24:55| 1960 5891 1962 27470 9813| 437599 97.71| 55872 0 19793 2132| 10416 6063 162.8m 71.4m| 1 4.8m| 142 2.4m 183.5m 62 0 0| 14 68 0 1| 1005k 9.7m| 23004 356 215 283|

17:24:56| 2027 6091 2033 28422 10151| 451846 97.74| 55870 0 20024 2249| 10609 6320 165.8m 75.2m| 3 4.9m| 133 927k 186.5m 59 0 0| 8 68 0 1| 1.0m 10.2m| 22684 299 186 24 4|

17:24:57| 2291 6865 2286 32067 11442| 511514 97.69| 55870 0 20248 2611| 12314 7194 192.4m 87.0m| 2 5.4m| 128 19k 189.6m 54 0 0| 4 68 0 1| 1.1m 11.5m| 25197267 188 234|

17:24:58| 2210 6632 2207 30947 11049| 493747 97.77| 55865 0 20361 2371| 11478 6810 179.3m 79.5m|2 5.4m| 130 267k 192.9m 64 0 0| 48 68 0 1| 1.1m 11.3m| 24586 270 182 232|

17:24:59| 2225 6680 2226 31102 11131| 496716 97. 70| 55866 0 20305 2602| 11891 7059 185.8m 86.6m| 1 5.3m| 149 473k 196.0m 53 0 0| 11 68 0 1| 1.1m 11.3m| 20655 371 219 304|

17:25:00 | 2126 6377 2130 29819 10633| 472984 97.70| 55868 0 20235 2489| 11332 6749 177.1m 82.8m| 2 5.0m| 125 370k 199.0m 62 0 0| 13 68 0 1| 1.1m 10.8m| 8707 958 664 856|

17:25:01| 2169 6507 2165 30307 10841| 484346 97.71| 55766 99 20234 2485| 11550 6849 180.5m 82.7m| 1 5. 1m| 133 808k 202.0m 57 0 0| 15 68 0 1| 1.1m 11.2m| 8578 996 636 844|

可以发现,当32个线程并发执行复杂操作时,每秒的插入量、更新量、删除量、选择量都可以看得很清楚,还有innodb_log的fsync量,以及数据库的响应。时间。

感谢您的阅读!这篇关于“MySQL 如何使用 sysbench 进行 OLTP 工作台”的文章《mark测试》就分享到这里了,希望以上内容能够给大家带来一些帮助,让大家能够学到更多的知识。如果你觉得文章不错,可以分享出来,让更多的人看到!< /p>

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > MySQL 如何使用 sysbench 进行 OLTP 基准测试

用户评论