在j2ee企业应用中,不仅仅需要考虑到系统的架构与设计,还需要关注存储系列的话题,存储包括硬件和软件,话题中数据库也算存储系列当中的重点。当前对与mysql的使用越来越广泛,对mysql的期望和要求也越来越多。记得在前几天我写过一篇文章,关于一个德国网站的 架构,他们正在考虑将现在使用的mysql引擎换掉,采用xtradb数据库引擎,详见: 德国sns交友/视频网站poppen.de的技术架构分享。
最近看一个老外在dell poweredge r900机器上做的mysql测试,使用mysql 5.1.42,分别采用3种不同的引擎进行比较,分别是mysql自带的innodb,innodb-plugin 1.0.6、 xtradb 1.0.6-9 ,测试数据90gb+索引。
dell poweredge r900的机器配置如下:
* 4 quadcore intel(r) xeon(r) cpu e7320 @ 2.13ghz (16 cores in total)
* 32gb of ram
* raid10 on 8 disks 2.5/15k rpms
* fusionio 160gb slc
* fusionio 320gb mlc
测试环境的innodb数据文件建立在fusionio存储设备上,采用160gb slc卡 和 320gb mlc卡配置的软raid0 存储,而innodb 日志和 mysql系统表建立在 raid10 设备上,测试环境中的my.cnf配置文件清单如下:
* innodb
innodb_buffer_pool_size=26g
innodb_data_file_path=ibdata1:10m:autoextend
innodb_file_per_table=1
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=8m
innodb_log_files_in_group=3
innodb_log_file_size=512m
innodb_thread_concurrency=0
innodb_flush_method = o_direct
max_connections=3000
query_cache_size=0
skip-name-resolve
skip-grant-table
table_cache=10000
* innodb-plugin / xtradb
ignore-builtin-innodb
plugin-load=innodb=ha_innodb_plugin.so
innodb_buffer_pool_size=26g
innodb_data_file_path=ibdata1:10m:autoextend
innodb_file_per_table=1
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=8m
innodb_log_files_in_group=3
innodb_log_file_size=512m
innodb_thread_concurrency=0
innodb_flush_method= o_direct
innodb_write_io_threads=8
innodb_read_io_threads=8
innodb_io_capacity=10000
口水:
文中提到的fusion-io 是什么?fusion-io 是固态存储技术和高向能i/o解决方案的领先供应商。该公司的的固态存储技术弥补了处理能力和存储性能需求之间的差距,满足了企业对高性能的存储,详见:官方网站http://fusioniochina.com/
能看出innodb-plugin引擎比mysql默认的 innodb引擎要好,他利用多线程i/o,满足更多的吞吐量,在多核cpu条件下运行的效率将会更高, 对内存也有更效的利用。
而xtradb对mysql很多方面也进行了改进和性能提高,并且增加监控参数,显示一些后台线程的统计信息,innodb默认开启4个io线程,由参数innodb_file_io_threads控制,但在unix/linux平台该参数无效,而xtradb/innodb plugin默认开启8个io线程,并且读线程和写线程可以分别由参数innodb_read_io_threads和 innodb_write_io_threads控制。
在多核cpu环境中,如果cpu和磁盘本身没有成为瓶颈,开启更多线程应该对提升io性能有很好的 作用。而读写线程的单独控制,则可以针对不同应用环境下的要求进行灵活配置。xtradb更加详细的列出buffer pool中不同部分的详细信息,还有buffer pool的命中率和lru的信息等,对内存的使用情况一目了然,之前innodb在代码里面写死了 innodb_io_capacity 为100,但是现在db服务器很多都是用多块硬盘做raid10,iops 一般都远不止100,因此这次改进之后 innodb_io_capacity 变成可以动态调整的参数,测试结果如图所示:
测试结果中的cpu使用率,如图所示:
磁盘的吞吐状态,如图所示:
wp-image-2055 height=320 src=http://www.68idc.cn/help/uploads/allimg/150207/0sh24157-2.png title=disk_bo width=450>
看过资料后,还是想自己折腾一番,下载mysql源码编译、安装,先不安装xtradb,键入“show plugins” ,如图所示:
查看大图请点击这里
在另外一台机器上安装xtradb引擎后的效果,如图所示:
从上图中可以看出多了不少栏目,查看大图请点击这里
bwt:mysql、 xtradb 引擎软件下载
http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.44.tar.gz
http://launchpad.net/percona-xtradb/release-8/1.0.4-8/+download/percona-xtradb-1.0.4-8.tar.gz
2个不同的mysql环境搭建好后,采用apache 的ab压力测试工具对java web工程测试,测试环境只有一张表操作表里面有100条数据,服务器是本地tomcat6,修改代码中jdbc的url连接地址,依次测试,每台机器的配置基本相同cpu 1.6g,2g内存。
详细测试结果如下:
==========================linux innodb(远程)==============================
connection times (ms)
min mean[+/-sd] median max
connect: 0 1 2.5 0 7
processing: 134 1516 604.3 1447 3553
waiting: 133 1515 604.3 1447 3552
total: 134 1518 604.4 1451 3559
percentage of the requests served within a certain time (ms)
50% 1451
66% 1774
75% 1968
80% 2078
90% 2320
95% 2454
98% 2869
99% 3101
100% 3559 (longest request)
==========================linux xtradb(远程)==============================
connection times (ms)
min mean[+/-sd] median max
connect: 0 1 2.1 0 6
processing: 8 915 463.2 816 2360
waiting: 8 915 463.1 816 2360
total: 8 917 463.5 816 2365
percentage of the requests served within a certain time (ms)
50% 816
66% 1038
75% 1251
80% 1359
90% 1541
95% 1716
98% 2014
99% 2130
100% 2365 (longest request)
===========================windows innodb(本地)==============================
connection times (ms)
min mean[+/-sd] median max
connect: 0 1 2.2 0 6
processing: 155 3337 1617.2 3116 9243
waiting: 154 3337 1617.2 3115 9243
total: 155 3339 1616.7 3116 9243
percentage of the requests served within a certain time (ms)
50% 3116
66% 3930
75% 4535
80% 4868
90% 5484
95% 6010
98% 6478
99% 7153
100% 9243 (longest request)
总结:
测试数据的多少暂时不是关注的重点,关键是相同的前置条件,相同的测试数据,在不同的mysql引擎中测试得到的值,在2个不同的操作系统下,2种不同的 mysql数据引擎,测试结果表名,xtradb果然是表现最好的,其次是linux 下mysql默认的innodb引擎,最差的是windows下的mysql默认的innodb引擎,
–end–
原文地址:mysql插件xtradb, 感谢原作者分享。
