Sql server 2008 表分区期间磁盘空间不足
我正在尝试分割一个大表(160Gb)。它包含过去70天内生成的IIS日志中的数据。分区方案和函数将表拆分为相关的日期 每个文件组中有一个文件,每个文件中有一天的数据 表中当前没有聚集索引,在创建日志和从数据中提取ASP会话ID时,有2个非聚集索引 我遇到的问题是,当我尝试分配此表进行分区时,磁盘空间不足 是否有一种分批处理过程的方法Sql server 2008 表分区期间磁盘空间不足,sql-server-2008,partitioning,Sql Server 2008,Partitioning,我正在尝试分割一个大表(160Gb)。它包含过去70天内生成的IIS日志中的数据。分区方案和函数将表拆分为相关的日期 每个文件组中有一个文件,每个文件中有一天的数据 表中当前没有聚集索引,在创建日志和从数据中提取ASP会话ID时,有2个非聚集索引 我遇到的问题是,当我尝试分配此表进行分区时,磁盘空间不足 是否有一种分批处理过程的方法 USE [Diagnostic_MB] GO BEGIN TRANSACTION CREATE CLUSTERED INDEX [ClusteredIndex_on
USE [Diagnostic_MB]
GO
BEGIN TRANSACTION
CREATE CLUSTERED INDEX [ClusteredIndex_on_Scheme70Day_634883295513235207] ON [dbo].[IISLog]
(
[SentUTCDateTime]
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [Scheme70Day]([SentUTCDateTime])
DROP INDEX [ClusteredIndex_on_Scheme70Day_634883295513235207] ON [dbo].[IISLog] WITH ( ONLINE = OFF )
CREATE NONCLUSTERED INDEX [ASPSession] ON [dbo].[IISLog]
(
[ASPSessionID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [Scheme70Day]([SentUTCDateTime])
CREATE NONCLUSTERED INDEX [IX_Time] ON [dbo].[IISLog]
(
[SentUTCDateTime] ASC
)
INCLUDE ( [csHost],
[scStatus],
[timeTaken]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [Scheme70Day]([SentUTCDateTime])
COMMIT TRANSACTION
这就是最终占用我所有磁盘空间的代码。理想情况下,我希望能够将数据移出主文件组,而不是创建副本。这不是一个需要随时启动的数据库,因此也欢迎使用脱机解决方案…简单地说:在分区时,SQL Server重建聚集索引。要重建聚集索引,它会对所有记录进行排序。排序在tempdb中进行。服务器需要表大小的可用空间,或者可能是x2大小的表,具体取决于模式(对不起,现在不记得了)
快速修复:将一些数据(=1个目标分区)复制到临时表中,在PF上的该表上创建索引,将该位切换到目标表中。一次移动2-3 GB应该不是问题。斯托莱格已经有了一个好主意。这里还有另一个:删除非聚集索引预重建(因为CI重建也可能重建它们,这取决于您的情况),并对所有操作使用单独的事务(正在运行的事务可防止删除的分配单元被释放和空间被释放)
还有一个更高级的技巧:在分区键和CI键上构建NCI。这样,SQL Server可能会使用该NCI来构建分区CI。由于NCI提供了排序顺序,因此无需再次对数据集进行排序。事实上,我在野外见过这种平面形状。如果SQL Server可以将NCI与键查找结合使用,则它并不总是对整个表进行排序。有时,根据其启发法,查找计划更便宜。如果您想知道为什么没有得到响应,应该继续问这个问题。我投票通过迁移到DBA来“结束”这个问题,但目前只有2票(需要5票)。