MYSQL 到底要给你多少内存,你才罢休 ?



人生不过就是一场旅行,你就是一辆列车,有人随时上车,有人随时下车,任什么时候刻别忘记,谁才是这趟车的司机, YOU  ONLY YOU.  最近比较忙,文字更新的速度的确是慢了,但这期间一个月的供应商的寻找,也是蛮有意思的,能够写一篇关于数据库供应商的文字,看看目前的供应商的水平都是在哪一个位置,提供的服务是否是个性化,此次寻找供应商基本上也把业界的大公司找了一个遍。另外也逐渐有了本身的DB 团队,从技术往技术管理上必然也是要耗费精力,不过我是不会放弃,本身写东西的爱好。
mysql


正文:
sql

提及MYSQL 自己,大部分人的思惟观念仍是,一个MYSQL 一个小应用,给个 16G 都算大的, 呵呵, 那你是真没见过什么世面, 一个MYSQL 在5.7的时候管理128G 内存也是OK 的,更不要提 MYSQL 8 ,因此仍是收起"无知". 那问题就来了,一个大型应用的MYSQL 的内存到底给多少合算,合适,有据可依.
数据库


(首先不建议一个MYSQL的内存超级大,有些数据库服务器的内存上 T, 那是否是我们的解耦了, 每天抱着炸药包同样,好难过)
服务器


那咱们就的假设你拿到一个内存超级大的服务器,MYSQL 的内存的规划就变成一个问题了.
微信

MYSQL 的内存其实和其余数据库同样, 分为GLOBAL 和 SESSION ,按照ORACLE 的叫法 SGA  VS PGA.
工具


那怎么才能计算适合当下的内存配置方式
优化



1  默认配置, 一般INNODB_BUFFER_SIZE 给到内存的65% - 75% 是一些云厂商的一般的作法,不是由于好,是由于稳定,因此初始的时候,除非你已经了解你的数据库要承接的 SESSION 数字,以及SESSION 都在运行了什么, 以及每次提取的数据量的大体以前,你不会有一个特别好的的调整方式.url

这也是大公司的数据库为何成千上万台,也好管理,由于成为规模化,标准化,而小公司的数据库,这个应用这样,那个应用那样,你想统一设置,可能吗spa


2  在系统运行了一段时间,(前提是很差不坏的状况下),就能够开始一个二次优化内存的过程了.
.net


1   统计这段时间的系统最大的MAX_used_connections 




2 计算目前咱们的系统应该采用多少内存


SELECT ( @@key_buffer_size + @@innodb_buffer_pool_size + 67 * (@@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size + @@join_buffer_size + @@tmp_table_size )) / (1024*1024*1024) AS MAX_MEMORY_GB;


为何要这样计算


1  系统运行一段时间并无爆出大的问题,说明innodb_buffer_pool_size 设置的并无特别大的 因此这里使用了 innodb_buffer_pool_size 的当前值.


2  read_buffer_size   read_rnd_buffer_size   sort_buffer_size  join_buffer_size  join_buffer_size  tmp_table_size  须要和当前的connections 进行一个累加,一个链接使用的内存的可能,咱们按照最大化来计算实际上不可能每一个链接使用的 read_bufer_size  read_rnd_buffer_size  sort_buffer_size  join_buffer_size  join_buffer_size  timp_table_size 都是最大化的设置, 因此这里给出的后面的东西, max_memory_GB 也是符合这个意思的.


在计算完毕后,咱们其实能够经过 pt-summary 的第三方工具对系统进行一个检查


mysqladmin -r -i 1 -c 60 extended-status | egrep "Innodb_buffer_pool_read_requests|Innodb_buffer_pool_reads"


经过对比

innodb_buffer_pool_read_requests  和  Innodb_buffer_pool_reads

二者的比较,作出曲线,你就能够知道你的MYSQL 的INNODB BUFFER POOL 设置的如何了,是否是须要"动动"


最后MYSQL 8 已经支持了 innodb_dedicated_server  ,经过打开这个设置自动开始对MYSQL的内存进行分配和计算, 但须要注意的是,MYSQL 的 8.0 中的 innodb_dedicated_server 并不适用于复杂环境方面的MYSQL 数据库服务器.


本文分享自微信公众号 - AustinDatabases(AustinDatabases)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索