none
Desabilitando compressão de dados em uma tabela RRS feed

  • Pergunta

  • Bom dia a todos

    Tenho um banco com uma tabela usando DATA COMPRESSION = PAGE em uma instância 2008 R2 (10.50.2500).

    Preciso retirar esta compressão, para restaurar em um server standard.

    Após retirar a compressão com o ALTER abaixo, a tabela continua aparecendo na  sys.partitions como compressão

    ALTER TABLE <tabela> REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = NONE);

    Fiz rebuild nos indices da tabela e nada. (http://msdn.microsoft.com/en-us/library/cc280449(v=sql.105).aspx)

    Em uma cópia do banco em meu note, (2008 R2 - 10.50.4270) consegui retirar sem problemas

    Não encontrei nada nos CUs que apliquei em meu note sobre isso

    Alguém já passou por isso ou sabe como resolver?
    quinta-feira, 17 de janeiro de 2013 11:21

Respostas

  • Olá Victor,

    Nunca passei por esse problema, mas aqui vai algumas questões que você verificar.

    1) O Build do seu SQL Server que está igual a 10.50.2500 é um SQL Server 2008 R2 SP1

    2) Esse segundo SQL Server 2008 R2 de Build 10.50.4270 está no SQL Server 2008 R2 SP2 CU4. 

    3) Estão diferentes, mas como você mesmo falou não encontrou nada, mas eu mesmo assim tentaria realizar a atualização pelo menos para o Service Pack 2.

    4) Essa tabela está particionada? Existe mais de uma partição?

    Execute essa query abaixo no seu banco de dados e procure pela tabela que você alega a compressão e verifique se nessa query ainda consta como compressed

    -- Get Table names, row counts, and compression status for clustered index or heap
    SELECT OBJECT_NAME(object_id) AS [ObjectName], 
    SUM(Rows) AS [RowCount], data_compression_desc AS [CompressionType]
    FROM sys.partitions WITH (NOLOCK)
    WHERE index_id < 2 --ignore the partitions from the non-clustered index if any
    AND OBJECT_NAME(object_id) NOT LIKE N'sys%'
    AND OBJECT_NAME(object_id) NOT LIKE N'queue_%' 
    AND OBJECT_NAME(object_id) NOT LIKE N'filestream_tombstone%' 
    AND OBJECT_NAME(object_id) NOT LIKE N'fulltext%'
    AND OBJECT_NAME(object_id) NOT LIKE N'ifts_comp_fragment%'
    GROUP BY object_id, data_compression_desc
    ORDER BY SUM(Rows) DESC OPTION (RECOMPILE);

    Espero ter ajudado,

    Se a resposta foi útil, classifique-a


    Att,
    Marcos Freccia [MTA|MCTS|MCITP|MCT SQL Server 2008]
    Blog|Twitter
    Assine também os feeds clicando aqui

    • Marcado como Resposta VictorMLima quinta-feira, 17 de janeiro de 2013 15:32
    quinta-feira, 17 de janeiro de 2013 13:18
  • Muito obrigado Marcos, sua pergunta me deu a resposta...kkkk

    INDEX ID 9 

    é um índice de um FK.

    Rodei o comando abaixo para retirar a compressão deste indice e tudo foi resolvido.

    ALTER INDEX IDX_XXXXXXXX ON <Table Name>
    REBUILD WITH ( DATA_COMPRESSION = NONE ) ;
    GO

    Valeu cara

    Resolvido


    • Marcado como Resposta VictorMLima quinta-feira, 17 de janeiro de 2013 14:04
    quinta-feira, 17 de janeiro de 2013 14:04

