MySQL Innodb 内存管理&最大连接数配置

文章介绍了MySQLInnoDB存储引擎的内存管理,包括主要的内存组件如bufferpool、日志缓冲和线程独享的内存缓冲。重点讨论了各内存参数如innodb_buffer_pool_size、key_buffer_size和查询缓存的大小,并提供了最大连接数(max_connections)的计算方法。
摘要由CSDN通过智能技术生成

InnoDB内存管理

先放一张mysql innodb内存项的全局概览图,主要包括三部分:

  1. buffer pool:Innodb缓存池,根据实际内存规格,会占到总体内存的50%-75%(内存规格越大,占比可以越大)
  2. 全局共享内存:sharding部分这种buffer和cache
  3. 线程独享内存:join、read、sort等这种buffer

全局共享部分

  • innodb_buffer_pool_size:InnoDB缓冲池的大小(50%-75%总内存)

  • innodb_additional_mem_pool_size:InnoDB存放数据字典和其他内部数据结构的内存大小,5.7已被移除(推荐16MB)

  • innodb_log_buffer_size:InnoDB日志缓冲的大小(推荐64MB)

  • key_buffer_size:MyISAM缓存索引块的内存大小(推荐10MB)

  • query_cache_size:查询缓冲的大小,8.0已被移除(推荐 0)

线程独占部分

  • thread_stack:每个线程分配的堆栈大小 (默认256k)

  • sort_buffer_size:排序缓冲的大小  (默认512k)

  • join_buffer_size:连接缓冲的大小 (默认512k)

  • read_buffer_size:MyISAM顺序读缓冲的大小  (默认512k)

  • read_rnd_buffer_size:MyISAM随机读缓冲的大小、MRR缓冲的大小  (默认512k)

  • tmp_table_size/max_heap_table_size:内存临时表的大小 (默认16M)

  • binlog_cache_size:二进制日志缓冲的大小 (默认32k)

 

最大链接数配置

根据上图的内存分布,可以得到max_connection的计算公式:

total_memory=innodb_buffer_pool_size+key_buffer_size+innodb_log_buffer_size+innodb_additional_mem_pool_size + query_cache_size + max_conns*(read_buffer_size+tmp_table_size+read_rnd_buffer_size+sort_buffer_size+join_buffer_size+binlog_cache_size+thread_stack) + 200MB(主机其他进程占用)

注意:这里tmp_table_size值通常在16MB以上,放在session级别计算连接数,在内存较小的场景可能能max_connection计算出来较小,可以考虑放到全局部分计算,并适当保留一下buffer。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值