首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超线程& MySQL InnoDB线程并发性能

超线程& MySQL InnoDB线程并发性能
EN

Database Administration用户
提问于 2014-10-27 18:32:31
回答 2查看 30.1K关注 0票数 5

我有一个专门的DB服务器,具有以下规范“

  • Ubuntu 12.04 LTS服务器
  • 英特尔(R) Xeon(R) CPU X5670
    • @ 2.93GHz
    • 12芯

  • MySQL 5.5.29
  • 64 GB RAM
  • RAID10

我们目前正在进行超线程处理,因此我们有24个逻辑核。当前运行在2k-4k事务/秒之间。

我提出了以下几点:

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

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

  • 事务负载将加倍,达到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个CPUs处于空闲状态,而其他14-20个CPUs约为70%-90%。
  • %wa对于每个CPU来说是0% - 0.1%,所以这里不存在I/O问题。(来自linux顶部输出)

似乎将innodb_thread_concurrency设置为非零值会使CPU节流,这样它们就不会越界。我将其设置为innodb_thread_concurrency=48,从而减少了CPU的使用。

我希望对这些结果有任何想法。

EN

回答 2

Database Administration用户

发布于 2014-10-27 18:45:28

默认情况下,诺姆b_线程_并发性为0。这实际上是最好的环境。它意味着无限并发。它允许InnoDB存储引擎决定最佳并发票数的启动和地址。将其设置为非零值实际上可以节流InnoDB或节流操作系统,如果设置不正确的话。

我在DBA StackExchange中写了许多关于此设置的文章:

票数 3
EN

Database Administration用户

发布于 2014-12-05 22:26:17

尝试关闭查询缓存,这可能会导致额外锁

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/81204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档