sort_buffer_size, Sort_merge_passes关系

对于事务性工做负载是一般最快这个大小设置为32K,而且也是容许的最小尺寸。您应该谨慎使用它设置为较大的值,由于这能够很容易地下降性能。服务器

若是全部的数据进行排序不适合在指定缓冲区大小的MySQL第一种类尽量多的数据将适合,那批写入磁盘。接下来,它排序另外一批和写入操做。而后执行这些和所需的全部其余批次的基于磁盘的归并排序,使用磁盘的三个临时文件这一点。这个过程是有效的,但对于大型查询可使用SET SESSION sort_buffer_size = 128 * 1024用于增长查询运行sort_buffer_size的值以前的会话;例如使用128K的排序缓冲器。 * 1024是有方便,由于交互式客户端不支持k或m后缀,能够在配置文件中使用。工具

在基于磁盘的排序方法中使用合并的数量被报告在状态变量Sort_merge_passes,购自SHOW GLOBAL STATUS; 。若是在正常生产中使用一段时间后,所报告的值是0能够确定的是sort_buffer_size的值值不是过小,一个很好的迹象,这极可能是太大。在实践中人们每每将其设置为比最佳的许多工具更大的不恰当建议增长它的值。不要只是sort_buffer_size的值增长,直到Sort_merge_passes是0。这几乎确定会产生大小比最快的代价大得多。对于很是鲁莽,力求有一个繁忙的服务器上每正常运行时间的第二个至少几Sort_merge_passes。可能还有更多。为了更准确,你须要你的标杆查询和建议结合你的实际。性能

对于常见的Linux内存分配方法用于分配存储器能够改变到较慢的方法超过256K 512K或和2M的尺寸。才去对这些阈值之一,您应该使用特别注意,内存分配成本可能大大超过恰好低于阈值。优化

运行基准建议只读或大部分工做负载能够期待在Linux上使用一个32K sort_buffer_size的值,而不是256K 有 1-2%的性能提高。更大的尺寸比256K将有更大的反作用。好处将取决于使用的操做系统的内存分配器不一样,但要以此为约极可能是适当的值很好的指导。spa


MySQL的5.6有LIMIT的查询只保留目前匹配缓冲限位行的优化。这避免了须要排序的整个结果集。若是您使用较大的排序缓冲区,以提升速度,通过的LIMIT查询可能会发现再也不是有帮助的。操作系统

配置文件和服务器默认常用比用于事务处理的最优值更大的值。这样的值能够提升查询效率低下的表现,这是可能的,做为临时措施可能会发现一个或两个有用的MB的值,直到可以识别并调整涉及到的查询。若是实际应该运行查询,而不是设置全局值,使全部其余查询那种小数据量的慢以前设置会话值。排序

 

Linux的glibc的malloc的内部变量
在256K或512K的阈值是MALLOC_MMAP_THRESHOLD,其中的glibc malloc的从使用其堆使用MMAP改变点。这种规模以后分配时间能够大约慢40倍。全部会话缓冲受此影响,不仅是排序缓冲器。事务

用glibc 5.4.23 malloc的调节变量在这些环境变量暴露开始:内存

MALLOC_TRIM_THRESHOLD_
MALLOC_TOP_PAD_
MALLOC_MMAP_THRESHOLD_
MALLOC_MMAP_MAX_
MALLOC_CHECK_效率

在极少数状况下,会发现启动MySQL调整如何释放malloc的内存以前是很是有用的调整一个或多个的这些。咱们不建议这样的正常使用,只有当找到的默认方式有些不常见的问题是malloc的适用于特定工做负载。

相关文章
相关标签/搜索