首页 数据库 mysql教程 mysql测试小工具mybench试用

mysql测试小工具mybench试用

Jun 07, 2016 pm 04:32 PM
mysql 工具 测试 试用

小型的mysql测试工具,主要有自带的mysqlslap、super-smack和mybench。嗯,我这里的小型的意思是指工具安装过程简单。mysqlslap的使用方法遍地都是,就不先详细写了。根据个人偏好写写mybench吧,毕竟是perl的。安装很简单,如下: cpanm DBI DBD::mysql Tim

小型的mysql测试工具,主要有自带的mysqlslap、super-smack和mybench。嗯,我这里的小型的意思是指工具安装过程简单。 mysqlslap的使用方法遍地都是,就不先详细写了。根据个人偏好写写mybench吧,毕竟是perl的。 安装很简单,如下:

cpanm DBI DBD::mysql Time::HiRes
wget http://jeremy.zawodny.com/mysql/mybench/mybench-1.0.tar.gz
tar zxvf mybench-1.0.tar.gz
cd mybench-1.0
perl MakeFile.PL && make && make install
登录后复制

但是使用就不是太简单了——mysqlslap会自己生成(-a选项)sql,super-smack则带了一个gen-data程序生成数据然后自动导入,但是mybench没有,所以只能自己搞定数据。 不过mybench还是自己生成了一个测试模版的脚本在/usr/bin/bench_example,很简单的就知道怎么做了。 example如下:

#!/usr/bin/perl -w
eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}'
    if 0; # not running under some shell
use strict;
use MyBench;
use Getopt::Std;
use Time::HiRes qw(gettimeofday tv_interval);
use DBI;
my %opt;
Getopt::Std::getopt('n:r:h:', \%opt);
#这是我见过的最hardcode的perl脚本了(呃,除了我自己写的垃圾),连db库、用户名、密码都不给运行参数的
my $num_kids  = $opt{n} || 10;
my $num_runs  = $opt{r} || 100;
my $db        = "test";
my $user      = "test";
my $pass      = "";
my $port      = 3306;
my $host      = $opt{h} || "192.168.0.1";
my $dsn       = "DBI:mysql:$db:$host;port=$port";
my $callback = sub
{
    my $id  = shift;
    my $dbh = DBI->connect($dsn, $user, $pass, { RaiseError => 1 });
#为测试准备的请求,测select就写select,测insert就写insert呗~
#如果不修改,也就是说测试用的是test.mytable表,而且必须有一个列叫id
    my $sth = $dbh->prepare("SELECT * FROM mytable WHERE ID = ?");
    my $cnt = 0;
    my @times = ();
    ## wait for the parent to HUP me
    local $SIG{HUP} = sub { };
    sleep 600;
#脚本定义的每个进程执行多少次请求
    while ($cnt execute($v);
#通过前后两次gettimeofday获得sql的exec耗时
        my $t1 = tv_interval($t0, [gettimeofday]);
#完成一次请求执行,加入数组
        push @times, $t1;
        $sth->finish();
        $cnt++;
    }
    ## cleanup
    $dbh->disconnect();
#计算本进程全部请求的各项数据,几个大小和均来自MyBench模块
    my @r = ($id, scalar(@times), min(@times), max(@times), avg(@times), tot(@times));
    return @r;
};
#将上面这个函数交给MyBench模块的fork_and_work执行,即并发指定数量请求,返回总的结果
my @results = MyBench::fork_and_work($num_kids, $callback);
#计算总的数据
MyBench::compute_results('test', @results);
exit;
__END__
登录后复制

然后看看/usr/lib/perl5/site_perl/5.8.8/MyBench.pm,主要内容就是fork和compute:

