IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Tsung用于压测MySQL服务器的脚本

Erlang非业余研究 2011-01-06 22:24:52 累计浏览 2,714 次
本机暂存

这个MySQL服务器压测的需求是 :

环境: Linux RHEL 5U4 X86-64, 24G内存, 16核.
MySQL服务器在10.232.36.100上。

压力由最多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="10.232.36.100" 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>

祝压测开心!

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. 用Hyer来进行网站的抓取 (累计阅读 158,251)
  2. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,399)
  3. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
  4. Mysql监控指南 (累计阅读 21,351)
  5. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,523)
  6. Linux如何统计进程的CPU利用率 (累计阅读 16,308)
  7. 我的 RHCA 之路 (累计阅读 14,013)
  8. Linux内存点滴 用户进程内存空间 (累计阅读 13,230)
  9. 给程序员新手的一些建议 (累计阅读 13,089)
  10. 在Apache2.2.XX下安装Mod-myvhost模块 (累计阅读 13,057)