web-dev-qa-db-fra.com

L'indice ColumnStore dans Read_only FileGroup prévient CheckDB

Il semble définir un groupe de fichiers sur read_only empêche dbcc checkdb Pour toute la base de données si le groupe de fichiers contient un indice de colonne. Lorsque vous essayez d'exécuter checkdb ou checkfilegroup ( pour tout fichier dans la base de données, y compris la lecture écrire des secondaires et [PRIMARY]), l'erreur ci-dessous est renvoyée ...

Msg 8921, Level 16, State 1, Line 24
Check terminated. A failure was detected while collecting facts. 
Possibly tempdb out of space or a system table is inconsistent. Check previous errors.

Existe-t-il une méthode prise en charge pour avoir des données de colonne dans un groupe de fichiers en lecture seule? Ou suis-je exclu des contrôles d'intégrité dans ce scénario?

Reproduire

create database check_fg_ro
go
use check_fg_ro
go
exec sp_changedbowner 'sa';
go
alter database check_fg_ro add filegroup check_fg_ro_2;
alter database check_fg_ro
    add file (
         name='check_fg_ro_2'
        ,filename='C:\check_fg_ro_2.ndf'
    ) to filegroup check_fg_ro_2;
go
create table foo ( 
    i int not null primary key
) on check_fg_ro_2;
go
create columnstore index ccix_foo on foo(i);
go
use master
go
alter database check_fg_ro modify filegroup check_fg_ro_2 read_only;
go
dbcc checkdb( check_fg_ro ) with no_infomsgs, all_errormsgs, extended_logical_checks;
/*
Msg 8921, Level 16, State 1, Line 24
Check terminated. A failure was detected while collecting facts. 
Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
*/
go

Disclaimer: Publié sur - Forums TechNet

15
Peter Vandivier

Le problème se produit lorsque DBCC essaie de vérifier un bitmap supprimé pour une table de colonne en lecture seule.

Les bitmaps supprimés sont stockés sur le même groupe de fichiers que la table de colonne. Ils suivent des lignes logiquement supprimées des groupes de lignes compressées.

Pour autant que je sache, tout est organisé correctement dans les tableaux du système interne (sur SQL Server 2017 CU3) et la plupart du code DBCC explique correctement les joints cachés qui contiennent les bitmaps supprimés de colonne supprimés.

Pour une raison quelconque, une vérification des groupes de fichiers hors ligne ou en lecture seule donne une exception non gérée:

Call stack

Msg 8921, Level 16, State 1, Line 69
Check terminated. A failure was detected while collecting facts.
Possibly tempdb out of space or a system table is inconsistent.
Check previous errors.

La même vérification hors ligne/lecture seule est effectuée plusieurs fois plus tôt dans le traitement DBCC (lorsque des faits sont collectés) sans problème.

Le problème se produit lorsque DBCC CHECKDB ou alors DBCC FILEGROUP est exécuté (sur n'importe quel groupe de fichiers) ou DBCC CHECKTABLE est invité à vérifier une table de colonne en lecture seule en lecture seule. Aucun de ceux-ci ne devrait produire une condition d'erreur fatale qui empêche le reste des contrôles DBCC en cours d'exécution, ce qui doit donc être un bug.


Ou suis-je exclu des contrôles d'intégrité dans ce scénario?

En tant que solution de contournement, courir DBCC CHECKFILEGROUP sur le groupe de fichiers ColumnStore immédiatement avant qu'il ne soit fait en lecture seule (ou exécutée DBCC CHECKDB à cette époque) alors:

  1. DBCC CHECKALLOC sur la base de données
  2. Cours DBCC CHECKCATALOG
  3. Cours DBCC CHECKTABLE Pour chaque table (à l'exclusion des tables de colonne sur un groupe de fichiers en lecture seule)
  4. Vous pouvez également vouloir courir DBCC CHECKCONSTRAINTS .

Voir Options de vérification de la cohérence pour un VLDB par Paul Randal et le Q & A divisant DBCC CheckDB sur plusieurs jours .

12
Paul White 9

Premièrement, merci pour les informations et le code de reproduction/situation.

J'ai pris cela et a déposé un élément interne, il a été attribué et sera examiné sous peu.

Vous pouvez voter pour le travail à FileGroup à lire_only empêche DBCC Checkdb de l'exécution sur le site de rétroaction SQL Server.

Je mettrai à jour cette réponse avec plus d'informations car il devient disponible.

9
Sean Gallardy