标题很大程度上概括了问题本身:对于tmp_table_size和max_heap_table_size MySQL属性的值是否有经验规则?
我经历了严重的性能下降,这是由于MySQL使用磁盘空间来文件连接结果造成的。
将tmp_table_size和max_heap_table_size增加到3G解决了这个问题,但这更像是一种尝试和错误的方法。
是否有更可靠的方法来计算这两者的适当值?
发布于 2018-06-13 16:59:30
我建议为每个内存提供1%的简单内存。
max_heap_table_size是对您CREATE的ENGINE=MEMORY表的限制。没有多少人使用该引擎,如果使用,那么在创建之前设置最大大小。LEAST(max_heap_table_size, tmp_table_size)是允许某些隐式临时表获得多大的上限。这些表在SELECTs ( etc )中用于处理GROUP BY、ORDER BY、子查询等。由于这些临时表可以由每个连接创建,而且每个查询可能有多个临时表,因此1%的RAM是一个相当“安全”的限制。当MySQL耗尽内存时,操作系统就会交换东西--用MySQL交换性能是很糟糕的。
此外,在设置这些太大,您是从其他用途的内存(例如,buffer_pool),从而潜在地减缓所有查询。
其他经验法则
另见SQL_BIG_RESULT。
https://dba.stackexchange.com/questions/209411
复制相似问题