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

不同的存储引擎对CPU的使用方式不同吗?

评论

相关:dba.stackexchange.com/questions/5666/…

其相关但未解决不同存储引擎对多核CPU的行为。

确实。这就是为什么没有“关闭重复”投票的原因...

这是一个很棒的社区,我仍在学习如何使用此站点。

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

#1 楼

对于MySQL,除了存储引擎分为以下两个基本类别外,没有其他存储引擎之间的比较:


事务处理(符合ACID)
非事务处理

MySQL具有使用多个存储引擎的功能


InnoDB(MySQL 5.5的默认值)
MyISAM(MySQL 5.5之前的默认值)
ARCHIVE
BLACKHOLE
CSV
MEMORY
MRG_MYISAM
FEDERATED
NDB aka MySQL Cluster

对于列出的存储引擎,唯一符合ACID标准的是InnoDB和NDB。为什么要提这个重要事项?原因有两个:


其他存储引擎根本无法从更多的内核中受益,除了基本的磁盘I / O,CPU使用率和整体吞吐量。
代码对于每个非事务性存储引擎,它基本上规定了14个内部操作(无论存储引擎如何),其设计都不旨在利用多核的访问。 XtraDB具有您可以设置的选项,以访问多个内核(Percona Server这样做的时间更长了)。实际上,Percona注入了大约30,000行代码,专门用于通过每个新的GA版本发布的MySQL源代码来增强InnoDB的性能。我们可以肯定的是,Oracle已经从自己的智囊库中添加了自己的增强功能,以便在InnoDB中运行以进行多核操作(自MySQL 5.1.38起)。

需要对与行结合的数据执行MVCC / page锁定,现在可以检测,测量和配置事务性能。

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

UPDATE 2011-09-20 08:03 EDT

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

对于InnoDB插件,提到它只是为了展示早期的举措,以使MySQL拥有更好的InnoDB(例如,Oracle)。 ,仍然还没有从舌头上滚下来)。从MySQL 5.1.38中可以明显看出新的变量可以吸引更多的核心活动。例如,innodb_read_io_threads和innodb_write_io_threads(自MySQL 5.1.38起)都为读取和写入分配了指定数量的线程。默认值是4,最大值是64。默认值和最大值设置如此之不同(4-64)表明InnoDB与您配置它一样多线程且占用大量内核!!!!!!

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

评论


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

–里克·詹姆斯(Rick James)
2011-09-20 8:51

@Rick-在我的回答中进一步解决了您的评论

– RolandoMySQLDBA
2011-09-20 12:02



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

–里克·詹姆斯(Rick James)
2011-09-21 15:39

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

– RolandoMySQLDBA
2011-09-21 15:50



#2 楼

我发现谈论使用内核的存储引擎可能会对初学者产生误导。如果程序具有足够的多线程,则操作系统将在尽可能多的内核上调度该程序。阻止线程并发运行。所有存储引擎都需要互斥锁,但是MyISAM中肯定有一些互斥锁。 -

我喜欢拥有许多用于处理面向用户请求的工作负载的内核。有很多可以减少查询时间之间的差异。就像在超市中打开12条通道而不是2条通道排队一样。

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

评论


提及房间中的大象+1:互斥量竞争

–cerd
2014年2月11日下午4:23