我正在从大约 1.8GB 大的数据库中删除数据。(通过 C# 应用程序)
在较小的数据库(〜600MB)上运行相同的操作没有问题,但在我得到的大数据库上:
超过锁定等待超时;尝试重新启动事务。
会innodb_lock_wait_timeout
解决问题还是有其他方法?
我不认为优化查询是一种解决方案,因为没有办法让它们更简单。
我正在删除有关条件和关系的部分数据,而不是所有数据。
我正在从大约 1.8GB 大的数据库中删除数据。(通过 C# 应用程序)
在较小的数据库(〜600MB)上运行相同的操作没有问题,但在我得到的大数据库上:
超过锁定等待超时;尝试重新启动事务。
会innodb_lock_wait_timeout
解决问题还是有其他方法?
我不认为优化查询是一种解决方案,因为没有办法让它们更简单。
我正在删除有关条件和关系的部分数据,而不是所有数据。
您可以将删除语句拆分为不会超时的较小部分。
就像从 id 1 到 1000 删除这些东西,执行并提交,对 ids 10.000 -20.000 等执行相同的操作。
您提到您“...根据某些条件和关系删除部分数据,而不是所有数据”。我会检查您用来过滤要删除的数据的所有键上是否有适当的索引。
如果您要向我们展示您的架构和 where 子句,我们可以建议可能有帮助的那些。
您还应该考虑将删除操作拆分为多批较少数量的行。
另一种选择是执行 SELECT INTO,仅将要保留到另一个表中的数据删除,然后重命名这个新表。
右键单击表-> 将表编写为--> 创建到--> 新查询.. 保存查询...
右键单击表格->删除
刷新您的数据库和 Intellisense 以忘记该表,然后运行将重新创建表的脚本,这就是您拥有一个空表的方式......
或者,如果您不想删除表中的所有信息,您可以简单地增加 innodb_lock_wait_timeout(或 table_lock_wait_timeout,不确定哪个)的设置
If you're deleting all the rows in the table, use
Truncate table *tablename*
The delete command uses the transaction log when completing the task, but truncate cleans it out without logging.