MariaDB-5.5 线程池性能

MariaDB-5.5.21-beta 是第一个包含新线程池的 MariaDB 版本。Oracle 为 MySQL Enterprise 提供了一个商业线程池插件,但现在 MariaDB 将线程池实现带到了社区!

如果您不熟悉这个术语,请阅读关于它的知识库文章

线程池的主要设计目标是提高 MariaDB 服务器在大量并发连接下的可伸缩性。为了测试和演示这一点,我使用多达 4096 个线程运行了 sysbench OLTP RO 基准测试,以比较新的 pool-of-threads 和传统的 thread-per-connection 调度器

OLTP(ro) MariaDB-5.5.21 pool-of-threads vs. thread-per-connection

基准测试描述

  • sysbench 多表 OLTP,只读
  • 16 张表,总计 4000 万行(约 10G 数据)
  • 16G 缓冲池 – 结果与磁盘性能无关
  • mysqld 绑定到 16 个 CPU 核心,sysbench 绑定到其他 8 个

读/写 OLTP 基准测试结果将在可用时尽快发布。

原始基准测试结果和使用的脚本可以在这里下载

附注

让我再补充几点关于绑定 CPU 核心和线程池配置的信息。

用于此基准测试的 Sysbench-0.5 结果发现非常占用 CPU 资源;尤其是在高并发级别下。如果允许 mysqld 和 sysbench 都运行在所有 CPU 核心上,它们会争夺资源 – 这将导致在许多线程下出现人为的糟糕结果。给 sysbench 分配 4 个核心、给 mysqld 分配 20 个核心时,sysbench 本身成了瓶颈。所以我最终给 sysbench 分配了 8 个核心(这里留了一些余地),给 mysqld 分配了 16 个核心。

在 UNIX 上,MariaDB 线程池通常不需要配置,因为它会自动将 thread-pool-size 配置为 CPU 核心的数量(这取决于 sysconf(3) 实现 _SC_NPROCESSORS_ONLN),这在几乎所有情况下都是最佳大小。如果将 mysqld 绑定到 CPU 核心的子集,则应手动将 thread-pool-size 设置为分配给 mysqld 的 CPU 核心数量。