我只是在学习MySQL的存储函数和-procedure语法.我硬编码了一个只返回数字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.
Run Code Online (Sandbox Code Playgroud)
就像 @wrikken 指出,当你运行 128k 线程堆栈时,这是一个已知的错误,但是它在较新版本的 mysql 中已修复,并且应该已修复,所以也许你正在运行旧版本或非版本官方包。
建议使用至少有 192k 的堆栈,因此您可以转到 my-small.cnf 并 make my-innodb-heavy-4G.cnf:thread_stack = 192k
my-small.cnf:thread_stack = 128K。
所有这些补救措施都可以在mysql 错误报告中找到,但请在修改服务器之前进行离线测试。确保离线本地主机具有与实时服务器相同的设置和配置,即如果您使用实时服务器。基本上,复制您的服务器并对其进行离线测试,如果修复有效并且不会导致任何问题,请将其上线。
| 归档时间: |
|
| 查看次数: |
1688 次 |
| 最近记录: |