<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        mysql測試小工具mybench試用

        來源:懂視網 責編:小采 時間:2020-11-09 13:19:44
        文檔

        mysql測試小工具mybench試用

        mysql測試小工具mybench試用:小型的mysql測試工具,主要有自帶的mysqlslap、super-smack和mybench。嗯,我這里的小型的意思是指工具安裝過程簡單。mysqlslap的使用方法遍地都是,就不先詳細寫了。根據個人偏好寫寫mybench吧,畢竟是perl的。安裝很簡單,如下: cpanm DBI D
        推薦度:
        導讀mysql測試小工具mybench試用:小型的mysql測試工具,主要有自帶的mysqlslap、super-smack和mybench。嗯,我這里的小型的意思是指工具安裝過程簡單。mysqlslap的使用方法遍地都是,就不先詳細寫了。根據個人偏好寫寫mybench吧,畢竟是perl的。安裝很簡單,如下: cpanm DBI D

        小型的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 < $num_runs)
         {
         my $v = int(rand(100_000));
         ## time the query
         my $t0 = [gettimeofday];
        #真正的執行sql請求,通過上面的rand知道,之前準備的test.mytable的id列必須是int格式,同時不少于10w行(又一處hard)
         $sth->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 < $kids_to_fork) { #用IO::Pipe管道方式來傳遞父子進程的信息 my $pipe = new IO::Pipe; #fork進程開始 if ($pid = fork()) { ## parent $num_kids++; #每fork完成一個打印一個+號 print "+"; #從管道中讀取數據 $pipe->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 = <$pipe>; 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 ($_ < $val) { $val = $_; } } return $val; } sub avg { my $tot; for (@_) { $tot += $_; } return $tot / @_; } sub tot { my $tot; for (@_) { $tot += $_; } return $tot; } 1;

        好了,開始準備數據,比較懶,直接用super-smack的gen-data先出了一些./gen-data -n 100000 -f %n,%80-12s%12n,%512-512s,%d > /root/data,然后進mysql里執行:

        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

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        mysql測試小工具mybench試用

        mysql測試小工具mybench試用:小型的mysql測試工具,主要有自帶的mysqlslap、super-smack和mybench。嗯,我這里的小型的意思是指工具安裝過程簡單。mysqlslap的使用方法遍地都是,就不先詳細寫了。根據個人偏好寫寫mybench吧,畢竟是perl的。安裝很簡單,如下: cpanm DBI D
        推薦度:
        標簽: 工具 測試 試用
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 91福利视频免费观看| 妻子5免费完整高清电视| 三年片免费观看大全国语| 你是我的城池营垒免费看 | 可以免费看的卡一卡二| 亚洲精品国产福利片| 春暖花开亚洲性无区一区二区 | 亚洲成人在线免费观看| 免费看一级高潮毛片| 99久久久国产精品免费无卡顿| 亚洲无码视频在线| 亚洲综合av一区二区三区| 久久大香伊焦在人线免费| 免费看无码自慰一区二区| 国产亚洲成av片在线观看| 亚洲av无码一区二区三区在线播放| 嫩草在线视频www免费观看| 亚洲国产精品无码成人片久久| 亚洲AV无码一区二区三区鸳鸯影院| 免费真实播放国产乱子伦| 亚洲人6666成人观看| 久久国产精品2020免费m3u8| 亚洲视频在线一区二区三区| 久久国产乱子免费精品| 亚洲三级在线播放| 国产91色综合久久免费分享| 亚洲嫩模在线观看| a级片免费在线播放| 亚洲日本在线免费观看| 日本不卡高清中文字幕免费| 亚洲国产成人久久精品app| 国产禁女女网站免费看| 亚洲s码欧洲m码吹潮| 在线免费观看一级毛片| 久久乐国产综合亚洲精品| jjizz全部免费看片| 美女视频黄频a免费观看| 国产区卡一卡二卡三乱码免费| a级片免费在线观看| 亚洲精品成a人在线观看夫| 亚洲精品成人网站在线观看 |