sea*_*ank 9 sql-server-2008 compression
我计划对我的数据库(数据仓库)中的一些大表应用 PAGE 压缩。这些表相当大,有超过 150 亿行。
当我在测试环境中应用压缩时,整个过程大约需要 22 个小时。这些表每天都会通过运行很长时间的查询进行访问。
离线ALTER ... REBUILD 在表上使用一个大的胖模式修改锁,并发绝对为 0(即使脏读也不能扫描表)。
Online ALTER ... REBUILD,顾名思义,允许任何并发查询或 DML 操作。
MSDN 文章How Online Index Operations Work描述了三个阶段(准备、构建和完成)以及每个阶段(IS、IS、SCH-M)所需的对象锁。构建器分批运行并在取得进展时获取数据锁,但它会在发生冲突时退出,并且在使用构建器处理死锁时有一些特殊的方法:
持有批处理事务锁的索引生成器事务和 DML 语句之间可能会出现死锁,但在内部处理,因此 DML 操作和索引生成器事务都不应在生成阶段因死锁而终止。
更多详细信息请参见 SQL Server 2005白皮书中的在线索引操作。
话虽如此,对于 15B 行的 DW 表,最好的选择可能是Columnstore Indexes。
我通过运行测试了该场景
ALTER TABLE test_tbl REBUILD WITH (DATA_COMPRESSION=PAGE,ONLINE=ON)
Run Code Online (Sandbox Code Playgroud)
在事务中,它在页面上使用独占锁,所以是的,存在阻塞的可能性,但是对于大表来说,阻塞的情况会非常少,因为它会逐页压缩,因此只有大型全表扫描选择才能获得被阻止,而不是插入或更新,所以答案是:
归档时间: |
|
查看次数: |
5696 次 |
最近记录: |