请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

sort_buffer_size join_buffer_size read_rnd_buffer read_buffer_size

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

正在回答 回答被采纳积分+3

1回答

sqlercn 2018-12-02 18:46:32

这几个值的设置要跟据业务所使用的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 回复 有任何疑惑可以回复我~
  • 提问者 苦瓜苦也 #1
    怎么判断跟据业务所使用的SQL而订的?
    回复 有任何疑惑可以回复我~ 2018-12-02 19:08:49
  • sqlercn 回复 提问者 苦瓜苦也 #2
    就是看你SQL的类型,是否需要增加排序缓存这类缓存。
    回复 有任何疑惑可以回复我~ 2018-12-02 19:45:11
  • 老师我看你的公式里面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 10:11:22
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信