绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
简单说明下MySQL的内存使用
2021-01-08 15:15:48

简单说明下MySQL的内存使用。

现在大内存机器已经成为互联网公司的标配,对于内存的优化已经不像以前显得那么重要,然而,我们还是有必要了解一些MySQL内存使用的知识,这会让我们的调优更有效果,也避免可能出现的故障,比如OOM。

1、MySQL使用内存一般有两大块,如果你使用MyISAM,需要关注留给索引缓存的内存,参数是Key_buffer_size,如果你使用的InnoDB,需要关注的参数是 innodb_buffer_pool_size,它定义了我们分配给数据库数据缓冲池的内存大小。

对于一些MySQL基于自身管理目的分配的内存,我们并没有什么手段去调整和优化,我们主要优化的是数据操作阶段的内存使用,这方面也是内存的大头所在,我们可以从全局和会话两个级别进行调整。

对于一些全局分配的内存,如key_buffer_size, query_cache_size etc,在系统启动之初,就会完成初始化分配,分配所有内存。对于另外的一些涉及到查询行为的内存参数,比如read_buffer_size, sort_buffer_size, join_buffer_size,MySQL在查询需要的时候才分配这些内存,我们需要留意这些参数不要设置得过大,因为如果真的查询需要使用到这部分内存,而你又拥有大量的连接,那么可能无谓的浪费大量内存。具体的还有许多内存相关的参数,大家可以查询官方文档,具体不再赘述。

2、如果希望内存尽量节省,我们应该尽量基于主键进行检索,要充分利用索引筛选记录和排序记录。

3、一些非核心功能的特性,比如存储过程、分区表,可能导致大量的内存被使用而未释放,而你却很难去调优。

4、我们会观察到,实际MySQL使用的内存会比 innodb_buffer_pool_size 这个参数设置的要大10%左右,当你要设置一个很大的 innodb_buffer_pool_size 的时候,这些额外的元数据管理开销你要留意。

5、建议MyISAM和InnoDB不要混用。

6、许多实践证明,Linux系统默认的内存分配器对于多线程内存分配管理不佳,如果你需要的性能,建议使用 jemalloc 或者 tcmalloc代替之,在核数多于8核的情况下, jemalloc 或者 tcmalloc会表现的出色的多。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

数据库专区
创建时间:2020-06-16 18:15:35
数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。 [2]
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 小雨滴
    专家
  • gaokeke123
    专家
戳我,来吐槽~