我正在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。我在查询中更改了它,但不在这里。
可以通过为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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。