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

时间:2013-10-11 21:43:48

标签: mysql memory stored-procedures

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

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

这是关于让我的SP成功运行所需的内容。这对我来说似乎很奇怪,因为创建并返回的表A(通过来自A的select *)的大小只有16MEG。我不确定导致内存需求的其他部分是什么,大约是100MEG。看起来SP正在使用比所需更多的内存。我的猜测是,作为游标循环的一部分在SP中运行的连接在它们运行后将临时表保留在后面,并且直到SP完成执行后才会清除它们。这意味着大量连接的临时表在内存中浮动。有没有办法停止这个或验证额外的内存被这些连接在SP游标循环内运行?难道这个记忆会来自其他东西吗?感谢任何帮助过的人。

1 个答案:

答案 0 :(得分:1)

根据你的查询,mysql可以创建几个临时表,所以 - 在每个查询上使用EXPLAIN EXTENDED查找创建它的内容