RAM的重要性已被确定,但是关于MySQL使用CPU时,关于内核和多线程的重要性的资料很少。我说的是在4cores,6cores和8cores等上运行MySQL的区别。
不同的存储引擎对CPU的使用是否不同?
RAM的重要性已被确定,但是关于MySQL使用CPU时,关于内核和多线程的重要性的资料很少。我说的是在4cores,6cores和8cores等上运行MySQL的区别。
不同的存储引擎对CPU的使用是否不同?
Answers:
关于MySQL,除了存储引擎分为两个基本类别外,它们之间没有其他比较:
对于列出的存储引擎,只有ACID兼容的存储引擎是InnoDB和NDB。为什么要提这个重要事项?两个原因:
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_threads和innodb_write_io_threads(均自MySQL 5.1.38起)为读取和写入分配指定数量的线程。默认为4,最大为64。默认和最大设置是如此不同(4-64),表明InnoDB与您配置它一样多线程且占用大量内核!
Percona领导了MySQL社区通过InnoDB访问更多内核的需求。因此,MySQL开始效仿。我必须承认,甲骨文(yuck)为进行更多的核心活动做了必要的改进。
我发现谈论使用内核的存储引擎可能会对初学者产生误导。如果程序具有足够多的线程,则操作系统将在尽可能多的内核中调度该程序。
限制cpu缩放的特定问题是内部锁定代码(互斥体)具有争用并阻止线程并发运行时。所有存储引擎都需要互斥体,但是MyISAM中肯定有一些互斥体。
如果我们忽略互斥锁争用一秒钟,然后回到您的主要问题:拥有多个内核有多重要?--
我喜欢为服务于用户面临的请求的工作负载使用很多核心。有很多可以减少查询时间之间的差异。可以想象这就像在超市中排队,只有12条通道,而只有2条通道。
更新:我写了一篇博客文章,说明为什么垂直可伸缩性(多核)很重要。