MySQL 服务器的 thread_stack 参数 - 它是啥?它应该有多大?

Posted

技术标签:

【中文标题】MySQL 服务器的 thread_stack 参数 - 它是啥?它应该有多大?【英文标题】:MySQL server's thread_stack parameter - what is it? How big should it be?MySQL 服务器的 thread_stack 参数 - 它是什么?它应该有多大? 【发布时间】: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 如何影响连接的任何线索? 【参考方案1】:

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

【讨论】:

以上是关于MySQL 服务器的 thread_stack 参数 - 它是啥?它应该有多大?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL内存使用-线程独享

MySQL内存使用分析

mysql调用存储过程的时候,报错ERROR 1436 (HY000): Thread stack overrun: 解决办法

MySQL的存储过程存储过程的变量存储过程的传参流程控制游标

转载MySQL JDBC 客户端反序列化漏洞

jdbc-mysql基础 PreparedStatement 要使用无参方法 execute()