`

用sysbench(或者super-smack)测试mysql性能

阅读更多

Sysbench是一款流行的开源基准测试工具,用来测试不同操作系统平台即其上数据库的性能。由于我们目前讨论的是MySQL,我将重点讲解数据库测试部分。

Sysbench基准测试在测试OLTP时,先生成一张表,然后再运行一组查询命令。默认情况下,表中每一行数据约为250字节,并创建100行。根据我的经验,我 们创建1000万行。Allan有一篇关系测试细节的博客(http://blogs.sun.com/allanp/entry/tuning_mysql_on_linux)。
在此,我将从另外一个角度来介绍我们的测试。

使测试获得好得数据,这其实非常简单:
1 最大化CPU利用率
2 减少由于IO造成的延迟

最大化CPU利用率

提 高资源利用率,对于获得最佳的测试性能非常重要。如果你拥有一台多核机器(现在很多机器都已经是多核),你需要并行执行多个线程,从而使系统中所有的核都 得到利用 。Sysbench通过--number-threads变量来确定内核数量。根据经验,通常当线程数接近或等于内核数量是,测试效果最佳。另外,你还需 要提高在inno db内部执行的并发线程数量。从MySQL 5.0.19之后,innodb_thread_concurrency 参数的含义就改变了,因此请确定您设置了正确的值。我们发现,将该变量的值设置为0是最好的(无限线程)。

减少由于IO造成的延迟

消除IO延迟的一个方法是不要使用任何IO,例如,缓存所有的事情。Sysbench测试表中每一个行约为250字节,因此1000万行表中的数据量约为2.5GB 。大多数系统的内存都大于2.5GB,因此您可以将这个表都放入内存缓存中。

MySQL 使用变量innodb_buffer_size来确定缓存大小。如果您有足够的内存(在我们的测试中是2.5GB),您可以将整个表都放入缓存中。另一个 策略(尤其是当您在使用32位MySQL时)是为innodb_buffer_size设一个较小的值,而在文件系统缓存中来缓存表。但是我认为在 innodb级别缓存数 据的效率更高。这将消除或明显减少所有的读。

对消除写而言,您可以选择进行只读测试,或使用一个可缓存(cache-enabled)的磁盘来写。缓存可以是NVRAM,也可以是磁盘上的写缓存。注意:使用没 有电池支持的缓存是非常危险的,请在您自己的磁盘上做缓存。

如果您仍然发现了由IO造成的延迟(转化为系统的空闲时间),您可以尝试添加更多线程来吸收可以的CPU。在寻找合适的平衡时,您需要格外小心。

安装:

./configure --with-mysql-includes=/opt/app/mysql/include/mysql --with-mysql-libs=/opt/app/mysql/lib/mysql
 



通过修改下面的参数,我们获得了最好的测试结果:
1 通过--num-threads 参数来使用多个sysbench线程
2 在my.cnf文件中设置innodb_thread_concurrency = 0
3 将innodb_buffer_size设置为大于或等于表大小

我在测试中,对my.cnf中的参数做了如下配置:
[mysqld]
datadir=/mysqldata
innodb_data_home_dir = /mysqldata
innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
innodb_log_group_home_dir = /mysqldata
innodb_buffer_pool_size = 4096M(含有1000万行记录的表大小为2.5GB)
innodb_additional_mem_pool_size = 20M
innodb_log_file_size = 400M
innodb_log_buffer_size = 64M
innodb_thread_concurrency = 0

 

 

 

cpu测试

sysbench --test=cpu --cpu-max-prime=20000 run

2、线程测试

sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run

3、磁盘IO性能测试

sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw prepare
sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw run
sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw cleanup

        上述参数指定了最大创建16个线程,创建的文件总大小为3G,文件读写模式为随机读。

4、内存测试

sysbench --test=memory --memory-block-size=8k --memory-total-size=4G run

        上述参数指定了本次测试整个过程是在内存中传输 4G 的数据量,每个 block 大小为 8K。

5、OLTP测试


google:

--db-ps-mode=disable

sysbench --test=oltp   --mysql-user=root --mysql-host=localhost --mysql-socket=/tmp/mysql.sock --mysql-password=  --mysql-table-engine=innodb --oltp-table-size=1000000 prepare

sysbench  --mysql-db=sbtest --max-requests=0 --test=oltp --mysql-engine-trx=yes --mysql-table-engine=innodb --oltp-table-size=1000000 --db-ps-mode=disable  --mysql-user=root --mysql-host=localhost --mysql-socket=/tmp/mysql.sock  --mysql-password= --num-threads=16 --max-time=600 run

sysbench  --mysql-db=sbtest --max-requests=0 --test=oltp --mysql-engine-trx=yes --mysql-table-engine=innodb --oltp-table-size=1000000 --db-ps-mode=disable  --mysql-user=root --mysql-host=localhost --mysql-socket=/tmp/mysql.sock  --oltp-read-only --mysql-password= --num-threads=16 --max-time=600 run

kernel developer:

sysbench --test=oltp --mysql-socket=/tmp/mysql.sock --mysql-user=root --max-requests=0 --max-time=60 --oltp-read-only=on --num-threads=$1 run

上述参数指定了本次测试的表存储引擎类型为 myisam,这里需要注意的是,官方网站上的参数有一处有误,即 --mysql-table-engine,官方网站上写的是 --mysql-table-type,这个应该是没有及时更新导致的。另外,指定了表最大记录数为 1000000,其他参数就很好理解了,主要是指定登录方式。测试 OLTP 时,可以自己先创建数据库 sbtest,或者自己用参数 --mysql-db 来指定其他数据库 。--mysql-table-engine 还可以指定为 innodb 等 MySQL 支持的表存储引擎类型。

 

以下为本文DB的结果:

OLTP test statistics:
    queries performed:
        read:                            140000
        write:                           50000
        other:                           20000
        total:                           210000
    transactions:                        10000  (1999.02 per sec.)
    deadlocks:                           0      (0.00 per sec.)
    read/write requests:                 190000 (37981.47 per sec.)
    other operations:                    20000  (3998.05 per sec.)

Test execution summary:
    total time:                          5.0024s
    total number of events:              10000
    total time taken by event execution: 39.8898
    per-request statistics:
         min:                                  2.87ms
         avg:                                  3.99ms
         max:                                 43.48ms
         approx.  95 percentile:               5.37ms

Threads fairness:
    events (avg/stddev):           1250.0000/27.23
    execution time (avg/stddev):   4.9862/0.00

 

 

 

 

 

分享到:
评论
3 楼 aeoluspu 2013-05-13  
不错 mysql 测试部分感觉不详细
2 楼 niyunjiu 2009-01-19  
yueliangdao0608 写道

很好,支持一下。

转载的而已,呵呵
1 楼 yueliangdao0608 2009-01-17  
很好,支持一下。

相关推荐

    MYSQL集群测试

    1. 测试工具介绍:文档提到了mysqlslap、sysbench、supersmack等工具,这些都是用于测试MYSQL性能的工具。 - mysqlslap是一个用于模拟多用户访问MySQL数据库的性能测试工具,它可以用来进行并发读写测试。 - ...

    mysql集群测试工具.docx

    4. **Super-smack**:这是由MySQL AB的程序员编写的另一个开源工具,同样支持多线程并发压力测试,具有高度可定制性。 在安装和使用这些工具时,通常需要根据具体的操作系统和MySQL版本来调整。例如,在Red Hat 5.5...

    Mysql 集群测试文档

    4. **Super-smack**:由MySQL AB的程序员开发的另一款开源产品,同样支持多线程并发压力测试,具有高度的可定制性。 #### 三、测试工具的安装与配置 以**MySQLslap**为例,其安装通常随MySQL默认安装包一同提供,...

    07mysql集群测试报告.pdf

    为了达到这个目标,使用了四个测试工具:Mysqlslap、mysql benchmark suite、sysbench和supersmack。测试用例包括并发写能力、并发事务处理能力、单线程功能测试以及大数据量下的读写性能对比。 在并发写能力测试中...

    测试工具总结

    Sysbench是一个多线程的数据库和系统性能测试工具,支持MySQL、PostgreSQL等多种数据库系统。 除了Web服务器和数据库测试工具,还有一些专门针对特定场景的工具,如Database test suite用于数据库的全面测试,super...

    IT运维工程师的23个细节进阶.doc

    - MySQL基准测试:如mysqlsla、sql-bench、Super Smack、Percona's TPCC-MYSQL Tool和sysbench。 - MySQL代理:SOHU-DBProxy、Altas、cobar和Oceanus用于优化MySQL性能和负载均衡。 - 备份工具:mysqldump、...

    IT-运维工程师的23个细节-进阶 (2).pdf

    - 压测与基准:mysqlsla、sql-bench、Super Smack、Percona's TPCC-MYSQL Tool、sysbench。 - 代理与备份:MySQL Proxy工具如SOHU-DBProxy、Altas、cobar、Oceanus,以及物理备份工具Xtrabackup、LVM Snapshot。 ...

    IT-运维工程师的23个细节-进阶.docx

    15. **MySQL基准测试**: 使用mysqlsla、sql-bench、Super Smack、Percona's TPCC-MYSQL Tool和sysbench来衡量数据库性能。 16. **MySQL代理**: SOHU-DBProxy、Altas、cobar、Oceanus提供MySQL的负载均衡和故障切换...

    IT-运维工程师的23个细节-进阶.pdf

    MySQL基准测试工具如mysqlsla、sql-bench、Super Smack等,MySQL Proxy如SOHU-DBProxy、Atlas、cobar和Oceanus。物理备份有Xtrabackup和LVM Snapshot,逻辑备份工具如mysqldump、mysqlhotcopy、mydumper等。 9. **...

Global site tag (gtag.js) - Google Analytics