数据库

 首页 > 数据库 > mariadb > Windows系统下MariaDB5.5数据库的性能测试

Windows系统下MariaDB5.5数据库的性能测试

分享到:
【字体:
导读:
         摘要:我们有很长时间没有发布过在Windows下的基准测试文章了,而Windows下的MariaDB包含一些专门做的改进,这些改进很多人并不知晓,因为我们自己也很少提及。本文的目的是向你展示MariaDB在Windows下的性能表现。进行测试的机器包含2个CPU共8核的处理器...

Windows系统下MariaDB5.5数据库的性能测试
我们有很长时间没有发布过在 Windows 下的基准测试文章了,而 Windows 下的 MariaDB 包含一些专门做的改进,这些改进很多人并不知晓,因为我们自己也很少提及。本文的目的是向你展示 MariaDB 在 Windows 下的性能表现。
进行测试的机器包含2个CPU共8核的处理器(这是我手头上能找到最好的机器了)、10K SAS 磁盘(RAID1),使用 sysbench 0.4 测试单表共100万行记录。我通过网络来运行这个压力测试,并发的客户端从 4 到 4096。
这里是 OLTP-只读 吞吐量测试结果:



说明:
绝大多数的测试结果表明,MariaDB 的吞吐量比 MySQL 高出 10% 左右
在 4096 并发客户端时,MariaDB 的吞吐量是 MySQL 5.5 的 四倍多 476% (2382 vs 413 TPS).
很多人理所当然的认为吞吐量并不能代表数据库的整体性能表现。在 OLTP 的基准测试中,响应时间同样很重要,实际上它比吞吐量更加重要,这点我同意,因此,下面是查询的响应时间,意味着 95% 的事务都在指定的时间内处理完毕。

OLTP 只读响应时间

并发数 4 8 16 32 64 128 256 512 1024 2048 4096
MariaDB 4.87 6.81 8.83 12.35 22.12 43.56 90.35 180.57 619.05 1003.88 1965.77
MySQL 4.86 7.14 9.96 16.21 37.39 101.33 238.89 499.63 971.07 2241.83 25215.29

上表中显示,MariaDB 5.5 不管是在吞吐量还是响应时间方面都是优于 MySQL 的。
但是,为什么 MariaDB 在 Windows 下的只读测试由于 MySQL 5.5 呢?二者基于同一个代码,表现应该也相同啊。这个问题的答案并不是 MariaDB 做了什么优化,也无关 XtraDB 和 InnoDB 的优劣。答案是 MariaDB threadpool. 这个线程池在 Windows 平台是默认启用的。
可是,为什么使用线程池就可以有如此好的性能呢?答案是 MariaDB 承担了通过调整线程池的大小并回调到对应的 Windows 本身的线程池,这在操作系统这一级别上相当于黑盒排序,因此能获取良好的性能。Windows 内置的线程池的核心,是自 NT 3.5 就有的技术,这是 Windows 专有的特性,运行在其上的服务器应该使用这种技术。要让这项技术运行良好的招数是:
不要让同一时间在同一个 CPU 上运行太多的线程,这样可减少上下文切换,这是提高吞吐量的最重要的因素
在完成的 LIFO 顺序中激活线程等待,热门的线程保持热门,可降低缓存失效
顺序处理 IO 完成,这是响应时间表现良好的因素
最后便是降低热锁的争用
由此,线程池是只读性能表现佳的主要因素。

下一个有趣的问题是在写操作上 MariaDB 表现是否一致。因此我们使用写模式来运行 sysbench 工具,也就是 update_non_index (每个查询对一个非索引的整数字段进行加值处理)。为了最大化写的吞吐量,我们设置了参数 innodb_flush_log_at_trx_commit 值为 0,每次日志的写入是每秒一次,而不是每次事务提交一次。
测试结果如下:
OLTP write-only (update_non_index/flush_log=0) 吞吐量:


这个结果看起来很棒,差别来源于多个因素,包括 XtraDB 的写性能、分组提交、线程池等都对这个结果会有影响。但我想 Windows 平台下的 MariaDB 的 asynchronous IO optimization (异步 IO 优化) 是最主要的因素。
在上述测试中,所有 IO 相关的参数和 InnoDB 参数都使用的是默认值,结果看起来太好了以至于让我们怀疑这是真的。我真的想通过调整为 innodb_io_capacity and/or innodb_write_io_threads 参数为 MySQL 带来更加的性能,有人知道该如何调整吗?

OLTP writeonly (update_non_index/flush_log=0) 响应时间, 95 percentile

并发数 4 8 16 32 64 128 256 512 1024 2048
MariaDB 0.33 0.63 0.75 1.06 1.94 3.85 8.25 21.38 129.79 274.40
MySQL 0.32 0.61 0.73 1.61 7.62 26.82 96.45 219.29 661.19 2723.36

下面是对数据库的参数调整:
[mysqld]
sql-mode="NO_ENGINE_SUBSTITUTION"
back_log=500
user=root
port=3306
max_connections=4096
max_connect_errors=5000
max_prepared_stmt_count=50000
table_cache=2048
transaction_isolation=REPEATABLE-READ
loose-skip-external-locking
innodb_status_file=0
innodb_data_file_path=ibdata1:200M:autoextend
innodb_buffer_pool_size=1G
innodb_additional_mem_pool_size=20M
innodb_log_file_size=650M
innodb_log_buffer_size=100M
innodb_support_xa=0
innodb_doublewrite=0
innodb_flush_log_at_trx_commit=0
query-cache-size=0
query-cache-type=0
symbolic-links=0
skip-grant-tables
Windows系统下MariaDB5.5数据库的性能测试
分享到:
MariaDB数据库中thread pool解析
MariaDB数据库中thread pool解析 对于MySQL5.5来说只有企业版本中含有 Thread Pool,但幸运的是 mariadb 5.1中就已存在该功能,mariadb 5.5 中进行了改进。    本篇暂且介绍FAQ:后期会放出其工作原理及使用情况。    商业版本中 5.5.16 添加了 thread  handling model (线程池)来应对多客户连接问题。...
MySQL分支-MariaDB的安装与配置
MySQL分支-MariaDB的安装与配置 什么是mariadb,可能有些人还是不认识的 那就先介绍一下吧 MariaDB 是一个采用 Maria 存储引擎的 MySQL 分支版本,是由原来 MySQL 的作者 Michael Widenius 创办的公司所开发的免费开源的数据库服务器。 说白了 就是mysql 的分支 , 由于oracle 众所周知的原因,我们还是准备一...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……