MyISAM排序缓冲区大小 vs 排序缓冲区大小

6

我是一台配备6GB RAM的MySQL服务器。我想知道myisam_sort_buffer_size和sort_buffer_size之间的区别是什么?

我已经将它们设置为以下大小:

myisam_sort_buffer_size = 8M

sort_buffer_size = 256M

请同时说明这些值是否合适或需要调整?

谢谢

3个回答

11

sort_buffer_size:

MySQL文档:

每个需要进行排序的会话都会分配这个大小的缓冲区。 sort_buffer_size不特定于任何存储引擎,而是以一种通用的方式应用于优化。

您的sort_buffer_size值似乎非常高。默认值为2M。由于提高了性能,因此建议不要超过该值。有些人推荐更小的值,如256kB。请记住,这是每个客户端会话,而不是全局值。大的值会快速增加。

有些人建议更小的值,例如256kB。

myisam_sort_buffer_size:

MySQL文档:

在使用REPAIR TABLE或使用CREATE INDEX或ALTER TABLE创建索引时对MyISAM索引进行排序时分配的缓冲区的大小。

您的myisam_sort_buffer_size似乎很好。除非您正在使用ALTER TABLE或REPAIR TABLE等重建索引,否则不相关。


1
谢谢Thomas,你提到我的sort_buffer_size太高了。由于我正在进行大量排序,请问你能告诉我最佳大小是多少吗? - D3 K
还有一些调整参数。我认为我们应该在这里提到它们,以便其他人从中受益: tmp_table_size = 64M, key_buffer_size = 768M, read_rnd_buffer_size = 6M, table_cache = 800。您能否就这些值在具有6GB RAM和高流量的服务器上发表一些看法。 谢谢 - D3 K
1
@D3K:http://www.mysqlperformanceblog.com/2010/10/25/impact-of-the-sort-buffer-size-in-mysql/ - Alix Axel
@D3K:还有http://varokism.blogspot.pt/2011/12/fine-tuning-readrndbuffersize-and.html - Alix Axel
在管理最大线程数和内存时,请考虑sort_buffer_size,如 key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads=memory used - KCD
显示剩余3条评论

1

这些参数是针对每个线程的,因此请检查最大连接数。

即,使用15GB的内存。

max_connections        = 1500
sort_buffer_size = 32M

我收到了mysqltuner的警告:

 [--] Total buffers: 928.0M global + 32.7M per thread (1500 max threads)
 [!!] Maximum possible memory usage: 48.8G (312% of installed RAM)

所以我将它降低到默认值。

1
速度是否增加了? - Pascut
我更注重同时线程数的优化,以及每个线程具有足够的内存来实现最佳运行。(虽然我不知道每个线程可以分配多少内存)。我希望在Web服务器上支持大约每秒2500次请求。 - Mladen Adamovic
我指的是线程总数。所有的线程都是由单个用户(glassfish)创建的。 - Mladen Adamovic

0

sort_buffer_size = 256K 是最好的选择。你可以尝试这个设置,然后重新启动 MySQL 服务器并监控几个小时,你很容易就能注意到它带来的好处。


请解释为什么是256K。你引用的理由和http://ronaldbradford.com/blog/more-on-understanding-sort_buffer_size-2010-05-10/一样吗? - Pacerier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接