首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用通用日志在MySQL中捕获的查询对MySQL进行压力测试

问使用通用日志在MySQL中捕获的查询对MySQL进行压力测试
EN

Database Administration用户
提问于 2013-04-04 10:57:19
回答 1查看 6.6K关注 0票数 2

是否有可用的工具可以使用MySQL通用日志创建的日志文件进行压力测试?在google上进行了大量搜索之后,我发现很少有压力测试工具,它们只使用一些压力测试基准。一个解决方案是使用Apache JMeter,但是它不从MySQL日志文件创建测试计划,并且为我的所有查询创建自定义测试计划太费时了。

或者,是否有至少可以从.sql日志创建MySQL文件的工具?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2013-04-04 11:39:08

这只是一个跟踪而不是一个完整的解决方案,“您的”解决方案是基于您的幻想(和一些工作) ;)

我已经完成了由一般查询日志生成的这种测试捕获和清理查询,并使用sysbench 0.5编写了我自己的lua文件,您可以在正式的源代码中找到一些示例,在my数据库的镜像(hw和schema/data -a快照)上,这样我就可以立即恢复数据的原始状态-)。

然后可以运行这样的命令:

./sysbench --mysql-table-engine=myisam --mysql-db=<yourdb> --mysql-user=<user> --mysql-host=<host> --mysql-password=<pass> --test=tests/db/<yourlua>.lua --num-threads=8 --max-requests=8 run

收集和图表您的结果,更改并发和请求,并监视您的数据库和HW状态。

我的lua文件包含大约80.000个查询,由插入、更新和删除组成。

更新#1

您可以尝试的一个很好的起点是开始(简单)编写lua文件,如下所示:

代码语言:javascript
复制
pathtest = string.match(test, "(.*/)") or ""

dofile(pathtest .. "common.lua")

function thread_init(thread_id)
   set_vars()

   if (db_driver == "mysql" and mysql_table_engine == "myisam") then
      -- begin_query = "LOCK TABLES ".. table_name .." WRITE"
      -- commit_query = "UNLOCK TABLES"
      begin_query = "SELECT 1>0"
      commit_query = "SELECT 1>0"
   else
      begin_query = "BEGIN"
      commit_query = "COMMIT"
   end
end

function event(thread_id)
    local table_name
    db_query(begin_query)
    rs = db_query("INSERT INTO .....")
    rs = db_query("INSERT INTO .....")
    rs = db_query("SELECT ... FROM ...")
    rs = db_query("DELETE ...")
    db_query(commit_query)
end

将查询放入db_query("")函数,清除这类过程的一般查询日志需要做一些工作。

这里有一个"personal“lua文件的简单输出,如上面所示,其中包含9个查询、7个insert和2个select,+2 BEGIN/COMMIT:

代码语言:javascript
复制
sysbench 0.5:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 8
Random number generator seed is 0 and will be ignored


Threads started!

OLTP test statistics:
    queries performed:
        read:                            32
        write:                           56
        other:                           0
        total:                           88
    transactions:                        0      (0.00 per sec.)
    deadlocks:                           0      (0.00 per sec.)
    read/write requests:                 88     (7728.11 per sec.)
    other operations:                    0      (0.00 per sec.)

General statistics:
    total time:                          0.0114s
    total number of events:              8
    total time taken by event execution: 0.0252s
    response time:
         min:                                  2.87ms
         avg:                                  3.15ms
         max:                                  3.65ms
         approx.  95 percentile:               3.65ms

Threads fairness:
    events (avg/stddev):           1.0000/0.00
    execution time (avg/stddev):   0.0032/0.00

希望这能有所帮助

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/39221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档