多核和MySQL性能


38

RAM的重要性已被确​​定,但是关于MySQL使用CPU时,关于内核和多线程的重要性的资料很少。我说的是在4cores,6cores和8cores等上运行MySQL的区别。

不同的存储引擎对CPU的使用是否不同?



其相关但未解决针对多核CPU的不同存储引擎的行为。
里克·詹姆斯

1
确实。这就是为什么没有“几乎一样重复”投票的原因……
gbn

这是一个很棒的社区,我仍在学习如何使用此站点。
里克·詹姆斯

嗨,哥们,看看这里:mysql-cluster-blog.com,您至少发现了一些东西

Answers:


30

关于MySQL,除了存储引擎分为两个基本类别外,它们之间没有其他比较:

MySQL使用多个存储引擎

对于列出的存储引擎,只有ACID兼容的存储引擎是InnoDB和NDB。为什么要提这个重要事项?两个原因:

  • 除了基本的磁盘I / O,CPU使用率和总体吞吐量以外,更多核心的存在根本无法使其他存储引擎受益。
  • 每个非事务性存储引擎的代码基本上规定了14个内部操作,而与存储引擎无关,其代码并非旨在利用多个内核的访问权限。

MySQL 5.5下的InnoDB,InnoDB插件)和Percona Server的XtraDB可以设置一些选项,以便访问多个内核(Percona Server这样做的时间更长了)。实际上,随着每个新的GA版本MySQL源代码的发布,Percona注入了大约30,000行代码,专门用于增强InnoDB的性能。我们可以确定,甲骨文已经从自己的智囊中加入了自己的增强功能,以便在InnoDB中运行以进行多核操作(自MySQL 5.1.38起)。

由于需要结合行/页锁定来对数据执行MVCC,因此现在可以检测,测量和配置事务性能。

如果我了解到使用多个内核的一件事,那就是您必须有效地调整InnoDB,而不仅仅是开箱即用地依赖InnoDB

更新美国东部时间2011-09-20 08:03

关于使InnoDB受益于所有核心,我们需要保持深入。内核还必须注意数据库服务器中的其他事项(操作系统,磁盘,内存,应用程序,监视等)。对于那些预算有限的人,许多人倾向于让数据库服务器也提供NFS,Munin的监视,对JBoss,PHP的应用程序支持,并且清单还在继续。如果您希望MySQL(更具体地说是InnoDB)使用更多的内核,则数据库服务器必须专用于MySQL,并且OS / Disk / Memory必须仅倾向于MySQL。从这个角度来看,InnoDB将毫无疑问地使用更多的内核

至于InnoDB插件,仅是为了展示早期的举措,以表明MySQL方面有一个更好的InnoDB(是,Oracle。对不起,仍然没有放弃)。从MySQL 5.1.38中可以明显看出用于召集更多核心活动的新变量。

例如,innodb_read_io_threadsinnodb_write_io_threads(均自MySQL 5.1.38起)为读取和写入分配指定数量的线程。默认为4,最大为64。默认和最大设置是如此不同(4-64),表明InnoDB与您配置它一样多线程且占用大量内核

Percona领导了MySQL社区通过InnoDB访问更多内核的需求。因此,MySQL开始效仿。我必须承认,甲骨文(yuck)为进行更多的核心活动做了必要的改进。


如您上面建议的那样,在MySQL 5.5下调整的InnoDB是否可以受益于所有内核?{对InnoDB插件有点困惑}
Rick James

@Rick-进一步回答了您在我的回答中的评论
RolandoMySQLDBA 2011年

在这里,这似乎是一个完全不同的故事,而在使用多核方面,MyISAM似乎面目全非,但在dba.stackexchange.com/questions/5974/best-of-myisam-and-innodb上却是另一面。好处。因此,决定走哪条路似乎很困难。
里克·詹姆斯

2
这完全取决于您使用MyISAM或InnoDB的目的。您愿意缓存多少?您是否依靠MySQL或其他缓存机制(例如varnish和memcached)进行数据检索?您的硬件是否针对InnoDB进行了适当的扩展?是98%的SQL SELECT?表格是高速读取的最佳格式吗?事先回答这些问题应指导我们进行存储引擎选择,适当的配置,硬件选择,甚至达到更深层次的内容,例如高可用性,数据库拓扑,读/写拆分,并且此列表可以继续。
RolandoMySQLDBA 2011年

9

我发现谈论使用内核的存储引擎可能会对初学者产生误导。如果程序具有足够多的线程,则操作系统将在尽可能多的内核中调度该程序。

限制cpu缩放的特定问题是内部锁定代码(互斥体)具有争用并阻止线程并发运行时。所有存储引擎都需要互斥体,但是MyISAM中肯定有一些互斥体。

如果我们忽略互斥锁争用一秒钟,然后回到您的主要问题:拥有多个内核有多重要?--

我喜欢为服务于用户面临的请求的工作负载使用很多核心。有很多可以减少查询时间之间的差异。可以想象这就像在超市中排队,只有12条通道,而只有2条通道。

更新:我写了一篇博客文章,说明为什么垂直可伸缩性(多核)很重要。


5
提及房间中的大象+1:互斥竞争
cerd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.