noj*_*lag 5 sql-server partitioning sql-server-2012
我有一个包含四年数据的表,每个月我都有一个基于包含两个文件的文件组的分区。没想到又收到了八年的数据,准备了这些年的数据库文件和文件组。
当前的方案涵盖 200901 - 201512,我现在需要添加 200001 - 200812。使分区表联机的最佳方法是什么?
我问是因为当前表有 180 亿行,我想以有效的方式做到这一点:)
以下是与问题相关的两个分区最佳实践:
http://www.informit.com/articles/article.aspx?p=1946159&seqNum=5
如果分区的最左端为空,请使用ALTER PARTITION FUNCTION SPLIT RANGE向分区函数添加新范围。
要检查最左边的分区是否为空,请使用如下查询:
DECLARE @PartitionFunctionName sysname = 'YourPartitionFunctionNameHere';
SELECT
p.partition_number, SUM(pst.row_count) RowCountInPartition, pf.name PartitionFunction, ps.name PartitionScheme
FROM sys.dm_db_partition_stats pst
INNER JOIN sys.partitions p ON pst.partition_id = p.partition_id
INNER JOIN sys.indexes i ON p.object_id = i.object_id AND p.index_id = i.index_id
INNER JOIN sys.partition_schemes ps ON ps.data_space_id = i.data_space_id
INNER JOIN sys.partition_functions pf ON ps.function_id = pf.function_id
WHERE pf.name = @PartitionFunctionName
GROUP BY p.partition_number, pf.name, ps.name;
Run Code Online (Sandbox Code Playgroud)
如果第一个分区不为空,最佳实践建议您创建一个包含所有值的新函数,在该函数上创建一个新表,然后将数据插入到新表中。
此外,如果左侧分区只有几条记录,则拆分可能没问题。不确定,因为我从未尝试过。
无论您做什么,请确保在完成后在最左侧和最右侧的分区中留下一些空分区。我什至可能会为 0 和 1 创建分区范围,然后添加检查约束以防止第一个分区在其中获取数据。最后做同样的事情。
| 归档时间: |
|
| 查看次数: |
1260 次 |
| 最近记录: |