从上一节我们举得例子可以看到,每当大促系统繁忙的时候,我们可以监控到的CPU资源,内存资源都是十分紧张的,特别是对于一些计算密集型的应用,CPU越可能是影响整个系统的功能,成为系统的瓶颈,所以首先对MYSQL性能又影响的呢,就是这两种资源,也就是CPU资源,和可用的内存大小,另外一方面就是咱们工作所需要的热数据大小远远大于可用内存大小时,IO系统就可能成为我们的瓶颈,网络我们也可以看做是另外一种IO资源,网络往往发生在大量数据被查询时,特别是我们使用Memcache这种存储引擎,当缓存大量生效时,就会产生大量的网络传输,从而影响服务器的性能,所以当出现IO系统瓶颈时,最有效的方法就是升级IO子系统,来增加可用内存,网络及IO资源呢,也是堆数据库性能影响的第二个硬件因素,下面我们会分别介绍服务器硬件会对MYSQL性能有什么样的影响,和如何对他们进行优化,首先来看我们如何来选择CPU,经常有人会问我这样的问题,我们是需要更多地CPU呢,还是需要更快的CPU,这个在我们升级服务器,或者是在购买服务器硬件的时候,经常会被采购硬件的同事问到,他经常要求我们选择我们所需要的CPU的频率和CPU的数量,当然完美的情况下我们都想做到最好,我们想要最高频率的CPU,同时也想要更多的核心数,但是现实往往是很残酷的,有些原因只能让我们选择一种,其中某些原因还是成本的因素,那我们首先要有一些了解之后才能做正确的选择,首先我们要看我们的应用是否是CPU密集型的,而对于CPU密集型的应用呢,要加快SQL语句的处理速度,显然是更好的CPU,不是更多的CPU,这里还有一点要注意,我们之前也提到过,对于目前版本的MYSQL而言,不支持对多CPU的对同一SQL并发处理,也就是不管CPU多复杂,或者多简单,我们只能用到一个CPU的核心进行处理,这时多个CPU对提高SQL的处理效率呢,显然是没有帮助的,接下来我们还要研究系统的并发量如何呢?虽然单个SQL无法利用到多个CPU的资源,而如果我们要提高系统的吞吐量呢,并发处理量呢,那么这个时候我们就需要CPU数量越多越好,我们来想象一下,如果一个CPU可以处理一个SQL,那是不是40个CPU可以处理40个SQL

细心地朋友可能发现到了,之前我们定义了衡量数据库处理能力的指标,QPS,指的是同时处理SQL的数量,这里要强调一下的是,QPS是每秒钟处理SQL的数量,而这里所说的并发处理SQL的次数,可能是在纳秒级的,这完全取决于SQL的执行情况,MYSQL大量的被应用到WEB类应用中,这里应用通常是非常大的,所以在这种情况下,CPU的数量可能比频率就更加重要一些,同时我们还要考虑使用MYSQL的使用版本,MYSQL的版本也会决定如何选择CPU,老版本的MYSQL对多核的支持都不知道,对于MYSQL5.0之前的版本,是非常严重的,而对于MYSQL5.6来说呢,对于多核CPU的支持已经有了很大的改善,我们可以放心的使用16核,32核这样的CPU,所以要使用多个CPU的话,还要建议大家使用最新的MYSQL,达到最好的性能,关于如何使用CPU还有最后一个问题,也需要我们来注意的,这个问题现在来说已经不是问题了,就是我们选择32位的CPU还是64位的CPU,这个选项现在来看已经是完全多余的,因为64位架构的CPU呢,现在已经成为一种默认的配置了,我们现在想买32位的服务器可能也已经买不到了,同时MYSQL的64位的CPU呢,做到了完美的支持,所以下面的注意事项才是我们的选项的重点,在64位架构CPU上,使用32位的操作系统,大家不要以为这种情况是很难发生的,其实这种情况是经常发生的,特别是在一些云服务器,或虚拟主机上,当然有些公司的服务器上也会出现这种情况,这一般是因为运维人员在按照操作系统的时候,使用了错误的版本系统而造成的,不要小看忽略这个问题,对于一些大公司,也可能出现这样的错误,特别是对于一些非生产环境,比如说开发和测试环境,更容易出现这种情况了,32位的操作系统呢,意味着我们不能使用大量的内存,而且在32位系统上,任何一个单独的进程呢,不能存储4G以上的内存,所以大家要知道,MYSQL本身是一个单线程的服务,所以如果我们使用了32位的操作系统,实际上对MYSQL有一个极大的限制,所以大家要注意这一点,说完了CPU,我们来说说内存,内存的大小直接影响数据库的性能,目前内存的IO效率呢要远远高于磁盘,就是和SSD和Fushion-IO相比呢,内存的IO速率也要高的多

