mysql 数据缓冲区_MySQL 数据库中的缓冲区参数介绍 | IT工程师的生活足迹

MySQL 服务中对数据做较为复杂的处理时;如多次顺序扫描,数据排序,多次数据排序和多表连接查询会使用到各种缓冲内存空间。如:read_buffer_size,sort_buffer_size,read_rnd_buffer_size和join_buffer_size参数

一、读取缓冲区:read_buffer_size

每个为MyISAM表执行顺序扫描的线程都会为其扫描的每个表分配一个这种大小的缓冲区(以字节为单位)。

如果您执行了多次顺序扫描,则可能需要增加此值,默认值为131072.此变量的值应为4KB的倍数。如果设置的值不是4KB的倍数,则其值将舍入到4KB的最接近倍数。

对于所有存储引擎,此选项也用于以下上下文中:

1、用于在临时文件(而不是临时表)中缓存索引时,对行进行排序ORDER BY。

2、用于批量插入分区。

3、用于缓存嵌套查询的结果。

和另外一种存储引擎专用的方式:确定MEMORY 表的内存块大小。

最大允许设置为 read_buffer_size:2GB

二、排序缓冲区:sort_buffer_size

每个必须执行排序的会话都会分配一个这样大小的缓冲区。

sort_buffer_size 并不特定于任何存储引擎,并以通用方式应用于优化。

最小值 sort_buffer_size必须足够大以容纳排序缓冲区中的15个元组。而且,增加数值 max_sort_length可能需要增加数值 sort_buffer_size。

如果您SHOW GLOBAL STATUS的输出中Sort_merge_passes每秒很多;则可以考虑增加 sort_buffer_size值来加快速度,ORDER BY或者GROUP BY通过查询优化或改进索引来提高操作的效率。

优化程序试图找出需要多少空间;但可以分配更多的空间–达到极限值。将其设置为大于全局所需的大小会减慢大多数查询的顺序。最好将其作为会话设置增加,并且仅用于需要更大尺寸的会话。在Linux上,有256KB和2MB的阈值,其中较大的值可能会显着减慢内存分配,所以您应该考虑保持低于其中一个值。

三、随机读取缓冲区:read_rnd_buffer_size

该变量用于从MyISAM 表中读取数据,对于任何存储引擎,用于多范围读取优化。

当数据操作中存在多个order by 查询语句时,此缓存会提供性能。

当MyISAM临时表中存储一个查询sort(顺序排序)的数据时,对表中数据读取并再做sort排序;通过此缓冲区读取行以避免磁盘搜索。

将变量设置为较大值可以大大提高ORDER BY 性能。

但是,这是为每个客户端分配的缓冲区,因此您不应将全局变量设置为较大的值。而是仅从需要运行大型查询的客户端中更改会话变量。

最大允许设置为read_rnd_buffer_size:2GB。

四、表连接缓冲区:join_buffer_size

用于普通索引扫描,范围索引扫描和不使用索引的联接的最小大小,从而执行全表扫描。

通常,获得快速连接的最佳方式是添加索引。

join_buffer_size当增加索引是不可能的时,增加获得更快速的完全连接的值。

为两个表之间的每个完整连接分配一个连接缓冲区。对于不使用索引的多个表之间的复杂连接,可能需要多个连接缓冲区。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值