Tsung用于压测MySQL服务器的脚本
November 18th, 2010
原创文章,转载请注明: 转载自系统技术非业余研究
本文链接地址: Tsung用于压测MySQL服务器的脚本
这个MySQL服务器压测的需求是 :
环境: Linux RHEL 5U4 X86-64, 24G内存, 16核.
MySQL服务器在xx.232.36.1上。
压力由最多32个客户端发起,每个客户端分别做update, insert, delete操作,概率分别是50%, 30%, 20%, 每种操作循环999999 × 100次,每100次操作后休息1-3秒。
这样的压力最多持续2个小时。
我们用的是著名的tsung压力测试工具, 之前我有篇blog介绍过, 见这里。
以下是用到的脚本, 用到了比较先进的随机动态参数替换等技术,对于编写此类脚本有很大的借鉴意义。
<!DOCTYPE tsung SYSTEM "/usr/local/share/tsung/tsung-1.0.dtd">
<tsung loglevel="warning" dumptraffic="false">
<clients>
<client host="localhost" use_controller_vm="true"/>
</clients>
<servers>
<server host="xx.232.36.1" port="3306" type="tcp"/>
</servers>
<load>
<arrivalphase phase="1" duration="2" unit="hour">
<users interarrival="0.1" unit="second" maxnumber="32"></users>
</arrivalphase>
</load>
<sessions>
<session probability="50" name="st-replace" type="ts_mysql">
<request>
<mysql type="connect" />
</request>
<request>
<mysql type="authenticate" database="test" username="test" password="mysqltest" />
</request>
<for from="1" to="999999" var="counter">
<for from="1" to="100" var="counter">
<setdynvars sourcetype="random_number" start="1" end="999999999">
<var name="rnd_uid" />
</setdynvars>
<setdynvars sourcetype="random_string" length="13">
<var name="rnd_uname" />
</setdynvars>
<setdynvars sourcetype="random_number" start="0" end="1">
<var name="rnd_male" />
</setdynvars>
<setdynvars sourcetype="random_number" start="1" end="120">
<var name="rnd_age" />
</setdynvars>
<setdynvars sourcetype="random_string" length="10">
<var name="rnd_city" />
</setdynvars>
<setdynvars sourcetype="random_string" length="52">
<var name="rnd_profile" />
</setdynvars>
<request subst="true">
<mysql type="sql">replace into user(tid, uname, male, age, city, profile) values(%%_rnd_uid%%, "%%_rnd_uname%%", %%_rnd_male%%, %%_rnd_age%%, "%%_rnd_city%%", "%%_rnd_profile%%") </mysql>
</request>
</for>
<thinktime min="2" max="5" random="true" />
</for>
<request>
<mysql type="close"></mysql>
</request>
</session>
<session probability="20" name="st-delete" type="ts_mysql">
<request>
<mysql type="connect" />
</request>
<request>
<mysql type="authenticate" database="test" username="test" password="mysqltest" />
</request>
<for from="1" to="999999" var="counter">
<for from="1" to="100" var="counter">
<setdynvars sourcetype="random_number" start="1" end="999999999">
<var name="rnd_uid" />
</setdynvars>
<request subst="true">
<mysql type="sql">delete from user where tid = %%_rnd_uid%% </mysql>
</request>
</for>
<thinktime min="2" max="5" random="true" />
</for>
<request>
<mysql type="close"></mysql>
</request>
</session>
<session probability="30" name="st-update" type="ts_mysql">
<request>
<mysql type="connect" />
</request>
<request>
<mysql type="authenticate" database="test" username="test" password="mysqltest" />
</request>
<for from="1" to="999999" var="counter">
<for from="1" to="100" var="counter">
<setdynvars sourcetype="random_number" start="1" end="999999999">
<var name="rnd_uid" />
</setdynvars>
<setdynvars sourcetype="random_string" length="52">
<var name="rnd_profile" />
</setdynvars>
<request subst="true">
<mysql type="sql">update user set profile = "%%_rnd_profile%%" where tid = %%_rnd_uid%% </mysql>
</request>
</for>
<thinktime min="2" max="5" random="true" />
</for>
<request>
<mysql type="close"></mysql>
</request>
</session>
</sessions>
</tsung>
祝压测开心!
Post Footer automatically generated by wp-posturl plugin for wordpress.
学习了
我这个网站就遇到了mysql 压力不行的问题
郁闷中
给力
很久以前看tsung文档,说mysql插件支持有限,只能select,就一直没试用。 想不到现在支持的好多了~~~
一直都支持的不错,现在的动态替换什么做的更好了。。。
看到这个配置很欣慰啊,测试了一下,我想问问,如果测试完毕,通过统计之后得出了数据,如果来判定这个mysql的各种瓶颈在哪里?能给出一个事例和解释一下否?
Yu Feng Reply:
November 19th, 2010 at 11:41 am
可以的,tsung文档描述了大概的流程。。。
老大,给力的~哈哈
写的真好, 我也试试for循环的功能
我这死活就是1043错误。。换机子,换数据库版本都试了。。在erl中连又没问题。。无奈。。
Yu Feng Reply:
October 17th, 2011 at 2:52 pm
方便的话,麻烦把步骤和出错信息发email给我. 当然你也可以 If you add the attribute dumptraffic=”true”, all the traffic will be logged to a file. Warn: this will considerably slow down Tsung, so use with care. It is useful for debugging purpose. 参看这里: http://tsung.erlang-projects.org/user_manual.html
看日志就知道什么原因了。
用tsung压测mysql,安装erlang用不用安装mysql相关包?我测试的时候老报“function not exported”错误。。。
Yu Feng Reply:
October 28th, 2011 at 5:00 pm
不需要的,它是走自己的mysql协议
create table user (tid int, uname varchar(128), male int default’0′, age int default’0′, city varchar(128), profile varchar(128));
请问如果使用多台机器产生压力,例如A,B两台机器产生压力,对C进行测试,那么是不是A,B两台机器都需要安装tsung并且进行配置文件的修改?
Yu Feng Reply:
September 25th, 2012 at 10:55 am
2个要求: 1. A,B都安装tsung,而且路径要一样的。 2. A,B ssh互信。 剩下的事情tsung自己能搞定,用A,B同时向C施加压力。
Replace INTO `recorder_info` (proto,HOST,PORT,app,NAME,start_time,end_time,size,`INTERVAL`,`LAST`,`STATUS`,everyday,file_name) VALUES(1,”zgmfclwhsyfjo”,12345,”1″,”25″,1461823804,1461823923,0,0,0,2,0,”NULL”)
问题:实际上并没有向数据库插入记录。通过数据库的访问日志,没发现执行操作。