【发布时间】:2011-02-24 13:29:14
【问题描述】:
几天前我从 MySQL 数据库中收到以下错误:
线程堆栈溢出:196608 字节堆栈使用了 68744 字节,需要 128000 字节。使用 'mysqld -O thread_stack=#' 指定更大的堆栈。
我找到的所有文档都说:
在 MySQL 4.0.10 之前默认为 64KB,之后为 192KB。如果线程堆栈太小,则会限制服务器可以处理的 SQL 语句的复杂性、存储过程的递归深度以及其他消耗内存的操作。
我将变量 thread_stack 设置为 256K,但它只是一个随机值。现在它解决了这个问题,但我真的很想知道它应该有多大,获取一些示例值或用法。例如:
- 我可以用 96KB (x KB) 的线程堆栈做什么和不能做什么?
- 如何计算我需要多大的线程堆栈?
【问题讨论】:
-
你做了什么导致了它?你有任何 LARGE 联接或递归存储过程吗?
-
递归存储过程是我认为的原因。我也有大型表(500M 记录)的连接,但通常我首先只剪切表的一小部分,然后将它与第二个连接,这是相对较小的。我从来没有对有数百万条记录的两个表进行连接,也从不连接产生数百万条记录。但是thread_stack对join有什么影响呢?
-
@ssobczak,关于 thread_stack 如何影响连接的任何线索?
标签: configuration mysql-management mysql