所以把数据缓存到内存中,进行读取,可以大大提高数据库的性能

常用的MYSQL存储引擎中呢,MyISAM会把索引缓存到内存中,数据通过操作系统来缓存

而InnoDB是在内存中同时缓存索引和数据,从而提高数据库的运行效率

关于内存的配置呢,有几个提示需要大家注意,内存虽然是越多越好,但是对于性能的影响也是有个限度的,我们不能指望通过增加内存无限的增加系统的性能

数据库可以利用的内存是有限的,一般当缓存的数据和磁盘上已有的数据呢,一样时,就是当所有的数据都被缓存到缓存后,会增加缓存内存的大小,就没有意义了,如果我们数据文件是100个G,如果我们的内存只有64个G的情况下,增加内存,扩大数据库的缓存区大小来获取性能的提升,如果我们的数据文件是100个G,而我们的内存已经是256个G了,那你数据库的缓存池呢,大小达不到196个G的情况下,就不能指望通过增加服务器内存的方式来获得性能提升,当然这个也不是绝对的,虽然数据库不能应用多出来的内存,但是多用内存也会增加操作系统等其他服务的性能,缓存不但会对读有益处,同时也会对写有益处,关于缓存的一个常见的误区就是,只有读在缓存中受益

如果有足够的内存,就完全可以避免磁盘读取的请求,如果所有的数据都可以放到内存中,一旦所有缓存数据热起来,所有数据被缓存起来之后,所有的读操作都会在缓存中,但是写入是不同的问题,写入可以像读一样,在内存中完成,但是迟早我们要把写到内存的数据写入到磁盘上,但是虽然是这样的,缓存对写入还是有好的影响

他虽然不能避免磁盘的写入操作,但是可以对写操作进行延缓,把多次写入变成一次写入

比如我们电商网站中,对每一个产品会有一个浏览的计数器,如果每次用户查询这个商品的时候呢,显然会造成大量的IO操作,如果我们只更新内存的计数器,当技术器增长到100以后,再统一写入到磁盘,这样就把100次写入就变成了1次操作,从而增加了服务器的性能,数据库就提供了类似的一些功能,可以在缓存池中,把对同一数据库的写操作呢,合并成一次,然后最后写入到磁盘设备上,那么我们如何配置内存呢,涉及到内存的选择问题,这里还有一个建议,就是内存的主频和CPU的主频是类似的,所以捡一块大家选择服务器主频最高的内存,频率越高表示内存的读取速度越快,因此我们选择内存时,应该选择主板支持的主频最高的内存,应该注意的是,服务器内存通常来说呢,是组成购买升级的,每个通道尽量使用相同的品牌,相同颗粒,相同电压,相同校验技术,相同型号的内存条,另外呢我们选择的单条容量要尽量大,这就意味着我们所花费的成本呢,会增加

当然也可以根据我们数据库的大小来选择合适的内存,比如我们目前的数据库,可能有100个G,我们选择128G内存就已经足够了,但是还是要考虑到数据的增长速度,以及增长幅度的因素,来选择更大的内存,比如256G呢

