MySQL内存使用之线程独享介绍

 更新时间:2014年12月01日 10:38:13   投稿:junjie  
这篇文章主要介绍了MySQL内存使用之线程独享介绍,线程独享内存主要用于各客户端连接线程存储各种操作的独享数据,如线程栈信息,分组排序操作,数据读写缓冲,结果集暂存等等,而且大多数可以通过相关参数来控制内存的使用量,需要的朋友可以参考下

前言

在 MySQL 中,线程独享内存主要用于各客户端连接线程存储各种操作的独享数据,如线程栈信息,分组排序操作,数据读写缓冲,结果集暂存等等,而且大多数可以通过相关参数来控制内存的使用量。

线程栈信息使用内存(thread_stack)

主要用来存放每一个线程自身的标识信息,如线程id,线程运行时基本信息等等,我们可以通过 thread_stack 参数来设置为每一个线程栈分配多大的内存。

排序使用内存(sort_buffer_size)

MySQL 用此内存区域进行排序操作(filesort),完成客户端的排序请求。当我们设置的排序区缓存大小无法满足排序实际所需内存的时候,MySQL 会将数据写入磁盘文件来完成排序。由于磁盘和内存的读写性能完全不在一个数量级,所以sort_buffer_size参数对排序操作的性能影响绝对不可小视。经常使用索引来完成排序操作。

Join操作使用内存(join_buffer_size)

应用程序经常会出现一些两表(或多表)Join的操作需求,MySQL在完成某些 Join 需求的时候(all/index join),为了减少参与Join的“被驱动表”的读取次数以提高性能,需要使用到 Join Buffer 来协助完成 Join操作。当 Join Buffer 太小,MySQL 不会将该 Buffer 存入磁盘文件,而是先将Join Buffer中的结果集与需要 Join 的表进行 Join 操作,然后清空 Join Buffer 中的数据,继续将剩余的结果集写入此 Buffer 中,如此往复。这势必会造成被驱动表需要被多次读取,成倍增加 IO 访问,降低效率。

顺序读取数据缓冲区使用内存(read_buffer_size)

这部分内存主要用于当需要顺序读取数据的时候,如无法使用索引的情况下的全表扫描,全索引扫描等。在这种时候,MySQL 按照数据的存储顺序依次读取数据块,每次读取的数据快首先会暂存在read_buffer_size中,当 buffer 空间被写满或者全部数据读取结束后,再将buffer中的数据返回给上层调用者,以提高效率。

随机读取数据缓冲区使用内存(read_rnd_buffer_size)

和顺序读取相对应,当 MySQL 进行非顺序读取(随机读取)数据块的时候,会利用这个缓冲区暂存读取的数据。如根据索引信息读取表数据,根据排序后的结果集与表进行Join等等。总的来说,就是当数据块的读取需要满足一定的顺序的情况下,MySQL 就需要产生随机读取,进而使用到 read_rnd_buffer_size 参数所设置的内存缓冲区。

连接信息及返回客户端前结果集暂存使用内存(net_buffer_size)

这部分用来存放客户端连接线程的连接信息和返回客户端的结果集。当 MySQL 开始产生可以返回的结果集,会在通过网络返回给客户端请求线程之前,会先暂存在通过 net_buffer_size 所设置的缓冲区中,等满足一定大小的时候才开始向客户端发送,以提高网络传输效率。不过,net_buffer_size 参数所设置的仅仅只是该缓存区的初始化大小,MySQL 会根据实际需要自行申请更多的内存以满足需求,但最大不会超过 max_allowed_packet 参数大小。

批量插入暂存使用内存(bulk_insert_buffer_size)

当我们使用如 insert … values(…),(…),(…)… 的方式进行批量插入的时候,MySQL 会先将提交的数据放如一个缓存空间中,当该缓存空间被写满或者提交完所有数据之后,MySQL 才会一次性将该缓存空间中的数据写入数据库并清空缓存。此外,当我们进行 LOAD DATA INFILE 操作来将文本文件中的数据 Load 进数据库的时候,同样会使用到此缓冲区。

临时表使用内存(tmp_table_size)

