[TOC]
影响 MySQL 性能的因素很多,今天咱们来看看 CPU 和内存是如何影响 MySQL 性能的,以及我们在购买服务器的时候,该如何挑选这些配置。
CPU
在挑选数据库服务器的时候,是买多核 CPU 还是高主频 CPU?相信有小伙伴可能遇到过类似的问题,作为开发工程师,公司负责采购的小伙伴可能会向我们抛出上面这个问题,那么该如何回答呢?
有人说我既要多核又要高主频,抱歉,很多时候公司的预算都是有限的,没法做到鱼与熊掌兼得。这个时候我们就需要了解一点 MySQL 的运行机制了,根据 MySQL 的运行机制来确定到底该选什么样的 CPU!
首先我们要看我们的应用是不是 CPU 密集型,即是不是计算密集型。如果是 CPU 密集型应用,那么我们要加快 SQL 语句的处理速度,这个时候 CPU 的频率显然就比核数重要了。另外,MySQL 不支持多 CPU 对同一 SQL 并发处理,也就是说,不管 CPU 多强或多弱,我们只能用一个 CPU 核心来处理这一条 SQL,多个 CPU 对提高一个 SQL 的处理效率是没有帮助的。
如果我们要提高系统的并发量,这个时候就要考虑 CPU 的核数问题了。多个 CPU 虽然无法提高一条 SQL 的执行效率,但是可以提高 SQL 的并发量,在同一时间,一个 CPU 可以处理一条 SQL,那么要是有 10 个 CPU 就可以同时处理 10 条 SQL,这样就可以有效提高 QPS。
现在小伙伴们出去找工作,很多互联网公司都是用的 MySQL,这种互联网应用最大的特征就是高并发,那么毫无疑问,对于这种应用,我们应该考虑多核 CPU。
老版本的 MySQL 对于多核 CPU 的支持并不完美,所以如果我们选择多核 CPU,应该考虑使用目前最新版的 MySQL,最新版的 MySQL 对多核 CPU 的支持更加流畅。
另外大家还需要注意不要在 64 位的 CPU 上运行 32 位的服务器。
内存
内存的磁盘 IO 肯定是大于硬盘的,所以如果能将数据缓存在内存中,这样就不用每次去硬盘中读取数据了,这样的话,数据库的效率必然还要再提升一个台阶。
内存对数据库性能的影响有两方面:
- 读取效率,从内存中读取数据肯定比从硬盘中读取数据要快。
- 写入效率,当内存比较大的时候,我们需要往硬盘中写数据的时候,就不用每次都写,可以先缓存着,攒够了再一次性写入(延缓写入)。
不过我们也不能盲目的加内存,还是要在了解 MySQL 运行机制的前提下,合理加内存。
以常见的 MyISAM 和 InnoDB 存储引擎为例:
- MyISAM 会将索引存入缓存,而数据存储交由操作系统处理。
- InnoDB 会同时在内存中缓存数据和索引,从而提高数据库的运行效率。
所以,如果我们选择不同的存储引擎,对内存的要求也是不一样的。
另一方面需要注意,生产服务器的内存一般都比较大,如果服务器的内存是 128G,数据库文件只有 50G,此时发现数据库运行很慢,那么很明显,这个时候加内存肯定是无法解决问题的,还是要具体问题具体分析。
另外在选择内存时选择服务器主板支持的最大内存频率,尽量不要选择不同品牌的内存混用;如果需要多个内存条,要确保不同内存条的频率、电压、校验技术、型号等相同,同时单个内存条容量也要尽可能大(不过话说回来,如果购买云服务器,可能并不需要考虑这些)。
好啦,今天就和小伙伴们随便扯一扯,当然影响 MySQL 性能的还有其他因素,咱们后面接着聊。