存档超过1,000,000,000行的大表的最佳实践

dev*_*rus 8 sql database sql-server

我正在使用SQL Server 2005.有一个审计跟踪表,包含超过1,000,000,000行.我打算存档这张桌子.当我进行简单的选择时nolock,我仍然可以找到阻塞(可能是IO阻塞与其他进程?).那么这种情况有什么最好的做法吗?

cle*_*tus 4

对于这么大的表,您将需要找到一些有效的分片/分区策略。从这个意义上说,归档往往是一种分区形式,但不是一种好的分区形式,因为您经常想要查询当前和归档。在最坏的情况下,您最终会在存档表和当前表的 UNION 上执行 SELECT,这比根本没有拆分它们更糟糕。

通过找到其他一些方法来对数据进行切片(例如记录类型或其他方法),您通常会做得更好。但是,如果您要按日期拆分它,请绝对确保您不会查询存档+当前数据集。

此外,SQL Server 2005+ 默认情况下不启用 MVCC。但是,如果您启用 MS 所谓的快照隔离,它就可以做到这一点。请参阅可串行化与快照隔离级别

启用此功能的影响是,未提交的 INSERT 或 UPDATE 将阻止另一个事务中的 SELECT,直到第一个事务提交或回滚。这可能会导致不必要的锁定并限制您的可扩展性。