我有一个(java)应用程序,它在启动时运行数据库清除查询。根据用户的不同,这些查询最终可能会删除数十万条记录。我已经分解了查询,因此它们被限制为5000条记录,每次查询之间都有一些喘息空间。
该表使用InnoDB。
示例查询:
DELETE FROM table WHERE epoch <= '1388094517' LIMIT 5000;
但是,某些用户看到了锁定问题的各种错误:
java.sql.SQLException: The total number of locks exceeds the lock table size
java.sql.BatchUpdateException: Lock wait timeout exceeded; try restarting transaction
建议使用mysql配置更改是不可能的,因为这是一个分布式应用程序。我可以采取哪些步骤来确保删除查询不会导致锁定错误?
应用程序在启动时开始记录数据,并且需要能够在当前删除查询运行时写入数据库。