MYSQL5.5和MYSQL5.1性能对比
简介:看了MYSQL5.5的一些新特性不免有些心动,最近刚好有时间还有空闲的服务器来做一下性能测试,下面就分别将mysql-5.1.50、mysql-5.5.15、Percona-Server-5.5.15三个版本做了一个性能测试,性能测试工具为sysbench、mysqlslap两个工具。
环境:CPU: Xeon W5647 2.93GHzX2颗
内存:2X16G
硬盘:4X600G RAID 10
MYSQL版本:mysql-5.1.50.tar.gz/mysql-5.5.15.tar.gz/ Percona-Server-5.5.15-rel21.0.tar.gz
Sysbench版本:sysbench-0.4.12
性能测试结果:一、 Sysbench性能测试
1. Sysbench测试说明
测试数据为1000万,采用sysbench自动生成的表结构,采用混合sql测试方法,测试的语句数量为50万,分别对50、100、200的并发做了测试
2. 生成数据的语句:
sysbench --mysql-user=root --mysql-password=zhang@123 --test=oltp --mysql-host=192.168.100.61 --oltp-test-mode=complex \
--mysql-table-engine=innodb --oltp-table-size=10000000 --mysql-db=test --oltp-table-name=test prepare
3. 测试语句:
sysbench --mysql-user=root --mysql-password=zhang@123 --test=oltp --mysql-host=192.168.100.61 --oltp-test-mode=complex \
--mysql-table-engine=innodb --oltp-table-size=10000000 --mysql-db=test --oltp-table-name=test \
--num-threads=50 --max-requests=500000 run
三个性能测试语句除了--num-threads数量不一样,其他都是一样的,这里就不贴出来了。
4. 测试结果图:
Mysql版本 |
并发数 |
消耗时间 |
每秒事务数 |
每秒读取和写入数 |
mysql-5.1.50 |
50 |
173.8682s |
2046.28/s |
38879.23/s |
100 |
252.4939s |
1960.91/s |
37257.28/s |
|
200 |
291.2413s |
1814.27/s |
34471.22/s |
|
mysql-5.5.15 |
50 |
244.3542s |
2876.10/s |
54645.85/s |
100 |
254.9980s |
1980.42/s |
37628.05/s |
|
200 |
275.6170s |
1716.90/s |
32621.09/s |
|
Percona-5.5.15 |
50 |
157.2437s |
3180.29/s |
60425.58/s |
100 |
248.1540s |
2015.04/s |
38285.74/s |
|
200 |
267.8760s |
1866.75/s |
35468.29/s |
5. 测试结论:
从sysbench的性能测试结果看,Percona-5.5.15性能最好,但是Percona-5.5.15随着并发数的增大性能下降得也比较厉害。mysql-5.5随着并发数的增大性能下滑也比较厉害。而mysql-5.1.50性能随着并发数的增大,性能比较稳定。
二、 Mysqlslap性能测试
1. Mysqlslap测试简介:
采用mysqlslap自动生成表结构的方式,表结构为10列字符列,10列数字列,总语句书为50万,其中10万为写入操作,并发分别为50、100、2000,测试分两种方式,一个是采用字符类型做主键,一个是采用数字类型+auto_increment做主键
2. 测试语句:
mysqlslap --no-defaults -h192.168.100.61 -uroot -pzhang@123 --engine=innodb --auto-generate-sql-write-number=100000 --auto-generate-sql-guid-primary --concurrency=50,100,200 --number-of-queries=500000 --iterations=2 --number-char-cols=10 --number-int-cols=10 --auto-generate-sql --create-schema=test --auto-generate-sql-load-type=mixed
mysqlslap --no-defaults -h192.168.100.61 -uroot -pzhang@123 --engine=innodb --auto-generate-sql-write-number=100000 --auto-generate-sql-add-autoincrement --concurrency=50,100,200 --number-of-queries=500000 --iterations=2 --number-char-cols=10 --number-int-cols=10 --auto-generate-sql --create-schema=test --auto-generate-sql-load-type=mixed
3. 测试结果图:
字符类型做主键:
Mysql版本 |
并发数 |
每个客户端运行的queries数 |
每个客户端执行所有queries消耗时间(字符主键) |
每个客户端执行所有queries消耗时间(数字主键) |
mysql-5.1.50 |
50 |
10000 |
24.795s |
21.680s |
100 |
5000 |
25.094s |
23.548s |
|
200 |
2500 |
27.208s |
25.350s |
|
mysql-5.5.15 |
50 |
10000 |
22.818s |
21.502s |
100 |
5000 |
23.633s |
22.088s |
|
200 |
2500 |
23.862s |
22.891s |
|
Percona-5.5.15 |
50 |
10000 |
22.285s |
22.104s |
100 |
5000 |
24.279s |
22.800s |
|
200 |
2500 |
25.187s |
21.677s |
4. 测试结论:
从mysqlslap的测试结果来看,大体和前面结果一致。只是才用数字类型做主键的时候性能改善比较大,尤其是在高并发的场景,采用int的话性能提升更明显
附:mysql的性能参数如下:
点击(此处)折叠或打开
- [client]
- port = 3306
- default-character-set=utf8
- socket = /usr/local/mysql/tmp/mysql.sock
-
- [mysqld]
- log_bin_trust_function_creators = 1
- character-set-server = utf8
- port = 3306
- socket = /usr/local/mysql/tmp/mysql.sock
- basedir = /usr/local/mysql
- datadir = /data/dbdata
- back_log = 100
- max_connections = 500
- max_connect_errors = 100000
- table_cache = 624
- external-locking = FALSE
- max_allowed_packet = 16M
- sort_buffer_size = 8M
- join_buffer_size = 4M
- thread_cache_size = 128
- query_cache_size = 128M
- query_cache_limit = 2M
- query_cache_min_res_unit = 2k
- default-storage-engine = INNODB
- thread_stack = 192K
- transaction_isolation = REPEATABLE-READ
- tmp_table_size = 128M
- max_heap_table_size = 128M
- slow_query_log
- long_query_time = 0.5
- log-bin
- binlog_format = MIXED
- binlog_cache_size = 4M
- max_binlog_cache_size = 8M
- max_binlog_size = 512M
- key_buffer_size = 256M
- read_buffer_size = 8M
- read_rnd_buffer_size = 8M
- bulk_insert_buffer_size = 64M
- myisam_sort_buffer_size = 128M
- myisam_max_sort_file_size = 10G
- myisam_repair_threads = 1
- myisam_recover
-
- interactive_timeout = 28800
- wait_timeout = 28800
-
- skip-name-resolve
-
- server-id = 1
-
- innodb_buffer_pool_size = 20G
- innodb_additional_mem_pool_size = 20M
- innodb_data_file_path = ibdata1:256M:autoextend
- innodb_file_io_threads = 8
- innodb_thread_concurrency = 16
- innodb_flush_log_at_trx_commit = 2
- innodb_log_buffer_size = 16M
- innodb_log_file_size = 512M
- innodb_log_files_in_group = 3
- innodb_flush_method=O_DIRECT
- #5.5的添加了innodb_io_capacity参数
- #innodb_io_capacity=500
- innodb_support_xa=0
- innodb_max_dirty_pages_pct = 75
- innodb_lock_wait_timeout = 120
- innodb_file_per_table = 1
- [myisamchk]
- key_buffer_size = 512M
- sort_buffer_size = 512M
- read_buffer = 8M
- write_buffer = 8M
-
- [mysqldump]
- quick
- max_allowed_packet = 32M
- [mysqld_safe]
- open-files-limit = 10240