Todas as Respostas

  • Olá Victor,

    Nunca passei por esse problema, mas aqui vai algumas questões que você verificar.

    1) O Build do seu SQL Server que está igual a 10.50.2500 é um SQL Server 2008 R2 SP1

    2) Esse segundo SQL Server 2008 R2 de Build 10.50.4270 está no SQL Server 2008 R2 SP2 CU4. 

    3) Estão diferentes, mas como você mesmo falou não encontrou nada, mas eu mesmo assim tentaria realizar a atualização pelo menos para o Service Pack 2.

    4) Essa tabela está particionada? Existe mais de uma partição?

    Execute essa query abaixo no seu banco de dados e procure pela tabela que você alega a compressão e verifique se nessa query ainda consta como compressed

    -- Get Table names, row counts, and compression status for clustered index or heap
    SELECT OBJECT_NAME(object_id) AS [ObjectName], 
    SUM(Rows) AS [RowCount], data_compression_desc AS [CompressionType]
    FROM sys.partitions WITH (NOLOCK)
    WHERE index_id < 2 --ignore the partitions from the non-clustered index if any
    AND OBJECT_NAME(object_id) NOT LIKE N'sys%'
    AND OBJECT_NAME(object_id) NOT LIKE N'queue_%' 
    AND OBJECT_NAME(object_id) NOT LIKE N'filestream_tombstone%' 
    AND OBJECT_NAME(object_id) NOT LIKE N'fulltext%'
    AND OBJECT_NAME(object_id) NOT LIKE N'ifts_comp_fragment%'
    GROUP BY object_id, data_compression_desc
    ORDER BY SUM(Rows) DESC OPTION (RECOMPILE);

    Espero ter ajudado,

    Se a resposta foi útil, classifique-a


    Att,
    Marcos Freccia [MTA|MCTS|MCITP|MCT SQL Server 2008]
    Blog|Twitter
    Assine também os feeds clicando aqui

    • Marcado como Resposta VictorMLima quinta-feira, 17 de janeiro de 2013 15:32
    quinta-feira, 17 de janeiro de 2013 13:18
  • Olá Marcos, muito obrigado pela resposta

    Os builds estão diferentes. Farei atualização no fim de semana, mas não acredito que seja problema de versão. 

    A tabela não está particionada.

    E a query que você me passou mostra como se a tabela não tivesse compressão, porém a query abaixo ainda mostra a compressão tipo PAGE

    SELECT 
    SCHEMA_NAME(sys.objects.schema_id) AS [SchemaName] 
    ,OBJECT_NAME(sys.objects.object_id) AS [ObjectName] 
    ,[rows] 
    ,[data_compression_desc] 
    ,[index_id] as [IndexID_on_Table]
    FROM sys.partitions
    INNER JOIN sys.objects
    ON sys.partitions.object_id = sys.objects.object_id 
    WHERE data_compression > 0 
    AND SCHEMA_NAME(sys.objects.schema_id) <> 'SYS' 
    ORDER BY SchemaName, ObjectName

    E se verifico features do enterprise, ainda aparece a compressão

    select *
    from sys.dm_db_persisted_sku_features

    quinta-feira, 17 de janeiro de 2013 13:43
  • Victor,

    Qual o index_id que está retornando?



    Att,
    Marcos Freccia [MTA|MCTS|MCITP|MCT SQL Server 2008]
    Blog|Twitter
    Assine também os feeds clicando aqui

    quinta-feira, 17 de janeiro de 2013 13:46
  • Muito obrigado Marcos, sua pergunta me deu a resposta...kkkk

    INDEX ID 9 

    é um índice de um FK.

    Rodei o comando abaixo para retirar a compressão deste indice e tudo foi resolvido.

    ALTER INDEX IDX_XXXXXXXX ON <Table Name>
    REBUILD WITH ( DATA_COMPRESSION = NONE ) ;
    GO

    Valeu cara

    Resolvido


    • Marcado como Resposta VictorMLima quinta-feira, 17 de janeiro de 2013 14:04
    quinta-feira, 17 de janeiro de 2013 14:04
  • Olá Victor,

    Não esqueça de marcar as demais respostas como util, ou propor como resposta.

    Obrigado.


    Att,
    Marcos Freccia [MTA|MCTS|MCITP|MCT SQL Server 2008]
    Blog|Twitter
    Assine também os feeds clicando aqui

    quinta-feira, 17 de janeiro de 2013 15:27