CPU资源和可用内存大小相关推荐

  1. mysql 数据库大小与内存关系_【MYSQL】CPU资源和可用内存大小对数据库性能的影响...

    前言 可能影响到数据库性能的几个点,其一就是服务器硬件,也是本节要说的CPU与可用内存. 引入 当热数据超过可用内存大小,MemCache存储引擎缓存层容易失效(当缓存大量失效时,容易产生大量的网络传 ...

  2. linux查服务器总内存大小,怎么查看linux中的可用内存大小

    怎么查看linux中的可用内存大小 发布时间:2020-06-16 13:28:33 来源:亿速云 阅读:620 作者:鸽子 作为Linux用户,特别是管理员,我们需要检查系统使用多少内存资源以及有多 ...

  3. C# 利用WMI对象获取物理内存和可用内存大小

    下面的代码演示的是使用WMI对象可获取取物理内存和可用内存大小,在使用WMI对象前,先要添加对System.Management的引用,然后就可以调用WMI对象,代码如下: //获取总物理内存大小Ma ...

  4. 计算机系统的cpu数量,设置cpu核心数量方法,电脑降低cpu处理器数量和内存大小图文教程...

    大家好,我是老盖,感谢观看本篇文章,本文做的也有视频,也可以看我发布的视频. 今天给大家讲一下设置CPU核心数量的一个方法,它的作用主要有两个,一个就是说有的程序兼容性不好,不支持很多核的cpu,必须 ...

  5. c语言 获取可用内存大小,C语言实现获取内存信息并输出的实例

    C语言实现获取内存信息并输出的实例 实现实例代码: headfile.h #include #include #include #define TRUE 1 #define FALSE 0 #defi ...

  6. 修改 WSL2 可用内存大小和交换分区大小

    WSL2默认可以使用的内存大小为主机的80%,对于Linux而言即使装了桌面,一般的开发也没必要给这么多内存,分多了,反而有可能卡主机的Windows 操作: 1.打开Windows资源管理器,地址栏 ...

  7. linux查服务器总内存大小,在linux 下怎么查看服务器的cpu和内存的硬件信息

    1,Linux下可以在/proc/cpuinfo中看到每个cpu的详细信息.但是对于双核的cpu,在cpuinfo中会看到两个cpu.常常会让人误以为是两个单核的cpu. 其实应该通过Physical ...

  8. 基于 Windows 7 的计算机可用内存低于安装内存

    基于 Windows 7 的计算机可用内存低于安装内存 症状 在运行 Windows 7 的计算机上,可用内存 (RAM) 大小可能会低于已装内存大小. 例如,32 位版本的 Windows 7 可能 ...

  9. Android 获取手机总内存和可用内存等信息

    在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小.这个该如何实现呢? 通过读取文件"/proc/meminfo"的信息能够获 ...

最新文章

  1. 处理错误:ORA-27101: shared memory realm does not exist
  2. 从零点五开始用Unity做半个2D战棋小游戏(十)
  3. oracle 数据库 锁
  4. 资源包技巧和最佳实践
  5. python os popen_Python os.popen() 方法
  6. 关于APP性能测试脚本录制的四种方法
  7. 解决AS3 Socket编程中最令人头疼的问题
  8. System Center Configuration Manager 2016 域准备篇(Part2)
  9. 计算机数字模拟仿真软件,实时数字仿真系统
  10. 每日单词20110605
  11. PKI密码学学习笔记
  12. 新网站如何才能被百度快速收录?
  13. Cobalt Strike 的 Profile 文件解析
  14. 红米k30pro工程包工厂包
  15. python用什么软件编程?
  16. cba篮球暂停次数和时间_篮球比赛一节有几次暂停?
  17. Oracle 之利用BBED修改数据块SCN----没有备份数据文件的数据恢复
  18. VS 和VC 的区别
  19. 【2019-09-04】恐惧就是进化的暗示
  20. 5G尚未完全覆盖,运营商开始采取措施降低5G投资

热门文章

  1. 房地产仍是经济支柱行业 80%中小房企面临合并
  2. bzoj1715[Usaco2006 Dec]Wormholes 虫洞
  3. 3D数学读书笔记——3D中的方位与角位移
  4. modbus3-关于Modicon Modbus Protocol和modscan32
  5. ESFramework介绍之(30)―― 消息侦察者 INetMessageSpy
  6. centos7安装配置rsync以及遇到问题
  7. 版本管理工具Git(2)git的使用
  8. ci框架的session类,怎么使用ci的session类
  9. (转)关于eclipse的TestNG的插件安装方法
  10. EXSITS应该怎么用?