mysql - 存储过程使用比预期更多的内存

标签 mysql memory stored-procedures

我已经构建了一个存储过程,它构建了一个内存临时表A,然后通过遍历标准游标的结果用数据填充它。通过我数据库中其他 MyISAM 表的多个连接,将数据选择到临时表中。 SP 工作正常,但它遇到了全表内存限制。为了解决这个问题,我调高了内存限制:

set @@tmp_table_size=127108864; (121MEGs)
set @@max_heap_table_size=127108864; (121MEGs)

这是关于让我的 SP 成功运行所采取的措施。这对我来说似乎很奇怪,因为创建和返回(通过 select * from A)的表 A 的大小只有 16MEG。我不确定是什么导致了内存需求的另一部分,大约是 100MEG。似乎 SP 使用的内存比需要的多。我的猜测是,作为游标循环的一部分在 SP 中运行的连接在运行后会留下它们的临时表,并且在 SP 完成执行之前不会清理这些临时表。这意味着大量连接的临时表在内存中 float 。有什么方法可以阻止这种情况或验证在 SP 游标循环内运行的这些连接是否正在吸收额外的内存?这种内存力会不会来自其他东西?感谢所有提供帮助的人。

最佳答案

根据您的查询,mysql 可以创建多个临时表,因此 - 在您的每个查询上使用 EXPLAIN EXTENDED 来查找创建它的原因

关于mysql - 存储过程使用比预期更多的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19327736/

相关文章:

sql - 大表上的简单 UPDATE 查询性能较差

php - 在 Laravel 5.4.36 中使用模型搜索数据

mysql - 在 mysql workbench 5.5 上定义事件名称时出现错误

c - C 中多维数组的内存分配问题

Android背景图片内存使用情况

mysql - 在存储过程中使用游标时无法获取日期时间列

php - 通过调用 PHP 脚本从 Javascript 更新数据库

php - Javascript 变量,发送到 PHP 变量

c++ - 单例类的成员变量的生命周期是多少?

oracle - 调用过程时的 PL/SQL 事务