开发者社区> 问答> 正文

锁的总数超过了锁表的大小?mysql

我正在MySQL中运行报告。查询之一涉及将大量行插入到临时表中。当我尝试运行它时,出现以下错误:

错误代码1206:锁的数量超过了锁表的大小。

有问题的查询是:

create temporary table SkusBought( customerNum int(11), sku int(11), typedesc char(25), key customerNum (customerNum) )ENGINE=InnoDB DEFAULT CHARSET=latin1; insert into skusBought select t1.* from (select customer, sku, typedesc from transactiondatatransit where (cat = 150 or cat = 151) AND daysfrom07jan1 > 731 group by customer, sku union select customer, sku, typedesc from transactiondatadelaware where (cat = 150 or cat = 151) AND daysfrom07jan1 > 731 group by customer, sku union select customer, sku, typedesc from transactiondataprestige where (cat = 150 or cat = 151) AND daysfrom07jan1 > 731 group by customer, sku) t1 join (select customernum from topThreetransit group by customernum) t2 on t1.customer = t2.customernum; 我读过更改配置文件以增加缓冲池大小会有所帮助,但这无济于事。作为临时替代方法或永久修复程序,将以何种方式解决此问题?

编辑:更改查询的一部分。不应该影响它,但是我做了全部替换工作,却没有意识到它搞砸了。不会影响这个问题。

编辑2:将typedesc添加到t1。我在查询中更改了它,但不在这里。

展开
收起
保持可爱mmm 2020-05-17 22:26:49 31254 0
1 条回答
写回答
取消 提交回答
  • 可以通过为MySQL变量设置更高的值来解决此问题innodb_buffer_pool_size。作为默认值innodb_buffer_pool_size会8,388,608。

    要更改设置值,innodb_buffer_pool_size请参见以下设置。

    my.cnf从服务器中找到文件。对于Linux服务器,大多数情况下/etc/my.cnf 将行添加innodb_buffer_pool_size=64MB到此文件 重启MySQL服务器 要重启MySQL服务器,您可以使用以下两个选项中的任何一个:

    服务mysqld重启 /etc/init.d/mysqld重新启动来源:stack overflow

    2020-05-17 22:31:28
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像