InnoDB缓存相关优化

无论对于哪一种数据库,缓存技术都是提高数据库性能的关键,物理磁盘的访问速度与内存的访问速度永远都不是一个数量级的。通过缓存技术无论是在读还是写方面,都可以大大提高数据库整体性能。

Innodb_buffer_pool_size的合理设置

InnoDB存储引擎的缓存机制和MyISAM的最大区别就在于InnoDB不仅仅缓存索引,同时还会缓存实际的数据。所以,完全相同的数据库,InnoDB存储引擎可以使用更多的内存来缓存数据库相关的信息,前提是要有足够的物理内存。这对于内存价格不断降低的时代,无疑是个很吸引人的特性。

innodb_buffer_pool_size参数用来设置InnoDB最主要的Buffer(Innodb BufferPool)的大小,也就是缓存用户表及索引数据的最主要缓存空间,对InnoDB整体性能影响也最大。无论是MySQL官方手册还是网络上很多人分享的InnoDB优化建议,都是简单地建议将InnoDB的Buffer Pool设置为整个系统物理内存的50%~80%之间。如此轻率地给出此类建议实在有些不妥。

不管是多么简单的参数,都可能与实际运行场景有很大的关系。完全相同的设置,在不同的场景下表现可能相差很大。从InnoDB的Buffer Pool到底该设置多大这个问题来看,首先须要确定的是这台主机是不是只能提供MySQL服务?MySQL须要提供的最大连接数是多少?MySQL中是否还有MyISAM等其他存储引擎提供服务?如果有,其他存储引擎所需的Cache有要多大?

假设是一台单独给MySQL使用的主机,物理内存总大小为8GB,MySQL最大连接数为500,同时还使用了MyISAM存储引擎,这时候整体内存该如何分配呢?

内存分配为如下几大部分。

1)系统使用,假设预留800MB。
(2)线程独享,最大约为2GB = 500×(1MB + 1MB + 1MB + 512KB +512KB),组成大概如下:
sort_buffer_size:1MB
join_buffer_size:1MB
read_buffer_size:1MB
read_rnd_buffer_size:512KB
thread_statck:512KB
(3)MyISAM Key Cache,假设大概为1.5GB。
(4)InnoDB Buffer Pool最大可用量:8GB-800MB-2GB-1.5GB = 3.7GB。

假设这个时候还按照50%~80%的建议来设置,最小也是4GB。通过估算,最大可用值在3.7GB左右,那么在系统负载很高,线程独享内存差不多到极限时,系统很可能就会出现内存不足的问题了。而且上面还只是列出了一些使用内存较大的地方,如果进一步细化,很可能导致可用内存更少。

上面只是一个简单的示例分析,实际情况并不一定是这样的。这里只是希望大家了解,在设置一些参数的时候千万不要想当然,一定要详细地分析可能出现的情况,然后再通过不断测试和调整来达到所处环境的最优配置。就我个人而言,正式环境上线之初,一般都会采取相对保守的参数配置策略。上线之后,再根据实际情况和收集到的各种性能数据进行针对性调整。

总结

  • 缓存是提高数据库性能的关键
  • innodb_buffer_pool_size的设置要合理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值