首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除行正在增加索引大小

问删除行正在增加索引大小
EN

Database Administration用户
提问于 2014-02-25 17:21:59
回答 1查看 1.2K关注 0票数 4

我们在SQLServer2008SSIS标准服务器中有一个非常大的表,通过将行复制到单独磁盘上的另一个数据库中,然后使用SSIS数据流从原始表中删除它们来归档行。该表有一个bigint主键,并将按该键的数字顺序删除行。但是,由于我正在删除行,表的总体索引大小正在稳步增加,而且我不知道原因。在整个过程中,数据大小保持不变。

以下是表中的详细信息:

行数:~300 000 000

数据大小:~65 GB

索引大小:~65 GB

正在以每小时35万左右的速度删除行。

列定义使用以下数据类型: smallint、int、bigint、char、varchar、nvarchar、unique标识符、位、日期时间。

该表有一个主键,即表上的聚集键,以及4个非聚集索引。

该表也是复制维护计划的一部分。表的复制副本在数据大小和索引大小上都在减少!

上周,我在另一个表上执行了相同的处理,当我删除行时,我可以看到该表的数据大小和索引大小都在减少。

在这种情况下,是否有任何解释来解释为什么索引的大小会持续上升?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2014-02-25 19:47:55

好的,我相信您正在做,INSERT正在增加大小,然后在执行OLEDB命令之后,它将向Server发送数十万个DELETE命令,这是导致您的问题的原因。下面是一个关于如何更有效地执行这个DELETE操作的简短演示/教程。即使这不能解决您的索引问题,它也会使您的包更有效地运行。

步骤1:为这些信息构建一个暂存表。

您需要CREATE一个表,它唯一的目的是保存删除所需的列。无论你的主键是什么都行。

步骤2:截断暂存表。

首先截断是很重要的,因为如果包失败,这将全部用于重新运行。

步骤3:数据流任务。

接下来,添加数据流任务并打开。

如果您正在其他地方进行存档,而不是忽略下一个图像中的多播和归档目标。

步骤3:删除

如果你有其他问题的话,这应该会让你对如何做到这一点有一个很好的想法-请随便问。

这样做效率更高的原因是,您当时正在执行基于集的操作,而不是将350 K DELETE命令发送到SQL server。

票数 10
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/59636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档