mysql innodb 引擎内存分配项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql innodb 引擎内存分配项相关的知识,希望对你有一定的参考价值。

mysql做为最流行的开源数据库,innodb在5.6开始已成为默认引擎,在5.7中系统吧引擎也有myisam改为innodb,可以看出innodb引擎现在已经可以满足绝大部分的业务需求,内存分配直接影响MySQL整体运行效率,有innodb_buffer,还有各种cache_size,这些选项都需要合理分配,合理利用服务器有限的内存让MySQL跑的更嗨皮,直接影响的选项有下面几个:


innodb_buffer_pool_size:缓冲区,存放表数据、索引数据,大小至关重要,直接影响sql执行时IO的开销,假如缓冲区足够大可以缓存下表全部数据,在内存中利用hash链表的方式查找是相当快的


innodb_additional_mem_pool_size:数据字典存放区,打开一个表对应表字典信息就存于这个区域,当数据表越多,需求的空间就越大,一个表大约占用4K空间,这个选项在5.7已移除


innodb_log_buffer_size: innodb事物日志缓存区域大小


binlog_cache_size: binlog缓存区域大小


session级别参数:

    join_buffer_size:在使用块嵌套循环时使用,存放链接键的区域大小

    sort_buffer_size:排序键存放区域大小

    net_buffer_length:客户端连接存放会话信息的缓存区,当需要时会动态增长到max_allowed_packet设置的大小

    max_allowed_packet:限制会话一个数据表的最大大小


查询缓存query_cache_size可以根据业务情景具体判断是否开启,查询缓存机制是需要同样的数据同样的sql才能命中,当数据库update、delete、insert比较多时不适合使用查询缓存,只要数据变化就会失效,失效操作会对查询缓存区持全局锁,这样会阻塞其他做匹配的sql,而且一个sql经过连接管理器之后不管是否有查询缓存相匹配都会到查询缓存匹配一次,这也会降低sql执行效率。


内存分配得根据真实业务情况模拟测试做分配,session级别参数每个链接使用上就会分配一个内存区,必须做好测试才能不浪费太多内存。


所写着几个参数都是innodb非常重要的内存配置参数,myisam因为已逐步淘汰,就不做过多解读了。

本文出自 “小小运维” 博客,请务必保留此出处http://2364914.blog.51cto.com/2354914/1754860

以上是关于mysql innodb 引擎内存分配项的主要内容,如果未能解决你的问题,请参考以下文章

MySQL内存调优

MySQL中InnoDB存储引擎中的哈希算法

MYSQL存储引擎InnoDB(三十五):临时表空间

InnoDB引擎架构的主要组件构成

「mysql优化专题」详解引擎(InnoDB,MyISAM)的内存优化攻略?

浅谈 MySQL InnoDB 的内存组件