用于负载/性能测试的主活动的多线程重放

atx*_*dba 5 mysql performance performance-testing

有谁知道任何现有的工具/产品可以完成我正在尝试做的事情?

在四处搜索之后,我唯一能找到的围绕我想要完成的事情是其他人在寻找同样的事情http://forums.mysql.com/read.php?24,192250,192250

这个想法是我想捕获到我的主人的所有流量,以针对监控开始时拍摄的整个数据库的快照保存重播日志。Bin 日志不会满足我的需求,因为它们只包含写入。我希望阅读活动能够真实地查看提议的更改对“真实”生产流量的影响。

真正的生产流量意味着来自所有访问数据库的应用程序的所有内容都将被修改。如果应用程序级别发生了某些更改,则仅运行该应用程序的测试不会考虑当时系统中正在进行的其他活动。不能保证在测试环境中运行的所有应用程序都具有相同的数据库状态。当我启动它们时,我可以将测试快照作为起点,但应用程序无法准确重放自己的活动。

我已经使用http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/ 中的 tcpdump 脚本来监视活动,但这并没有告诉我哪些查询来自哪些连接。我想要的部分回放是多线程方法,它从实际使用的相同数量的线程中重放活动。

我负担不起打开常规查询日志记录 b/c 我的生产主机将无法处理性能损失。

整个过程的快照部分是有一个黄金起点数据库,以确保在每次测试运行开始时一切都相同。

Rol*_*DBA 0

我实际上有一个建议,需要一些工作,但可行。

理论情景

  • 您有 3 个数据库:db1、db2、db3
  • 生产数据库启用了二进制日志记录

要创造足够的流量,您需要满足以下条件:

  • db1、db2 和 db3 两周前的生产数据库 (TwoWeekOldData.sql) 的 mysqldump
  • 生产数据库上两周或更长时间的二进制日志
  • 四个运行 MySQL 的数据库服务器
    • DBServer 1-3 是生产数据库的从属服务器
    • DBServer 1-4 已启用二进制日志记录
    • DBServer1 已加载replicate-do-db=db1并且仅加载了 db1 数据
    • DBServer2 已加载replicate-do-db=db2并且仅加载了 db2 数据
    • DBServer3 已加载replicate-do-db=db3并且仅加载了 db3 数据
    • DBServer4 已加载 TwoWeekOldData.sql 中的所有数据

您将需要以下内容:

  • 对 Slave1 上的所有二进制日志运行 mysqlbinlog 并将 SQL 收集到 db1traffic.sql 中
  • 针对 Slave2 上的所有二进制日志运行 mysqlbinlog 并将 SQL 收集到 db2traffic.sql 中
  • 针对 Slave3 上的所有二进制日志运行 mysqlbinlog 并将 SQL 收集到 db3traffic.sql 中
  • 像这样并行运行这三个流量 SQL 文件

    • mysql -hdb4 -u... -p... -A -Ddb1 < db1traffic.sql &
    • mysql -hdb4 -u... -p... -A -Ddb2 < db2traffic.sql &
    • mysql -hdb4 -u... -p... -A -Ddb3 < db3traffic.sql &
  • 可以使用DBServer4来测量

    • 服务器负载
    • 查询性能
    • I/O利用率
    • 无论您想测量什么

正如我在开头提到的,这需要一些设置工作以及访问旧数据和自旧数据上次备份以来的所有二进制日志条目。

我希望这能为您提供一些有关生成真实流量而不是模拟普通负载的指导。

试一试!!