L'indice Columnstore nel filegroup read_only impedisce CheckDB


15

Sembra impostare un filegroup per read_onlyimpedire dbcc checkdbl'intero database se il filegroup contiene un indice columnstore. Quando si tenta di eseguire checkdbo checkfilegroup( per qualsiasi filegroup nel database, inclusi i secondari di lettura e scrittura e[PRIMARY] ), viene restituito l'errore seguente ...

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.

Esiste un metodo supportato per avere dati columnstore in un filegroup di sola lettura? O sono escluso dai controlli di integrità in questo scenario?

Repro

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

Dichiarazione di non responsabilità: invio incrociato ai forum technet

Risposte:


12

Il problema si verifica quando DBCC tenta di verificare una bitmap eliminata per una tabella columnstore di sola lettura.

Le bitmap eliminate vengono archiviate nello stesso filegroup della tabella columnstore. Tracciano le righe eliminate logicamente dai gruppi di righe compresse.

Per quanto ne so, tutto è organizzato correttamente nelle tabelle di sistema interne (su SQL Server 2017 CU3) e la maggior parte del codice DBCC tiene correttamente conto dei set di righe nascosti che contengono le bitmap cancellate da columnstore.

Per qualche motivo, un controllo per gruppi di file offline o di sola lettura genera un'eccezione non gestita:

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.

Lo stesso controllo offline / di sola lettura viene eseguito più volte in precedenza nell'elaborazione DBCC (quando vengono raccolti i fatti) senza problemi.

Il problema si verifica quando DBCC CHECKDBo DBCC FILEGROUPviene eseguito (su qualsiasi filegroup) o DBCC CHECKTABLEviene richiesto di controllare una tabella columnstore di sola lettura specifica. Nessuno di questi dovrebbe produrre una condizione di errore fatale che impedisce l'esecuzione del resto dei controlli DBCC, quindi questo deve essere un bug.


O sono escluso dai controlli di integrità in questo scenario?

Come soluzione alternativa, esegui DBCC CHECKFILEGROUPil filegroup columnstore immediatamente prima che venga reso di sola lettura (o eseguito DBCC CHECKDBin quel momento), quindi:

  1. DBCC CHECKALLOC nel database
  2. Correre DBCC CHECKCATALOG
  3. Esegui DBCC CHECKTABLEper ogni tabella (escluse le tabelle columnstore su un filegroup di sola lettura)
  4. Potresti anche voler correre DBCC CHECKCONSTRAINTS.

Vedi le opzioni di controllo della coerenza per un VLDB di Paul Randal e il D&R Dividi DBCC CHECKDB per più giorni .


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.