问题 MySQL服务器的thread_stack参数 - 它是什么?它应该有多大?


几天前我从MySQL数据库得到以下错误:

线程堆栈溢出:用于196608字节堆栈的68744字节,需要128000字节。使用'mysqld -O thread_stack =#'指定更大的堆栈。

我发现的所有文档都说:

MySQL 4.0.10之前的默认值是64KB,之后是192KB。如果线程堆栈大小太小,则会限制服务器可以处理的SQL语句的复杂性,存储过程的递归深度以及其他消耗内存的操作。

我将变量thread_stack设置为256K,但它只是一个随机值。现在它解决了这个问题,但我真的想知道它应该有多大,得到一些示例值或用法。例如。:

  • 使用96KB(x KB)的线程堆栈可以做什么,不能做什么?
  • 如何计算我需要多大的线程堆栈?

5254
2018-05-27 08:31


起源

你做了什么导致了它?你有任何LARGE连接,或递归存储过程? - oedo
递归存储过程是我认为的原因。我也加入了巨大的表(500M记录),但通常首先我只剪切表的一小部分,然后用第二个加入它,这个相对较小。我从来没有加入两个拥有数百万条记录的表,也没有连接产生数百万条记录。但是thread_stack对连接有什么影响? - ssobczak
@ssobczak,关于thread_stack如何影响连接的任何线索? - S.Sabari Giri Nathan


答案:


今天刚遇到类似的错误。该 MySQL文档 关于变量提供了一个默认值的提示应该是足够的(对于32位系统为192K,对于64位系统为256K),以及查看 MySQL Benchmark套件


10
2018-03-10 19:40