今天打算用MySQL自帶的基準(zhǔn)測(cè)試套件(Benchmark Suite)來測(cè)試一下插入性能,結(jié)果出現(xiàn)錯(cuò)誤:
# 還是交代一下環(huán)境吧
[root@beanvm ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.2 (Santiago)
[root@beanvm ~]# uname -a
Linux beanvm 2.6.32-220.el6.i686 #1 SMP Wed Nov 9 08:02:18 EST 2011 i686 i686 i386 GNU/Linux
# 下為報(bào)錯(cuò)
[mysql@beanvm ~]$ cd /usr/local/mysql/sql-bench/
[mysql@beanvm sql-bench]$ ./test-insert --server=mysql --user=root --password=mysql --log
Can't locate DBI.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at ./test-insert line 33.
BEGIN failed--compilation aborted at ./test-insert line 33.
很顯然這里缺少DBI組件,它是perl連接數(shù)據(jù)庫的重要接口,先來檢查一下這個(gè)包是否存在
[mysql@beanvm ]$ rpm -qa |grep perl-DB
可以直接用yum來安裝,這里我用的安裝包的形式,幸運(yùn)的是,這些包在RHEL6的安裝介質(zhì)中都可以找到,只要安裝下面兩個(gè)包就可以了:
[root@beanvm Packages]# rpm -ivh perl-DBI-1.609-4.el6.i686.rpm
warning: perl-DBI-1.609-4.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:perl-DBI ########################################### [100%]
[root@beanvm Packages]# rpm -ivh perl-DBD-MySQL-4.013-3.el6.i686.rpm
warning: perl-DBD-MySQL-4.013-3.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
error: Failed dependencies:
libmysqlclient.so.16 is needed by perl-DBD-MySQL-4.013-3.el6.i686
libmysqlclient.so.16(libmysqlclient_16) is needed by perl-DBD-MySQL-4.013-3.el6.i686
在安裝perl-DBD-MySQL包時(shí),我們發(fā)現(xiàn)提示缺失libmysqlclient.so.16文件,如果是經(jīng)常安裝MySQL的話,應(yīng)該知道libmysqlclient.so是一個(gè)MySQL數(shù)據(jù)庫中必備的庫文件,會(huì)不會(huì)是沒有鏈接到呢?
[root@beanvm ~]# ls -l /usr/lib/libmysqlclient.so.16*
[root@beanvm ~]# ls -l /usr/local/mysql/lib/
total 147260
-rw-r--r--. 1 mysql mysql 13322694 Feb 15 14:30 libmysqlclient.a
lrwxrwxrwx. 1 mysql mysql 16 Feb 15 14:39 libmysqlclient_r.a -> libmysqlclient.a
lrwxrwxrwx. 1 mysql mysql 17 Feb 15 14:39 libmysqlclient_r.so -> libmysqlclient.so
lrwxrwxrwx. 1 mysql mysql 20 Feb 15 14:39 libmysqlclient_r.so.18 -> libmysqlclient.so.18
lrwxrwxrwx. 1 mysql mysql 24 Feb 15 14:39 libmysqlclient_r.so.18.1.0 -> libmysqlclient.so.18.1.0
lrwxrwxrwx. 1 mysql mysql 20 Feb 15 14:39 libmysqlclient.so -> libmysqlclient.so.18
lrwxrwxrwx. 1 mysql mysql 24 Feb 15 14:39 libmysqlclient.so.18 -> libmysqlclient.so.18.1.0
-rwxr-xr-x. 1 mysql mysql 7654927 Feb 15 14:30 libmysqlclient.so.18.1.0
-rw-r--r--. 1 mysql mysql 129797464 Feb 15 14:38 libmysqld.a
-rw-r--r--. 1 mysql mysql 10166 Feb 15 14:29 libmysqlservices.a
drwxr-xr-x. 3 mysql mysql 4096 Feb 15 14:39 plugin
從上面的結(jié)果可以得知,已經(jīng)存在libmysqlclient.so.18文件了,但是版本不符,因此還是需要這個(gè)libmysqlclient.so.16文件,那么從哪里可以找到呢?最簡便的方法就是安裝MySQL RPM安裝套件中的MySQL-shared-compat包:(我的MySQL是編譯安裝的,但是在同版本的RPM套件中MySQL-shared-compat-5.6.16-1.el6.i686.rpm包卻提供了必要的libmysqlclient.so.16文件,就這點(diǎn)來說編譯部署還是沒有RPM安裝來的全面)
# 我的MySQL版本:5.6.16
[root@beanvm ~]# rpm -ivh MySQL-shared-compat-5.6.16-1.el6.i686.rpm
Preparing... ########################################### [100%]
1:MySQL-shared-compat ########################################### [100%]
再次安裝perl-DBD-MySQL-4.013-3.el6.i686.rpm就可以了
[root@beanvm Packages]# rpm -ivh perl-DBD-MySQL-4.013-3.el6.i686.rpm
warning: perl-DBD-MySQL-4.013-3.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:perl-DBD-MySQL ########################################### [100%]
綜上所述,安裝DBI建議順序安裝三個(gè)包:
# DBI安裝包:
perl-DBI-1.609-4.el6.i686.rpm
# 必備的庫文件包,注意版本,這里主要提供的是libmysqlclient.so.16
MySQL-shared-compat-5.6.16-1.el6.i686.rpm
# DBD組件
perl-DBD-MySQL-4.013-3.el6.i686.rpm
成功后就可以使用Benchmark進(jìn)行基準(zhǔn)測(cè)試了,下面是測(cè)試插入性能的部分?jǐn)?shù)據(jù):
[mysql@beanvm sql-bench]$ ./test-insert --server=mysql --user=root --password=mysql --log
Testing server 'MySQL 5.6.16' at 2014-02-15 16:36:17
Testing the speed of inserting data into 1 table and do some selects on it.
The tests are done with a table that has 100000 rows.
Generating random keys
Creating tables
Inserting 100000 rows in order
Inserting 100000 rows in reverse order
Inserting 100000 rows in random order
Time for insert (300000): 879 wallclock secs ( 3.51 usr 1.21 sys + 0.00 cusr 0.00 csys = 4.72 CPU)
Testing insert of duplicates
Time for insert_duplicates (100000): 18 wallclock secs ( 3.81 usr 1.41 sys + 0.00 cusr 0.00 csys = 5.22 CPU)
Test of prepared+execute/once prepared many execute selects
Time for prepared_select (100000): 31 wallclock secs (10.87 usr 1.81 sys + 0.00 cusr 0.00 csys = 12.68 CPU)
......
機(jī)器太差,數(shù)據(jù)請(qǐng)無視。。