当前位置:首页 > linux教程 > 列表

sysbench自定义lua脚本实现实际的业务逻辑压力测试

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-21 15:33:27 浏览: 评论:0 

sysbench本身就是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试,数据库目前支持MySQL/Oracle/PostgreSQL了,下面给各位介绍sysbench自定义lua脚本实现实际的业务逻辑压力测试例子.

使用sysbench进行mysql的oltp测试,一般的测试在sysbench中在tests/db中提供了一个oltp.lua脚本可以进行oltp的压力测试.

但不能完全模拟自己实际业务的压力测试,不同的业务,数据结构,数据量都是不一样的,为了更接近实际业务的读写压力测试,就得自己写lua脚本,然后通过sysbench进行压力测试.

写这个lua脚本很简单,只需要会写lua脚本就可以了.

1、首先收集实际业务的访问数据库的sql;

2、准备一台恢复好的备份库(从线上导一个).

3、将收集的sql写在lua脚本里(具体如何写,后面举个例子).

4、通过sysbench的--test参数和--mysql-db参数进行测试(这里就不需要prepare了,直接run就行).

举个小例子,模拟实际业务环境:

  1. CREATE TABLE `t1` ( 
  2.   `id` int(10) NOT NULL AUTO_INCREMENT, 
  3.   `namevarchar(50) DEFAULT NULL
  4.   PRIMARY KEY (`id`) 
  5. ) ENGINE=InnoDB AUTO_INCREMENT=10101 DEFAULT CHARSET=utf8 

插入模拟的际业务数据:

  1. delimiter $$ 
  2. create procedure add_data(in maxnum int)  
  3. begin  
  4.  declare i int default 0; 
  5.  declare s varchar(500);  
  6.  while(i<maxnum) do  
  7.   select concat("abcdedsfsfsdfsfsf",i) into s;  
  8.   insert into t1(name)values(s);   
  9.   set i=i+1; 
  10.  end while; 
  11. end $$  
  12. delimiter ; 
  13.  
  14. call add_data(10000); 

准备lua脚本:[root@sever3 db]# cat test.lua

  1. function thread_init(thread_id) 
  2.    -- set_vars() 
  3.    db_connect() 
  4. end 
  5. //phpfensi.com 
  6. function event(thread_id) 
  7.    local table_name 
  8.    local rs 
  9.    table_name = "t1" 
  10.         db_query("begin"
  11.   for i=1, 10000 do 
  12.       rs = db_query("SELECT name FROM ".. table_name .." WHERE id=" .. i) 
  13.   end 
  14. end 

set_vars()  如果需要使用更多的参数,需要执行这个,前面需要引用下common.lua

db_connect()  是连接数据库的,这个是sysbench里的函数,不管那么多,直接用就行。

thread_init()  第一个调用的lua函数

event(thread_id) 可以把sql逻辑写到这里,–num-threads多少个,就会同时调用多少个,然后进行压测就ok.

  1. [root@sever3 sysbench]# ./sysbench --mysql-socket=/data/mysql_3309/mysql.sock --test=tests/db/test.lua --mysql-user=root --num-threads=12 --report-interval=10 --rand-type=uniform --max-time=30 --max-requests=0 --percentile=99 --mysql-db=test run 
  2. sysbench 0.5:  multi-threaded system evaluation benchmark 
  3.  
  4. Running the test with following options: 
  5. Number of threads: 12 
  6. Report intermediate results every 10 second(s) 
  7. Random number generator seed is 0 and will be ignored 
  8.  
  9.  
  10. Threads started! 
  11.  
  12. [  10s] threads: 12, tps: 0.00, reads/s: 64131.41, writes/s: 0.00, response time: 3291.51ms (99%) 
  13. [  20s] threads: 12, tps: 0.00, reads/s: 79980.83, writes/s: 0.00, response time: 1947.61ms (99%) 
  14. [  30s] threads: 12, tps: 0.00, reads/s: 78354.15, writes/s: 0.00, response time: 2418.21ms (99%) 
  15. OLTP test statistics: 
  16.     queries performed: 
  17.         read:                            2280000 
  18.         write:                           0 
  19.         other:                           228 
  20.         total:                           2280228 
  21.     transactions:                        0      (0.00 per sec.) 
  22.     deadlocks:                           0      (0.00 per sec.) 
  23.     read/write requests:                 2280000 (72705.35 per sec.) 
  24.     other operations:                    228    (7.27 per sec.) 
  25.  
  26. General statistics: 
  27.     total time:                          31.3595s 
  28.     total number of events:              228 
  29.     total time taken by event execution: 368.0393s 
  30.     response time: 
  31.          min:                                985.61ms 
  32.          avg:                               1614.21ms 
  33.          max:                               3756.13ms 
  34.          approx.  99 percentile:            3289.54ms 
  35.  
  36. Threads fairness: 
  37.     events (avg/stddev):           19.0000/3.83 
  38.     execution time (avg/stddev):   30.6699/0.42

Tags: sysbench lua脚本

分享到: