-2

我正在从大约 1.8GB 大的数据库中删除数据。(通过 C# 应用程序)

在较小的数据库(〜600MB)上运行相同的操作没有问题,但在我得到的大数据库上:

超过锁定等待超时;尝试重新启动事务。

innodb_lock_wait_timeout解决问题还是有其他方法?

我不认为优化查询是一种解决方案,因为没有办法让它们更简单。


我正在删除有关条件和关系的部分数据,而不是所有数据。

4

4 回答 4

0

您可以将删除语句拆分为不会超时的较小部分。
就像从 id 1 到 1000 删除这些东西,执行并提交,对 ids 10.000 -20.000 等执行相同的操作。

于 2013-05-21T14:27:32.207 回答
0

您提到您“...根据某些条件和关系删除部分数据,而不是所有数据”。我会检查您用来过滤要删除的数据的所有键上是否有适当的索引。

如果您要向我们展示您的架构和 where 子句,我们可以建议可能有帮助的那些。

您还应该考虑将删除操作拆分为多批较少数量的行。

另一种选择是执行 SELECT INTO,仅将要保留到另一个表中的数据删除,然后重命名这个新表。

于 2016-06-24T09:54:24.287 回答
-1

右键单击表-> 将表编写为--> 创建到--> 新查询.. 保存查询...

右键单击表格->删除

刷新您的数据库和 Intellisense 以忘记该表,然后运行将重新创建表的脚本,这就是您拥有一个空表的方式......

或者,如果您不想删除表中的所有信息,您可以简单地增加 innodb_lock_wait_timeout(或 table_lock_wait_timeout,不确定哪个)的设置

于 2013-05-21T14:26:25.137 回答
-1

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.

于 2013-05-21T14:32:31.997 回答