超线程和 MySQL InnoDB 线程并发性能

MYo*_*sef 5 mysql innodb performance linux mysql-5.5 performance-tuning

我有一个具有以下规格的专用数据库服务器”

  • Ubuntu 12.04 LTS 服务器
  • 英特尔(R) 至强(R) CPU X5670
    • @ 2.93GHz
    • 12核
  • MySQL 5.5.29
  • 64 GB 内存
  • RAID10

我们目前正在做超线程,所以我们有 24 个逻辑核心。目前在 2k-4k 事务/秒之间运行。

我已经设置了以下内容:

  • innodb_thread_concurrency = 48
  • innodb_read_io_threads = 24
  • innodb_write_io_threads = 24

这是严格的 OLTP 负载(70% 读取)。查询速度相对较快(毫秒)。查询缓存已开启但未使用过多。临时磁盘表不经常创建。InnoDB 缓冲池设置为 48GB,几乎涵盖了整个数据集(60GB 数据+索引)。

  • 事务负载将翻倍至 4k-8k 事务/秒。目前 CPU 负载约为 1000%,所以我预计这将是瓶颈。

如何更好地调整 CPU 线程以及 MySQL 如何使用这些线程?让我知道是否有人对innodb_thread_concurrency.

我将不胜感激任何建议。


更新

innodb_thread_concurrency = 48到更新后:

  • innodb_thread_concurrency = 0

在高峰时间(4-5k 事务/秒)的生产系统上查看行为,这是我观察到的:

  • 负载平均增加
  • mysqld 进程 CPU 使用率从 400% - 1000% 上升到 400% - 1400%
  • 大约 4-10 个 CPU 空闲,而其他 14-20 个 CPU 大约 70%-90%
  • 每个 CPU 的 %wa 为 0% - 0.1%,因此 I/O 不是这里的问题。(来自 linux top 输出)

似乎设置innodb_thread_concurrency为非零值会限制您的 CPU,以免它们过火。我将其重新设置为innodb_thread_concurrency=48CPU 使用率下降。

我将不胜感激对这些结果的任何想法。

Rol*_*DBA 3

默认情况下,innodb_thread_concurrency为 0。这实际上是最佳设置。这意味着无限并发。它允许 InnoDB 存储引擎决定要启动和处理的最佳并发票数。如果设置不正确,将其设置为非零值实际上会限制 InnoDB 或限制操作系统。

我在 DBA StackExchange 中写了很多关于此设置的帖子: