mysql tmp满了_mySQL临时表已满

我正在尝试使用以下语法创建并将临时mySQL表加载到内存中但遇到“表已满”错误:

CREATE TEMPORARY TABLE IF NOT EXISTS tmpHistory ENGINE=MEMORY SELECT * FROM history ORDER BY date ASC;

我原来的历史InnoDB表有大约3米行和大约300mb.我从它们的16mb默认值中增加了以下两个服务器变量:

max_heap_table_size = 536870912

tmp_table_size = 536870912

我在AWS r3.xlarge上运行mySQL,这是一个4核盒子,内存为30.5GB.

我已经审查了this SO guidance,但我仍然遇到表格是完全错误.我是新手使用内存引擎,所以任何建议都表示赞赏.

解决方法:

max_heap_table_size,而不是tmp_table_size控制任何后续MEMORY表的最大大小.

MEMORY有几个怪癖.也许这就是你:VARCHARs变成了CHAR.因此,如果VARCHAR(255)是CHARACTER SET utf8,则每行需要765个字节.

为什么要将完美的InnoDB表复制到MEMORY表中?为了避免磁盘命中?不…如果innodb_buffer_pool_size足够大,InnoDB表将有效地存在于RAM中.为了加快速度?不一定,因为InnoDB有行锁,但MEMORY只有表锁.

请提供SHOW CREATE TABLE;可能还有其他事情要反对你在做什么和/或解释你为什么会得到错误.

标签:mysql,global-temp-tables

来源: https://codeday.me/bug/20190623/1269309.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值