为了清理在 IMAGE 列中保存二进制文件的非常大的表,我创建了以下序列(基于此:文章)以快速摆脱这些图像 Blob 的一部分:
Select * into temp table where
(过滤一小部分我想保留)Select
其余行WITH
的NULL
BLOB 值相同temp table
。- 截断原始 blob 表
- 将所有记录从临时表复制回原始表。
我在本地机器(笔记本电脑)上进行了测试运行,第一个步骤花费了大约 20 秒,获得了大约 2 Milion 记录。
整个脚本耗时约 4 分钟,而原始表包含约 250 万条记录。
在登台服务器环境中。第一步同时需要 > 25 分钟来复制 320 万条记录!!!SSMS 实际上停止与我交互。我估计(使用 calc.exe)可能需要大约 1 分钟...
现在我想知道出了什么问题......?
TY
我认为这是 Revovery 模型被设置为 FULL。正如问题中链接的文章所说,需要将其更改为 simple of bulk:“SIMPLE 和 BULK_LOGGED 恢复模型与 FULL 恢复模型相反执行“最佳”。” 因此,将其设置为简单后,几分钟内就会执行该过程。
花费这么长时间的原因之一可能是数据库文件和日志文件上的 AutoGrow 设置。如果将其设置为非常低的值,您最终可能会遇到许多同步的自动增长事件。您可以通过预增长数据/日志文件和/或增加自动增长设置来避免这种情况。
你被另一个进程阻止了吗?
您可以使用 sp_whoisactive 进行检查(请参阅http://whoisactive.com/)
在这里你还可以看到你的工作有多远,以及执行计划是什么样的。