在检查了一个 SSIS 包(由于 SQL Server 执行命令真的很慢),这是在我写这篇文章之前大约 5-4 年在我们的客户端中设置的,我发现有以下任务:1 ) 将 XML 文件中的数据插入到名为 [Importbarcdes] 的表中。
2)在另一个目标表上合并命令,使用上述表作为源。
3) "delete from [Importbarcodes]",清除SSIS包的任务读取XML文件后插入的行的表。
在快速检查表 ImportBarcodes 上只有 1 行的所有语句(SELECT、UPDATE、DELETE 等)后,执行大约需要 2 分钟。
扩展事件显示了很多 PAGEIOLATCH_EX 等待通知。
表中没有索引,也没有注册触发器。
仔细检查表的属性,在存储选项卡和一般部分下,数据空间字段显示在页面中分配的空间超过 6 GIGABYTES。
发生了什么:
在过去的 4 年中,该查询每天运行大部分时间,在表中插入和删除数据,将未使用的页面文件留在后面而没有释放它们。
因此,这是扩展事件会话捕获的等待事件和表上缓慢执行的命令的主要原因。
运行ALTER TABLE ImportBarcodes REBUILD修复了释放所有未使用空间的问题。TRUNCATE TABLE ImportBarcodes做了类似的事情,唯一的区别是删除所有页面文件和数据。