Apenas o checkdb físico está falhando, mas um completo é concluído com êxito

13

Estou executando o checkdb com a opção Physical_only e ele falha com vários erros, como abaixo:

Mensagem 8965, Nível 16, Estado 1, Linha 1
Erro de tabela: ID do objeto 1557580587, ID do índice 1, ID da partição 72057594088456192, ID da unidade de alocação 72057594177454080 (tipo dados em linha). O nó de dados fora da linha na página (1: 13282192), slot 3, ID do texto 6370769698816 é referenciado pela página (0: 0), slot 0, mas não foi visto na varredura.
Mensagem 8965, Nível 16, Estado 1, Linha 1
Erro de tabela: ID do objeto 1557580587, ID do índice 1, ID da partição 72057594088456192, ID da unidade de alocação 72057594177454080 (tipo dados em linha). O nó de dados fora da linha na página (1: 13282192), slot 5, ID do texto 6370769764352 é referenciado pela página (0: 0), slot 0, mas não foi visto na varredura.
O CHECKDB encontrou 0 erros de alocação e 5255 erros de consistência na tabela 'TableX' (ID do objeto 1557580587).
O CHECKDB encontrou 0 erros de alocação e 5255 erros de consistência no banco de dados 'DatabaseX' . repair_allow_data_loss é o nível mínimo de reparo para os erros encontrados pelo DBCC CHECKDB (DWH_LAND).

No entanto, o checkdb completo é bem-sucedido:

O CHECKDB encontrou 0 erros de alocação e 0 erros de consistência no banco de dados 'DatabaseX'. Execução do DBCC concluída. Se o DBCC imprimiu mensagens de erro, entre em contato com o administrador do sistema.


O TableX possui cerca de 200.000 linhas e agrupou o índice columnstore.
Estamos usando a seguinte versão do SQL Server:
Microsoft SQL Server 2017 (RTM-CU13) (KB4466404) - 14.0.3048.4

Devo me preocupar?

Andrzej Błoch
fonte

Respostas:

13

Sim, isso é um defeito no SQL Server 2017 até CU14. Houve um problema semelhante com os índices columnstore não clusterizados no SQL Server 2016 .

Está detalhado neste vídeo: Erro do CHECKDB com o SQL Server 2017 e os índices ColumnStore

Uma reprodução mais portátil do problema é esta:

SELECT *, CONVERT(NVARCHAR(MAX), m.text + m.text + m.text + m.text + m.text) AS texty
INTO dbo.corrupt
FROM sys.messages AS m;

CREATE CLUSTERED COLUMNSTORE INDEX cx_corrupt ON dbo.corrupt;

DBCC CHECKDB WITH PHYSICAL_ONLY;

DROP TABLE dbo.corrupt;
Erik Darling
fonte