【发布时间】:2014-01-24 23:10:05
【问题描述】:
我只是在学习 MySQL 的存储函数和过程语法。我硬编码了一个只返回数字 12 的函数,它溢出了堆栈。有人知道这里是什么吗?这是 MySQL 5.5.30。
mysql> DELIMITER //
mysql> CREATE FUNCTION `newItemID`()
-> RETURNS BIGINT
-> SQL SECURITY INVOKER
-> BEGIN
-> RETURN 12;
-> END;
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> SELECT newItemID();
ERROR 1436 (HY000): Thread stack overrun: 12288 bytes used of a 131072 byte stack, and 128000 bytes needed. Use 'mysqld --thread_stack=#' to specify a bigger stack.
【问题讨论】:
-
嗯,工作在这里@5.5.34,具有相同的默认线程堆栈如果添加
DETERMINISTIC并删除BEGIN和END会发生什么?这是普通的 MySQL 吗? -
Thread stack overrun: 12288 bytes used of a 131072 byte stack嗯,看起来你只使用了大约 1/10 的堆栈大小。不知道发生了什么,但这很奇怪。 -
啊哈,it is a known bug running with 128k thread stack,但它应该已在 5.5.9 中修复。我会说这要么是回归,要么您没有从官方软件包安装 MySQL,而是由其他方维护的软件包?
-
非常感谢,伙计们。我无法控制服务器;这是一个典型的 LAMP 托管服务。我会和他们一起解决的。
标签: mysql