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”)
问题:实际上并没有向数据库插入记录。通过数据库的访问日志,没发现执行操作。