表已满(使用MEMORY引擎)

时间:2015-01-29 16:32:12

标签: mysql

我想将生产数据库传输到我的开发机器进行测试。

出于性能目的,它有6个带MEMORY引擎的表格。

我做了mysqldump --routines -hxxx -uxxx -pxxx prod_database > prod_dump.sql。当我在同一个生产服务器上执行mysql -hxxx -uxxx -pxx prod_clone_database < prod_dump 时(因为我有一个UAT的克隆,因为我们还没有购买UAT Mysql虚拟服务器),它运行正常。

当我这样做mysql -uroot -proot prod_clone < prod_dump.sql时,我收到错误ERROR 1114 (HY000) at line 138735: The table 'sezione_a' is full

生产服务器运行具有1GB RAM的Linux,并且仅运行mysqld守护程序。 我的笔记本电脑有16GB的RAM。为什么我得到一个表满错误?我该如何避免?由于该表中的数据与测试无关,我可以从转储中排除其DML吗?我还是需要DDL

1 个答案:

答案 0 :(得分:4)

在MySQL中,默认情况下,使用内存引擎创建的临时表可以快速增长超过 max-heap-table-size tmp-table-size <的16mb限制因为每行分配的内存比通常需要的多。例如,如果每行需要16kb,则只需要1k行即可达到限制。对于许多应用程序,可以使用 ROW_FORMAT = DYNAMIC 来解决此问题,如下所述:

http://www.percona.com/doc/percona-server/5.5/flexibility/improved_memory_engine.html