技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统运维 --> MySQL小工具 之 压测Groovy

MySQL小工具 之 压测Groovy

浏览:2355次  出处信息

用Groovy编写的一个简单的MySQL给压力的工具,原先是用python写的,但是发现MySQLdb在liunx下性能不佳,就改用Groovy来实现了,支持简单的分表,支持useServerPrepStmts

这里有两个版本

  • mysql_test.groovy  : 他的各类SQL的比例完全按照 设的的比率执行,比如100:1的读写比,那么MySQL执行的读写SQL肯定也是100:1
  • mysql_test_for_thd.groovy : 他的SQL执行比率是线程比,如果设的100:1的读写比 那么就是100个线程(连接)去读,1个线程(连接)去写

用这个工具来简单的给压力和造数据是不错的选择.

Example:

import java.util.concurrent.atomic.AtomicLong
 
def mt = new mysql_test(url: "jdbc:mysql://127.0.0.1:3306/test?characterEncoding=GBK&useServerPrepStmts=true&cachePrepStmts=true",
        usr: "test", pwd: "test", table_name: "test")
mt.table_num = 1 //分表的数量
mt.run_times = 2500  //执行的总次数
mt.thread_num = 100 //启用线程数(连接数),如果是mysql_test_for_thd 此值没有意义
 
def select_id = new AtomicLong(1L) //设定一个起始的读id
def update_id = new AtomicLong(1L) //设定一个起始的写id
 
mt.add_sql("""select * from no_id where uuid='#id#'""",
        {id -> ["id": select_id.getAndAdd(1)]},
        100) //加入一个读的SQL ,id从1开始执行一次就加1,读比是100 如果是mysql_test_for_thd 就是启100个线程来执行这个sql, 其中第二个参数id,是内部生成的一个自增id,如果第二个参数id对应的是List的话,会使用useServerPrepStmts,来逐个匹配参数
 
mt.add_sql("""insert into test value(null,#id#,'nick:#id#','fullname:#id#','phone:#id#',#id#)""",
        {id -> ["id": update_id.getAndAdd(1)]},
        10) //同样的加入一个写的SQL
 
mt.run() //开始执行

建议继续学习:

  1. 给Apache做压力测试时遇到的问题    (阅读:6011)
  2. Super Smack    (阅读:3381)
  3. 用httpclient做压力测试时Too many open files的解决办法    (阅读:3218)
  4. [转]VPS服务器性能 压力测试工具 http_load、webbench、ab、Siege使用教程    (阅读:2660)
  5. tcpcopy,模拟在线压力测试的好帮手    (阅读:2428)
  6. easy_runner一个简单的压测程序    (阅读:2308)
  7. 降低应用latency方法谈    (阅读:2138)
  8. 从Java和JavaScript来学习Haskell和Groovy(引子)    (阅读:1836)
  9. 倡议:MySQL压力测试基准值    (阅读:1626)
  10. 从Java和JavaScript来学习Haskell和Groovy(元编程)    (阅读:1422)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1