mysql内核测试_RQG:MySQL内核开发人员的利器

RQG(Random Query Generator)是一个强大的工具,用于弥补MySQL Test在重现某些bug时的不足。它基于用户定义的词法生成SQL语句执行,适用于并发测试场景。本文介绍了RQG的安装、使用方法以及一个并发测试的例子,帮助MySQL内核开发者更好地进行测试。
摘要由CSDN通过智能技术生成

【IT168 技术】MySQL Test Framework是每个MySQL内核开发人员必须熟悉的测试框架。然而,对于某些bug, MySQL Test脚本难以重现,而RQG(Random Query Generator)则是非常强悍的一个工具,可以很好的弥补此时MySQL Test的某些不足之处。

RQG的原理就是基于用户自定的词法生成对应的语句并执行。剩下的,只要你来写.yy文件。

1. 安装

$ bzr branch lp:randgen/6317KB 166KB/s | Fetching revisions:Inserting stream

Branched765revision(s).

集团的MySQL机器PERL安装比较全,在此免除安装步骤。其它几个PERL的安装,参考wiki。

测试安装是否正确:

perl gentest.pl\–dsn=dbi:mysql:host=127.0.0.1:port=3300:user=root:database=test\–gendata=conf/examples/example.zz\–grammar=conf/examples/example.yy

#2012-09-04T22:33:18Starting: gentest.pl –dsn=dbi:mysql:host=127.0.0.1:port=3300:user=root:database=test –gendata=conf/examples/example.zz –grammar=conf/examples/example.yy

#2012-09-04T22:33:18——————————-…

#2012-09-04T22:33:23Kill GenTest::ErrorFilter(31632)

#2012-09-04T22:33:23Test completed successfully.

2. 实战一个典型的case

如果我们发现线上某台MySQL Crash可能与并发的show variables 和 alter table分区表相关,这时一个典型的mysql test如下:

–source include/have_partition.inc

–source include/have_innodb.inc

CREATE TABLEIFNOTEXISTS t1 (`a`INT) ENGINE=InnoDB;

INSERT INTO t1 VALUES (1),(2),(3),(4);

–connect (con1,localhost,root,,)

–let$run=100while($run)

{

–connection default

–send ALTER TABLE t1 PARTITION BY HASH (`a`) PARTITIONS4–connection con1

–let$show=300while($show)

{

SHOW ENGINE INNODB STATUS;

–dec $show

}

–connection default

–reap

–dec $run

}

DROP TABLE t1;

但这个并发性不强,是个模拟的并发线程。此时RQG则可以很好地弥补mysql test的不便。

$cat 1.yy

query_init:

CREATE TABLEIFNOTEXISTS t1 (`a`INT) ENGINE=InnoDB;

INSERT INTO t1 VALUES (1),(2),(3),(4);

thread1:

SHOW ENGINE INNODB STATUS;

query:

ALTER TABLE t1 PARTITION BY HASH (`a`) PARTITIONS4;

$cat 1.sh

perl ./runall.pl\–threads=2\–queries=100M\–duration=300\–skip-gendata\–grammar=1.yy\–basedir=/u01/mysqld2/

$sh 1.sh

#2012-09-04T22:38:48Copyright (c)2008,2011Oracleand/orits affiliates. All rights reserved. Useissubjecttolicense terms.

#2012-09-04T22:44:42Test completed successfully.

#2012-09-04T22:44:42gentest.pl exitedwithexitstatus STATUS_OK (0)2012-09-04T22:44:42[32354] ./runall.pl willexitwithexitstatus STATUS_OK (0)

可以查看对应的mysqld日志:

#2012-09-04T22:38:48Copyright (c)2008,2011Oracleand/orits affiliates. All rights reserved. Useissubjecttolicense terms.

#2012-09-04T22:44:42Test completed successfully.

#2012-09-04T22:44:42gentest.pl exitedwithexitstatus STATUS_OK (0)2012-09-04T22:44:42[32354] ./runall.pl willexitwithexitstatus STATUS_OK (0)

当然,你也可以attach GDB到启动的MySQLD上来尽情地玩。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值