当前位置:七道奇文章资讯安全技术网络技术
日期:2010-09-08 00:18:00  来源:本站整理

MySQL内存线程独享利用的本领[网络技术]

赞助商链接



  本文“MySQL内存线程独享利用的本领[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

  在这里我们将介绍的是MySQL内存利用上的线程独享,线程独享内存主要用于各客户端衔接线程存储各种操作的独享数据,如线程栈信息,分组排序操作,数据读写缓冲,后果集暂存等等,并且大大都可以通过相关参数来掌握内存的利用量.

  关于任何一个数据库管理系统来说,内存的分配利用绝对可以算的上是其核心之一了,所以很多但愿更为深化理解某数据库管理系统的人,城市但愿一窥毕竟,我也不例外.

  从内存的利用方法MySQL 数据库的内存利用主要分为以下两类

  线程独享内存

  全局同享内存

  本日这篇文章暂时先解析 MySQL 中主要的 “线程独享内存” 的.

  在 MySQL 中,线程独享内存主要用于各客户端衔接线程存储各种操作的独享数据,如线程栈信息,分组排序操作,数据读写缓冲,后果集暂存等等,并且大大都可以通过相关参数来掌握内存的利用量.

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

  排序利用内存(sort_buffer_size):MySQL 用此内存区域举行排序操作(filesort),完成客户端的排序恳求.当我们设置的排序区缓存大小无法满意排序实际所需内存的时刻,MySQL 会将数据写入磁盘文件来完成排序.由于磁盘和内存的读写性能完好不在一个数目级,所以sort_buffer_size参数对排序操作的性能影响绝对不可藐视.排序操作的实现原理请参考:MySQL Order By 的实现解析.

  Join操作利用内存(join_buffer_size):利用程序常常会呈现一些两表(或多表)Join的操作需求,MySQL在完成某些 Join 需求的时刻(all/index join),为了削减参与Join的“被驱动表”的读取次数以提高性能,需求利用到 Join Buffer 来帮忙完成 Join操作(具体 Join 实现算法请参考:MySQL 中的 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内存线程独享利用的本领[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows 搭配 IIS7 PHP MySQL 环境
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • mysql数据库插入速度和读取速度的调整记录
  • MySQL Order By索引优化办法
  • MySQL Order By用法分享
  • mysql #1062 –Duplicate entry ''1'' for key ''PRIMARY''
  • MySQL Order By Rand()效率解析
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .