没有合适的资源?快使用搜索试试~ 我知道了~
首页mysql中的内存使用.pdf
mysql中的内存使用.pdf

很牛逼的解说,可以让你瞬间提高mysql配置能力,向原作者致敬! -------------------------------------------------------- mysql 的内存管理其实是比较复杂的,小结下,分为两类: 1 线程独享内存 2 全局共享内存 先说线程独享内存: 线程栈信息使用内存(thread_stack):主要用来存放每一个线程自身的标识信息,如线程id, 线程运行时基本信息等等,我们可以通过 thread_stack 参数来设置为每一个线程栈分配多 大的内存。
资源详情
资源评论
资源推荐

mysql 中的内存使用
mysql 的内存管理其实是比较复杂的,小结下,分为两类:
1 线程独享内存
2 全局共享内存
先说线程独享内存:
线程栈信息使用内存(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 会根据实际需要













安全验证
文档复制为VIP权益,开通VIP直接复制

评论8