用sysbench来测试MySQL的性能的教程
作者:goldensun 发布时间:2024-01-16 10:56:52
鉴于最近对OpenStack的兴趣和激情,我想要确保我可以做恰当的系统性能评估。我主要开始转向sysbench,是因为它带来一系列丰富的针对不同层面的测试(通过 -test=option 来获知) ,包括有:
fileio - 文件 I/O测试
cpu - CPU系能测试
memory - 内存功能速度测试
threads - 线程子系统系能测试
mutex - 互斥性能测试
正如你所看到的的,sysbench将让你的心思着重放在你的硬件和基础架构的许多基础组件上,例如你的磁盘子系统,以及你的CPUs和内存。有一个额外的选项,是用来执行对MySQL的模拟压力测试,并且当我在0.5版本中没有看到以上的所提到的可支持测试项时候,我很惊讶,尽管它可以用来显示“联机事务处理 – 联机事务处理测试”。-test=oltp到底怎么回事??
这个列表来自于sysbench最近的发布版本0.5——如果你仅仅是在这个版本上使用它,使用 Frederic Descamps(感谢lefred!)所提供的 包。如果你用的(系统)是EPEL,Ubuntu 14.04 或者 Debian 7,就可以使用0.4.12版本(检查sysbench的版本 -version)。那么,测试类型OLTP再也不会出现。这个版本做了什么呢?我使劲挠头,直到我询问Percona IRC才知道在0.5版本里的标准OLTP测试类型被替换成了不一样的语法,它使用传递参数到sysbench,替换掉了引用脚本写入lua的方式。它的优点是,现在你有了一个接口,可以写入你特定的负载测试中(提供你了解的lua(接口),用起来也不难)。如果你还想要运行预定义负载测试,它们还是存在的,但是你必须把它们作为RPM的一部分去安装,或者直接拷贝到你的系统。
幸运的是,如果你使用lefred提供的包,你会发现下面这些lua脚本(这里使用了截止至2014年8月4号的Amazon ami):
[root@pxc-control ~]# ls -l /usr/share/doc/sysbench/tests/db/
total 44
-rw-r--r-- 1 root root 3585 Sep 7 2012 common.lua
-rw-r--r-- 1 root root 340 Sep 7 2012 delete.lua
-rw-r--r-- 1 root root 830 Sep 7 2012 insert.lua
-rw-r--r-- 1 root root 2925 Sep 7 2012 oltp.lua
-rw-r--r-- 1 root root 342 Sep 7 2012 oltp_simple.lua
-rw-r--r-- 1 root root 425 Sep 7 2012 parallel_prepare.lua
-rw-r--r-- 1 root root 343 Sep 7 2012 select.lua
-rw-r--r-- 1 root root 3964 Sep 7 2012 select_random_points.lua
-rw-r--r-- 1 root root 4066 Sep 7 2012 select_random_ranges.lua
-rw-r--r-- 1 root root 343 Sep 7 2012 update_index.lua
-rw-r--r-- 1 root root 552 Sep 7 2012 update_non_index.lua
所以诀窍(如果你希望这么叫它)不是通过单一词语传递--test指令,而是通过传递一个lua脚本的完整路径。
下面首先是旧的方式(sysbench 0.4.12来自EPEL库):
--test=oltp --oltp-test-mode=complex
下面是新的方式(sysbench 0.5):
--test=/usr/share/doc/sysbench/tests/db/insert.lua
下面是我在一个3个节点的PXC集群上跑haproxy,做一个仅插入的测试类型,下面是我传递给sysbench的全部命令:
[root@pxc-control ~]# cat sys_haproxy.sh
#!/bin/bash
sysbench
--test=/usr/share/doc/sysbench/tests/db/insert.lua
--mysql-host=pxc-control
--mysql-port=9999
--mysql-user=sysbench-haproxy
--mysql-password=sysbench-haproxy
--mysql-db=sbtest
--mysql-table-type=innodb
--oltp-test-mode=complex
--oltp-read-only=off
--oltp-reconnect=on
--oltp-table-size=1000000
--max-requests=100000000
--num-threads=3
--report-interval=1
--report-checkpoints=10
--tx-rate=24
$1
下面是insert.lua脚本的内容:
[root@pxc-control ~]# cat /usr/share/doc/sysbench/tests/db/insert.lua
pathtest = string.match(test, "(.*/)") or ""
dofile(pathtest .. "common.lua")
function thread_init(thread_id)
set_vars()
end
function event(thread_id)
local table_name
local i
local c_val
local k_val
local pad_val
table_name = "sbtest".. sb_rand_uniform(1, oltp_tables_count)
if (oltp_auto_inc) then
i = 0
else
i = sb_rand_uniq(1, oltp_table_size)
end
k_val = sb_rand(1, oltp_table_size)
c_val = sb_rand_str([[
###########-###########-###########-###########-###########-###########-###########-###########-###########-###########]])
pad_val = sb_rand_str([[
###########-###########-###########-###########-###########]])
rs = db_query("INSERT INTO " .. table_name .. " (id, k, c, pad) VALUES " .. string.format("(%d, %d, '%s', '%s')",i, k_val, c_val, pad_val))
end
我比较喜欢sysbench 0.5的一个地方(超过lua 接口,肯定的!)是它现在带来一个配置项 –report-interval option(我通常都是设置为 =1),以便在脚本运行时你可以定时看到输出信息。不要等到运行结束是再得到反馈!这里有个用sysbench 0.5的测试样例,通过本地hapoxy实例运行插入数据动作以及向在同一个PXC(Percona XtrDB Cluster)集群上的三个节点写数据动作,例如OpenStack Trove会做:
[root@pxc-control ~]# ./sys_haproxy.sh run
sysbench 0.5: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 3
Report intermediate results every 1 second(s)
Random number generator seed is 0 and will be ignored
Threads started!
[ 1s] threads: 3, tps: 0.00, reads/s: 0.00, writes/s: 1099.28, response time: 9.86ms (95%)
[ 2s] threads: 3, tps: 0.00, reads/s: 0.00, writes/s: 973.02, response time: 10.77ms (95%)
[ 3s] threads: 3, tps: 0.00, reads/s: 0.00, writes/s: 1181.01, response time: 6.23ms (95%)
[ 4s] threads: 3, tps: 0.00, reads/s: 0.00, writes/s: 1103.00, response time: 6.77ms (95%)
我也想让你注意到来自Nilnandan Joshi博客的文章,Nilnandan Joshi是来自Percona支持团队,在这篇文章中他介绍了在Debian 7上编译构建sysbench 0.5的一种方法。在这里非常感谢Nil的贡献!
我希望这篇文章可以帮组那些想要升级到sysbench 0.5的同志,并且能质疑(探讨)-test=oltp去哪儿了。我很乐意看到你自己的关于sysbench用户案列,并且是否有其他人发布过他们自己的用于负载测试的lua脚本!
猜你喜欢
- 本文介绍了详解Python实现多进程异步事件驱动引擎,分享给大家,具体如下:多进程异步事件驱动逻辑逻辑code# -*- coding: u
- 对于手动管理内存的语言,比如 C/C++,调用著名的malloc和new函数可以在堆上分配一块内存,这块内存的使用和销毁的责任都在程序员。一
- 前言最近项目中遇到用 SQL Server的程序,以前没用过这个数据库,于是尝试将其转换为 MySQL 的格式,可是不想在本地安装 SQL
- 写爬虫是一项复杂、枯噪、反复的工作,考虑的问题包括采集效率、链路异常处理、数据质量(与站点编码规范关系很大)等。整理自己写一个爬虫程序,单台
- pygame城市之战横版射击游戏,按上下左右方向箭头操作飞机。这是一个横板射击小游戏,在黑夜的城市上空,你将要操作一架飞机去射击敌机, * 效
- 我们经常会遇这样一个需求:判断字符串中是否包含某个关键词,也就是特定的子字符串。比如从一堆书籍名称中找出含有“pytho
- 栅格就是你对页面版式的规划你日常所见的许多页面都有栅格存在。你可能注意不到,但它确实存在,并且支撑着设计内容,建立整体的架构,引导着页面的元
- 按位与或(&、|、^):按照二进制进行逻辑运算例如:数字换成二进制,各自位上的0/1进行逻辑运算,得到的结果转换为数字3 &
- 当多个事件绑定了同一个命令,那么在命令内部根据不同的事件进行处理的时候,怎么确定哪个事件发生了呢,用下面的来检测,经过测试处理tab键和al
- 前言之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章,自以为就了解了其原理,最近面试时和面试官交流,发现遗漏了些东西,这里自己整
- 关于算法的学习,小编觉得编程语言中的算法大都有一些相通的地方,主要的方面一是了解这一算法能用来干什么,另一方面,学习它在这类编程语言中怎么实
- 语音识别是计算机软件识别口语中的单词和短语,并将其转换为可读文本的能力。那么如何在 Python 中将语音转换为文本?如何使用 Speech
- 目前,SQL Server数据库有几个版本都在使用中,比如 7.0, 2000和2005,那么,在现实的工作和学习中,你很有可能会需要从以前
- 假设我们有这样一种数据:data = [ ("apple&quo
- 速查表是帮你记住东西的有效工具。Web设计师和开发者经常使用的快捷键简表会使他们在网上的工作效率大大提高。事实上,速查表就是来帮助我们把日常
- 1. 错误提示 Warning: Cannot send session cookie - headers already sent War
- 首先我们从一个小程序导入,各定一个list,找出其中的素数,我们会这样写import mathdef is_Prims(number): &
- 前言在爬虫系列文章 优雅的HTTP库requests 中介绍了 requests 的使用方式,这一次我们用 requests 构建一个知乎
- 我们利用linux系统中yum安装Apache+MySQL+PHP是非常的简单哦,只需要几步就可以完成,具体如下:一、脚本YUM源安装:1.
- 1.散点图代码# This import registers the 3D projection, but is otherwise unu