sql表分区最佳实践

时间:2017-07-07 07:10:05

标签: sql sql-server sql-server-2008 database-design partition

我为现有表做了一个表分区。 你可以建议最好的优化,因为我的事务日志已经完全运行下面的表分区查询

BEGIN TRANSACTION

CREATE PARTITION FUNCTION [pfDimHeader_HIST](nvarchar(6)) AS RANGE LEFT FOR VALUES ( N'201401', N'201501', N'201601', N'201602', N'201603', N'201604', N'201605', N'201606', N'201607', N'201608', N'201609', N'201610', N'201611', N'201612', N'201701', N'201702', N'201703', N'201704', N'201705', N'201706', N'201707')

CREATE PARTITION SCHEME [psDimHeader_HIST] AS PARTITION [pfDimHeader_HIST] TO ([PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY])

SET ANSI_PADDING ON

CREATE CLUSTERED INDEX [ClusteredIndex_on_psDimHeader_HIST_636336478362776789] ON [cdw].[DimHeader_HIST]
(
    [ReportingPeriod]
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [psDimHeader_HIST]([ReportingPeriod])

DROP INDEX [ClusteredIndex_on_psDimHeader_HIST_636336478362776789] ON [cdw].[DimHeader_HIST]

COMMIT TRANSACTION

1 个答案:

答案 0 :(得分:0)

[0]一般来说,为了降低对事务日志的影响,事务应该更小。因此,不是使用单个事务来创建索引然后删除(相同的索引;对我来说没有意义 - 至少在这一刻)你可以使用两个单独的事务(例如)。

[1]我会使用以下查询

SELECT db.name, db.log_reuse_wait_desc
FROM sys.databases db
WHERE db.name = DB_NAME()

查看日志大小增加的主要原因。

[2]最可能的原因是[2.1]数据库恢复模型为FULL / BULK LOGGED(与FULL恢复模型相同,但针对BULK操作进行了优化)和[2.2]缺少日志备份和/或[2.3]低频日志备份。在这种情况下,我将为备份事务日志创建维护计划,或者[如果存在]我将执行SQL代理作业。

注意:如果答案不够清楚,请发表评论。