我正在使用sql Server 2005.有一个审计跟踪表,包含超过1,000,000行.我打算将此表归档.当我使用nolock进行简单的选择时,我仍然可以找到阻塞(可能是IO阻塞与其他进程?).那么这种情况有什么最好的做法吗?
解决方法
对于一个大的表,您将希望找到一些有效的分片/分区策略.在这种意义上,归档往往是一种分区形式,但不是一种好的归档,因为你经常想要查询当前和归档.在最糟糕的情况下,你最终会在归档和当前表的UNION上使用SELECT,这比你根本没有拆分它们更糟糕.
通常会找到一些其他方法来对数据进行切片,例如记录类型或其他内容,这样做会更好.但是,如果您要按日期拆分它,请确保您不会查询存档当前数据集.
此外,sql Server 2005默认情况下不启用MVCC.但是,如果启用MS调用快照隔离,则可以执行此操作.见Serializable vs. Snapshot Isolation Level.
未启用此功能的效果是,未提交的INSERT或UPDATE将阻止另一个事务中的SELECT,直到第一个事务提交或回滚为止.这可能会导致不必要的锁定并限制您的可伸缩性.