今天打算用MySQL自帶的基准測試套件(Benchmark Suite)來測試一下插入性能,結果出現錯誤:
復制代碼 代碼如下:
# 還是交代一下環境吧
[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
# 下為報錯
[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連接數據庫的重要接口,先來檢查一下這個包是否存在
復制代碼 代碼如下:
[mysql@beanvm ]$ rpm -qa |grep perl-DB
可以直接用yum來安裝,這裡我用的安裝包的形式,幸運的是,這些包在RHEL6的安裝介質中都可以找到,只要安裝下面兩個包就可以了:
復制代碼 代碼如下:
[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包時,我們發現提示缺失libmysqlclient.so.16文件,如果是經常安裝MySQL的話,應該知道libmysqlclient.so是一個MySQL數據庫中必備的庫文件,會不會是沒有鏈接到呢?
復制代碼 代碼如下:
[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
從上面的結果可以得知,已經存在libmysqlclient.so.18文件了,但是版本不符,因此還是需要這個libmysqlclient.so.16文件,那麼從哪裡可以找到呢?最簡便的方法就是安裝MySQL RPM安裝套件中的MySQL-shared-compat包:(我的MySQL是編譯安裝的,但是在同版本的RPM套件中MySQL-shared-compat-5.6.16-1.el6.i686.rpm包卻提供了必要的libmysqlclient.so.16文件,就這點來說編譯部署還是沒有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建議順序安裝三個包:
復制代碼 代碼如下:
# 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進行基准測試了,下面是測試插入性能的部分數據:
復制代碼 代碼如下:
[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)
......
機器太差,數據請無視。。