gpt4 book ai didi

sql-server-2005 - 取消插入查询 - 花费数小时

转载 作者:行者123 更新时间:2023-12-04 22:28:05 25 4
gpt4 key购买 nike

我运行了一个查询,将 1800 万条记录从一个表复制到另一个表。由于查询需要很长时间才能运行,我正在监视表计数以判断它何时完成。

我注意到在它达到它应该达到的数量之前开始下降,所以我检查了日志,看起来 sql server 基本上耗尽了内存:

'此时 SQL Server 数据库引擎实例无法获取 LOCK 资源。当活跃用户较少时重新运行您的语句。请数据库管理员检查此实例的锁和内存配置,或检查长时间运行的事务。”

在错误出现在日志中之前,实际插入仅运行了大约 20 分钟。大约 2 小时前,我取消了管理工作室的查询,从表数来看,这件事只完成了 25%,这让我还需要大约 6 个小时。我假设由于所有内存都用完了,所以它现在正在从页面文件中运行,这就是它花费这么长时间的原因。

我可以做些什么来加快速度吗?它基本上使数据库无法使用,因为每个人都收到“无法获得锁定资源”错误。我自己可以轻松删除插入的记录,我正在徘徊是否可以杀死进程 ID 并自己“回滚”插入?

更新

这东西运行起来非常慢。我发现的一件事是以下查询给出的 # 锁似乎离谱:8300 万。下一个最高的是高达 20。

SELECT request_session_id, COUNT (*) num_locks
FROM sys.dm_tran_locks
GROUP BY request_session_id
ORDER BY count (*) DESC

最佳答案

一旦你取消了这个东西,你需要修正你的代码来做插入。首先,如果您在游标中一次处理一条记录(并且所有记录都在同一个事务中),这将永远运行。如果您使用基于集合的插入,您也可能遇到您描述的问题。如果您可以使用可以很好地工作的批量插入来执行此操作,或者您所做的是结合逐行和基于集合的方法,即在循环中运行批量记录。 (我通常一次从 2000 条开始,如果速度很快,则将其移动到更多记录。)只需确保测试您没有尝试重复插入同一批记录。

关于sql-server-2005 - 取消插入查询 - 花费数小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5756902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com