MySQL小工具 之 压测Groovy

    xiaoxiao2024-01-29  150

      用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: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 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](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() ``//开始执行 </div> 本文来源于"阿里中间件团队播客",原文发表时间"   2011-09-10"
    最新回复(0)