![删除 MySQL 行导致锁表错误](https://linux22.com/image/558579/%E5%88%A0%E9%99%A4%20MySQL%20%E8%A1%8C%E5%AF%BC%E8%87%B4%E9%94%81%E8%A1%A8%E9%94%99%E8%AF%AF.png)
我有几百万行数据需要删除,但如果没有这个错误,它们就无法一次删除
错误 1206 (HY000):锁的总数超出锁表大小
所以我写了一个脚本,每次删除 100,000 行。它运行了一次,但当我第二次运行它时,第一次尝试删除 10,000 行时出现错误。
我尝试删除 10,000 行的方式是使用引用所有 200 万行的删除语句,但我使用限制子句仅影响 10,000 行。
我尝试在第一次删除之前向脚本添加“unlock tables;”语句,但这没有帮助。第一次删除时仍然出现锁定表错误。
有什么想法我可以这样做吗?
有什么方法可以告诉它不要锁定记录吗?我可以确保没有其他任何东西访问该表。
答案1
是InnoDB存储引擎吗?
此错误意味着 MySQL 没有足够的空间来存储执行查询所需的所有行锁。根据您拥有的 RAM,将其设置innodb_buffer_pool_size
为合理的值(256MB、512MB),您可能永远不会遇到此错误。
使用 检查默认值mysql> show global variables like 'innodb_buffer%';
。