sort_buffer_size join_buffer_size read_rnd_buffer read_buffer_size

来源:2-22 内存配置相关参数

苦瓜苦也

2018-12-02

sort_buffer_size    排序缓冲区的尺寸。定义每一个线程使用的排序缓存区大小。mysql并不是在连接数初始化的时候就给每个缓存区分配内存。只有在查询,需要排序操作。才会给每个缓冲区分配内存。一旦查询需要查询,分配所有指定参数的值。如果sort_buffer_size设置100M,如果有100个连接数,就会占用到10G的内存。
join_buffer_size    连接缓冲区的大小,如果一个查询中,关联多张表,会对每个关联分配一个连接缓冲,所以每个查询会有多个缓冲。
read_buffer_size    当myisam表进行全表扫描,分配读缓冲池大小,当mysql读需要才会分配。
read_rnd_buffer	缓冲索引
**这4个值的大小 用什么依据来设置?
还有mysql默认的内存值大小是多少?**
谢谢
写回答

1回答

sqlercn

2018-12-02

这几个值的设置要跟据业务所使用的SQL而订,但是总体上有一个公式,如下

 SELECT ((@@key_buffer_size+@@innodb_buffer_pool_size+@@innodb_log_buffer_size++@@net_buffer_length+@@query_cache_size)/1024/1024/1024)+((@@sort_buffer_size+@@myisam_sort_buffer_size+@@read_buffer_size+@@join_buffer_size+@@read_rnd_buffer_size+@@thread_stack)/1024/1024/1024*@@max_connections);

这个公式得出的值不能超过系统的可用内存大小,至于MySQL的默认配置不同版本也会有些不同,具体可以参考所使用版本的手册。以MySQL5.7为例如下

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html

0
3
慕数据2147912
老师我看你的公式里面max_connections * (@@sort_buffer_size+@@read_buffer_size+@@join_buffer_size+@@read_rnd_buffer_size) 有点疑惑就是每个连接最坏情况会用到四个buffer吗? 理论上来讲为什么不是这样的呢,算出四个buffer的均值再乘max_connections ->max_connections * ((@@sort_buffer_size+@@read_buffer_size+@@join_buffer_size+@@read_rnd_buffer_size)/4)
2019-03-28
共3条回复

MySQL提升课程 全面讲解MySQL架构设计

面面俱到讲解影响MySQL性能的各个因素,让MySQL架构了然于胸。

4419 学习 · 547 问题

查看课程