当我们进行一些特殊操作如需要使用临时表才能完成的 Order By,Group By 等等,MySQL 可能需要使用到临时表。当我们的临时表较小(小于 tmp_table_size 参数所设置的大小)的时候,MySQL 会将临时表创建成内存临时表,只有当 tmp_table_size 所设置的大小无法装下整个临时表的时候,MySQL 才会将该表创建成 MyISAM 存储引擎的表存放在磁盘上。不过,当另一个系统参数 max_heap_table_size 的大小还小于 tmp_table_size 的时候,MySQL 将使用 max_heap_table_size 参数所设置大小作为最大的内存临时表大小,而忽略 tmp_table_size 所设置的值。而且 tmp_table_size 参数从 MySQL 5.1.2 才开始有,之前一直使用 max_heap_table_size。

总结

上面所列举的 MySQL 线程独享内存仅仅只是所有线程独享内存中的部分,并不是全部,选择的原则是可能对 MySQL 的性能产生较大的影响,且可以通过系统参数进行调节。

由于以上内存都是线程独享,极端情况下的内存总体使用量将是所有连接线程的总倍数。所以各位朋友在设置过程中一定要谨慎,切不可为了提升性能就盲目的增大各参数值,避免因为内存不够而产生 Out Of Memory 异常或者是严重的 Swap 交换反而降低整体性能。

相关文章

  • Mysql 导入导出csv 中文乱码问题的解决方法

    Mysql 导入导出csv 中文乱码问题的解决方法

    这篇文章介绍了Mysql 导入导出csv 中文乱码问题的解决方法,有需要的朋友可以参考一下
    2013-09-09
  • ubuntu 16.04配置MySQL主从同步的配置方法

    ubuntu 16.04配置MySQL主从同步的配置方法

    这篇文章主要介绍了ubuntu 16.04配置MySQL主从同步的配置方法,需要的朋友可以参考下
    2018-03-03
  • Windows安装MySQL8.0时的报错汇总及解决方案

    Windows安装MySQL8.0时的报错汇总及解决方案

    据说安装MySQL是无数数据库初学者的噩梦,我在安装的时候也是查了很多资料,但是很多毕竟每个人的电脑有各自不同的情况,大家的报错也不尽相同,所以也是很长时间之后才安装成功,所以本文给大家汇总了Windows安装MySQL8.0时的报错解决方案,需要的朋友可以参考下
    2024-09-09
  • 深入探索数据库MySQL性能优化与复杂查询相关操作

    深入探索数据库MySQL性能优化与复杂查询相关操作

    数据库MySQL 是一种开源的关系型数据库管理系统,在进行 MySQL 数据库开发过程中,需要深入了解如何进行性能优化和复杂查询,以提高系统的效率和可靠性,本文介绍的非常详细,需要的朋友可以参考一下
    2023-04-04
  • 深入分析MySQL 的备份和恢复机制

    深入分析MySQL 的备份和恢复机制

    备份对于数据库来说是相当重要的工作。如果数据库在使用过程中出现了问题,比如系统崩溃、硬件故障或错误的删除了数据。这时,如果我们进行了数据备份,就能比较方便的使数据库恢复工作,并使我们的数据损失到最小。下面我们来详细探讨下数据库的备份与恢复。
    2016-11-11
  • mysql数据库navicat数据同步时误删除部分数据的解决

    mysql数据库navicat数据同步时误删除部分数据的解决

    本文主要介绍了mysql数据库navicat数据同步时误删除部分数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • MySQL中常见的八种SQL错误用法示例

    MySQL中常见的八种SQL错误用法示例

    这篇文章主要给大家介绍了关于MySQL中常见的八种SQL错误用法示例的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • MySQL 数据库定时备份的几种方式(全面)

    MySQL 数据库定时备份的几种方式(全面)

    在操作数据过程中,可能会导致数据错误,甚至数据库奔溃,而有效的定时备份能很好地保护数据库。本篇文章主要讲述了几种方法进行 MySQL 定时备份数据库。
    2021-09-09
  • MySQL group by对单字分组序和多字段分组的方法讲解

    MySQL group by对单字分组序和多字段分组的方法讲解

    今天小编就为大家分享一篇关于MySQL group by对单字分组序和多字段分组的方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 深入mysql创建自定义函数与存储过程的详解

    深入mysql创建自定义函数与存储过程的详解

    本篇文章是对mysql创建自定义函数与存储过程进行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论