package MyBench;
use strict;
$main::VERSION = '1.0';
use Exporter;
@MyBench::ISA = 'Exporter';
#导出求最大值、最小值、平均值、综合值的函数给外面用
@MyBench::EXPORT = qw(max min avg tot);
sub fork_and_work($$)
{
#关闭输出缓冲
    $|=1;
    use strict;
    use IO::Pipe;
    use IO::Select;
    $SIG{CHLD} = 'IGNORE';      ## let the kids die
    my $kids_to_fork = shift;
    my $callback     = shift;
    my $num_kids     = 0;
    my @pipes        = ();
    my @pids         = ();
    my $pid          = undef;
    print "forking: ";
    while ($num_kids reader();
            push @pipes, $pipe;
            push @pids,  $pid;
        }
        elsif (defined $pid)
        {
            ## child
#打开管道写入数据的功能
            $pipe->writer();
#执行select_example脚本传入的mysql请求测试函数
            my @result = $callback->($num_kids);
#把结果写入管道
            print $pipe "@result\n";
#关闭管道
            $pipe->close();
            exit 0;
        }
        else
        {
            print "fork failed: $!\n";
        }
    }
    print "\n";
    ## give them a bit of time to setup
    my $time = int($num_kids / 10) + 1;
    print "sleeping for $time seconds while kids get ready\n";
    sleep $time;
 #发送SIGHUP信号给callback函数
    kill 1, @pids;
    ## collect the results
    my @results;
    print "waiting: ";
