mysql - 总锁数超过锁表大小

我正在 MySQL 中运行报告。其中一个查询涉及将大量行插入到临时表中。当我尝试运行它时,我得到了这个错误:

Error code 1206: The number of locks exceeds the lock table size.

有问题的查询是:

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;

我读过更改配置文件以增加缓冲池大小会有所帮助,但这无济于事。有什么方法可以解决这个问题,作为临时解决方法还是永久修复?

编辑:更改了部分查询。不应该影响它,但我做了一个 find-replace all 并没有意识到它搞砸了。不影响提问。

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

最佳答案

可以通过为 MySQL 变量 innodb_buffer_pool_size 设置更高的值来解决此问题。 innodb_buffer_pool_size 的默认值为 8,388,608

要更改 innodb_buffer_pool_size 的设置值,请参阅下面的设置。

  1. 从服务器中找到文件 my.cnf。对于 Linux 服务器,这将主要位于 /etc/my.cnf
  2. innodb_buffer_pool_size=64MB 行添加到此文件中
  3. 重启 MySQL 服务器

要重新启动 MySQL 服务器,您可以使用以下 2 个选项中的任何一个:

  1. 服务 mysqld 重启
  2. /etc/init.d/mysqld重启

引用 The total number of locks exceeds the lock table size

https://stackoverflow.com/questions/6901108/

相关文章:

sql - 单数还是复数数据库表名?

mysql - 如何在 Sequel Pro 中执行查询?

MySQL - 条件外键约束

mysql - 遇到需要满足多个条件的 MySQL Join 问题

mysql - SQL 性能 UNION 与 OR

mysql - MySQL 是否索引 NULL 值?

mysql - 允许所有远程连接,MySQL

python - MySQL:从查询中获取列名或别名

mysql - 如何解决 "Error: MySQL shutdown unexpectedly"?

mysql - 错误 : select command denied to user '