Индекс Columnstore в файловой группе read_only предотвращает CheckDB

15

Похоже, установка файловой группы read_onlyпредотвращает dbcc checkdbдля всей базы данных, если файловая группа содержит индекс columnstore. При попытке запустить checkdbили checkfilegroup( для любой файловой группы в базе данных, включая вторичные файлы для чтения и записи и[PRIMARY] ), возвращается ошибка ниже ...

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.

Существует ли поддерживаемый способ хранения данных columnstore в файловой группе только для чтения? Или я исключен из проверки целостности в этом сценарии?

репродукция

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

Отказ от ответственности: кросс- посты на форумах Technet

Питер Вандивье
источник

Ответы:

12

Проблема возникает, когда DBCC пытается проверить удаленное растровое изображение для таблицы columnstore только для чтения.

Удаленные растровые изображения хранятся в той же файловой группе, что и таблица columnstore. Они отслеживают строки, логически удаленные из сжатых групп строк.

Насколько я могу судить, все организовано правильно во внутренних системных таблицах (в SQL Server 2017 CU3), и большая часть кода DBCC правильно учитывает скрытые наборы строк, в которых хранятся удаленные битовые карты columnstore.

По какой-то причине проверка автономных или доступных только для чтения групп файлов приводит к необработанному исключению:

Стек вызовов

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.

Та же проверка в автономном режиме и только для чтения выполняется несколько раз раньше при обработке DBCC (при сборе фактов) без проблем.

Проблема возникает, когда DBCC CHECKDBлибо DBCC FILEGROUPвыполняется (в любой файловой группе), либо DBCC CHECKTABLEему предлагается проверить определенную таблицу столбцов только для чтения. Ни один из них не должен вызывать фатальную ошибку, которая препятствует выполнению остальных проверок DBCC, поэтому это должно быть ошибкой.


Или я исключен из проверки целостности в этом сценарии?

В качестве обходного пути запустите DBCC CHECKFILEGROUPфайловую группу columnstore непосредственно перед тем, как она станет доступной только для чтения (или запустится DBCC CHECKDBв то время), а затем:

  1. DBCC CHECKALLOC в базе данных
  2. Бегать DBCC CHECKCATALOG
  3. Выполнить DBCC CHECKTABLEдля каждой таблицы (исключая таблицы columnstore в файловой группе только для чтения)
  4. Вы можете также хотеть бежать DBCC CHECKCONSTRAINTS.

См. Варианты проверки согласованности для VLDB Пола Рэндала и разделение вопросов и ответов DBCC CHECKDB за несколько дней .

Пол Уайт восстановил Монику
источник
9

Во-первых, спасибо за информацию и код / ​​ситуацию с воспроизведением.

Я взял это и подал внутренний элемент, он был назначен и будет рассмотрен в ближайшее время.

Вы можете проголосовать за работу в файловой группе, чтобы read_only не разрешил запуск dbcc checkdb на сайте обратной связи SQL Server.

Я дополню этот ответ дополнительной информацией по мере ее появления.

Шон говорит Удалить Сару Чиппс
источник