#从管道中读取数据到数组
    for my $pipe (@pipes)
    {
        my $data = ;
        push @results, $data;
        $pipe->close();
        print "-";
    }
    print "\n";
    return @results;
}
sub compute_results(@)
{
    my $name = shift;
    my $recs = 0;
    my ($Cnt, $Min, $Max, $Avg, $Tot, @Min, @Max);
    while (@_)
    {
        ## 6 elements per record
        my $rec = shift; chomp $rec;
        my ($id, $cnt, $min, $max, $avg, $tot) = split /\s+/, $rec;
        $Cnt += $cnt;
        $Avg += $avg;
        $Tot += $tot;
        push @Min, $min;
        push @Max, $max;
        $recs++;
    }
    $Avg = $Avg / $recs;
    $Min = min(@Min);
    $Max = max(@Max);
    my $Qps = $Cnt / ($Tot / $recs);
    print "$name: $Cnt $Min $Max $Avg $Tot $Qps\n";
    print "  clients : $recs\n";
    print "  queries : $Cnt\n";
    print "  fastest : $Min\n";
    print "  slowest : $Max\n";
    print "  average : $Avg\n";
    print "  serial  : $Tot\n";
    print "  q/sec   : $Qps\n";
}
## some numerical helper functions for arrays
sub max
{
    my $val = $_[0];
    for (@_)
    {
        if ($_ > $val) { $val = $_; }
    }
    return $val;
}
sub min
{
    my $val = $_[0];
    for (@_)
    {
        if ($_ 
<p>好了,开始准备数据,比较懒,直接用super-smack的gen-data先出了一些./gen-data  -n 100000 -f %n,%80-12s%12n,%512-512s,%d > /root/data,然后进mysql里执行:</p>
<p class="highlight"></p><pre class="brush:php;toolbar:false">USE test;
CREATE TABLE mytable (id INT(11) NOT NULL AUTO_INCREMENT, col1 CHAR(100), col2 CHAR(100), col3 INT(11), PRIMARY KEY (id) )ENGINE=InnoDB DEFAULT CHARSET=utf8;
LOAD DATA LOCAL INFILE 'data' REPLACE INTO TABLE 'mytable' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
INSERT INTO mytable (col1,col2,col3) SELECT col1,col2,col3 FROM mytable;
登录后复制

最后执行./select_bench -h 10.168.170.92 -n 10 -r 1000就能看到结果了: forking: ++++++++++ sleeping for 2 seconds while kids get ready waiting: ———- test: 10000 0.00017 0.006809 0.0010413514 10.413514 9602.9063772325 clients : 10 queries : 10000 fastest : 0.00017 slowest : 0.006809 average : 0.0010413514 serial : 10.413514 q/sec : 9602.9063772325

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1673
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
2025年5月份牛市怎么入场 入场交易所推荐 2025年5月份牛市怎么入场 入场交易所推荐 May 12, 2025 pm 08:51 PM

2025年5月份牛市交易所推荐:1、币安;2、OKX;3、火币;4、gate.io;5、芝麻开门等交易所。上述交易所安全可靠,并且支持多种币种,本文提供详细下载入口地址。

2025年牛市交易所推荐 2025年牛市交易所推荐 May 12, 2025 pm 08:45 PM

2025年5月份牛市交易所推荐:1、币安;2、OKX;3、火币;4、gate.io;5、芝麻开门等交易所。上述交易所安全可靠,并且支持多种币种,本文提供详细下载入口地址。

如何设置、获取和删除 WordPress Cookie(像专业人士一样) 如何设置、获取和删除 WordPress Cookie(像专业人士一样) May 12, 2025 pm 08:57 PM

您想了解如何在WordPress网站上使用cookie吗?Cookie是在用户浏览器中存储临时信息的有用工具。您可以使用此信息通过个性化和行为定位来增强用户体验。在本终极指南中,我们将向您展示如何像专业人士一样设置、获取和删除WordPresscookie。注意:这是一个高级教程。它要求您精通HTML、CSS、WordPress网站和PHP。什么是Cookie?Cookie是用户访问网站时创建并存储在用户浏览

如何在 Yandex 网站管理员工具中添加您的 WordPress 网站 如何在 Yandex 网站管理员工具中添加您的 WordPress 网站 May 12, 2025 pm 09:06 PM

您想将您的网站连接到Yandex网站管理员工具吗?Google搜索控制台、Bing和Yandex等网站管理员工具可帮助您优化网站、监控流量、管理robots.txt、检查网站错误等。在本文中,我们将分享如何在Yandex网站管理员工具中添加您的WordPress网站来监控您的搜索引擎流量。什么是Yandex?Yandex是一个位于俄罗斯的流行搜索引擎,类似于Google和Bing。您可以在Yandex中优

十大加密货币交易平台最新排名 2025虚拟币交易所app排行前十名 十大加密货币交易平台最新排名 2025虚拟币交易所app排行前十名 May 12, 2025 pm 08:12 PM

十大加密货币交易平台最新排名:1. OKX,2. Binance,3. Huobi,4. Coinbase,5. Kraken,6. Bitfinex,7. KuCoin,8. Gemini,9. Crypto.com,10. Bitstamp,这些应用因其用户体验、安全性、功能性和市场声誉而备受推崇。

如何修复 WordPress 429 请求过多错误 如何修复 WordPress 429 请求过多错误 May 12, 2025 pm 08:54 PM

您是否在WordPress网站上看到“429请求过多”错误?此错误消息意味着用户向您网站的服务器发送了太多HTTP请求。此错误可能会非常令人沮丧,因为很难找出导致该错误的原因。在本文中,我们将向您展示如何轻松修复“WordPress429TooManyRequests”错误。是什么原因导致WordPress429请求过多错误?“429TooManyRequests”错误的最常见原因是用户、机器人或脚本尝试向网站

十大数字币交易所app最新排名 数字货币十大交易所app推荐 十大数字币交易所app最新排名 数字货币十大交易所app推荐 May 12, 2025 pm 08:15 PM

十大数字币交易所app最新排名依次为:1. OKX,2. Binance,3. Huobi,4. Coinbase,5. Kraken,6. KuCoin,7. Bitfinex,8. Gemini,9. Bitstamp,10. Poloniex。使用这些app的步骤包括:下载并安装app,注册账户,完成KYC认证,充值并开始交易。

2025十大虚拟币交易所app排名 数字货币交易APP最新排行榜前十名 2025十大虚拟币交易所app排名 数字货币交易APP最新排行榜前十名 May 12, 2025 pm 08:18 PM

2025年十大虚拟币交易所APP排名如下:1. OKX,2. Binance,3. Huobi,4. Coinbase,5. Kraken,6. KuCoin,7. Bybit,8. FTX,9. Bitfinex,10. Gate.io。这些交易所根据用户体验、安全性和交易量等维度进行评选,每个平台都提供了独特的功能和服务,以满足不同用户的需求。

See all articles