位置: 编程技术 - 正文

MySQL内存使用之线程独享介绍(mysql内存使用率过高)

编辑:rootadmin

推荐整理分享MySQL内存使用之线程独享介绍(mysql内存使用率过高),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql内存占用高怎么释放,mysql内存使用率过高,mysql内存占用一直增高不释放,mysql 内存占用,mysql 内存占用,mysql内存使用详解,mysql内存使用详解,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中的数据返回给上层调用者,以提高效率。

MySQL内存使用之线程独享介绍(mysql内存使用率过高)

随机读取数据缓冲区使用内存(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全局共享内存介绍 前言全局共享内存则主要是MySQLInstance(mysqld进程)以及底层存储引擎用来暂存各种全局运算及可共享的暂存信息,如存储查询缓存的QueryCache,缓存连接

Mysql数据库锁定机制详细介绍 前言为了保证数据的一致完整性,任何一个数据库都存在锁定机制。锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制

Mysql日志文件和日志类型介绍 日志文件类型MySQL有几个不同的日志文件,可以帮助你找出mysqld内部发生的事情:日志文件记入文件中的信息类型错误日志记录启动、运行或停止mysqld时

标签: mysql内存使用率过高

本文链接地址:https://www.jiuchutong.com/biancheng/321328.html 转载请保留说明!

上一篇:ERROR CODE: 1175 YOU ARE USING SAFE UPDATE MODE AN

下一篇:MySQL全局共享内存介绍(mysql 局域网访问权限)

  • 股东分红交税税率
  • 计提税费的会计分录怎么写
  • 收了押金不退
  • 贷款还款利息怎么还
  • 月末计提工资金额怎么核算
  • 总分类一般采用什么格式
  • 公益性捐赠税前扣除资格认定
  • 通信服务费包括哪些
  • 以非现金资产清偿债务的方式下,债权人
  • 职工在病假领取失业金
  • 代扣代缴城建税可以享受六税两费
  • 自己开发自己施工的建筑单位怎么样
  • 转售水的税率
  • 房屋建筑物评估技术鉴定表
  • 子公司注销欠母公司借款怎么办
  • 转让股权怎么写简单
  • 废旧物资回收需要什么手续
  • 房地产企业销售现房是否预缴增值税
  • 税务稽查的内容
  • 私对私转账是否缴纳个人所得税
  • 已付款无法收到发票怎么处理
  • 委托进口代理协议
  • 受让股东对出让股东抽逃出资
  • 增值税进项留抵退税的账务处理
  • 一般纳税人增值税结转账务处理
  • 应用程序发生异常 未知的软件异常(0xe06d7363)
  • 员工因违反公司规章制度被辞退有补偿吗
  • 招待费如何列支
  • MacOS bigsur11.2连击缩放窗口功能怎么关闭或开启?
  • React developer tools调试工具全网最新最全安装教程
  • php+jQuery+Ajax实现点赞效果的方法(附源码下载)
  • 房产税城镇土地使用税申报期限
  • 原材料结转成本有几种方法
  • android_app.intro
  • php 格式化字符串
  • jquery和php
  • 图像融合名词解释
  • 微信小程序几几年上线的
  • gnss定位技术的应用前景
  • blockdata指令怎么用
  • tar 压缩命令tar
  • 编程 开发
  • 进项转出分录处理
  • 餐厅的打包盒一般是多少毫升
  • 车船税为什么没有发票
  • db2原理
  • 销售费用福利费和管理费用福利费
  • 递延所得税怎么计算
  • MySQL中distinct与group by语句的一些比较及用法讲解
  • sqlserver获取数据库名
  • 社保费单位减免
  • 个人承包公司运输违法吗
  • 增值税免抵退税和免退税的区别有什么?
  • 个体户减免税额怎么填
  • 认证超过限制什么意思
  • 暂估出库需要确认收入吗
  • 建筑业红字发票如何开
  • 公司开办期间怎么界定
  • 股权部分转让如何计算
  • sql提取指定字符串
  • Mysql 5.6.37 winx64安装双版本mysql笔记记录
  • 纸嫁衣6第四章攻略全文图解
  • VMware10安装Windows server2012
  • linux CentOS/redhat 6.5 LVM分区使用详解
  • windowsserver2008修改远程端口
  • win10系统无法打开百度网盘
  • 慎用小儿百部止咳糖浆
  • Android计算器项目代码
  • 命令以管理员运行
  • vscode 远程调试jni
  • jquery仿淘宝商品详情页
  • 深入理解javascript特性
  • js遍历foreach
  • javascript基础入门视频教程
  • python发邮件代码
  • javascript的介绍
  • python基础教程入门
  • 收到农产品普通发票怎么抵扣
  • 增值税归国家还是地方
  • 个人土地建房
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设