数据库
首页 > 数据库> > 超线程和MySQL InnoDB线程并发性能

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

作者:互联网

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

> 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缓冲池设置为48GB,几乎涵盖了整个数据集(60 GB数据索引).

>交易负荷将翻倍至4k-8k交易/秒.目前CPU负载约为1000%,因此我预计这将成为瓶颈.

如何更好地调整我的CPU线程以及MySQL如何使用这些线程?如果有人对innodb_thread_concurrency做了任何基准测试,请告诉我.

我将不胜感激任何建议.

UPDATE

从innodb_thread_concurrency = 48更新到:

> innodb_thread_concurrency = 0

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

>负载平均增加
> mysqld进程CPU使用率从400% – 1000%变为400% – 1400%
>大约4-10个CPU闲置,而其他14-20个CPU大约70%-90%
>%wa为0% – 每个CPU为0.1%,因此I / O不是问题所在. (来自linux顶级输出)

似乎将innodb_thread_concurrency设置为非零值可以限制CPU,使它们不会过火.我将它设置回innodb_thread_concurrency = 48并且CPU使用率下降.

我很感激对这些结果的任何想法.

解决方法:

默认情况下,innodb_thread_concurrency为0.这实际上是最佳设置.它意味着无限的并发性.它允许InnoDB存储引擎决定启动和解决the best number of concurrency tickets.如果设置不正确,将其设置为非零值实际上可以限制InnoDB或限制操作系统.

我在DBA StackExchange中写了很多关于this setting的帖子:

> 2011年5月26日:About single threaded versus multithreaded databases performance
> 2011年8月16日:Why do MySQL threads often show “freeing items” status when the query cache is disabled?
> 2011年9月12日:Possible to make MySQL use more than one core?
> 2011年9月20日:Multi cores and MySQL Performance
> 2012年4月26日:Is the CPU performance relevant for a database server?
> 2012年8月3日:Slow insert performance in mysql innodb table for solr indexing

标签:performance-tuning,linux,mysql,innodb,mysql-5-5
来源: https://codeday.me/bug/20190806/1603403.html