Indeks Columnstore di read_only filegroup mencegah CheckDB

15

Tampaknya mengatur grup fileg untuk read_onlymencegah dbcc checkdbseluruh database jika grup fileg berisi indeks toko kolom. Ketika mencoba menjalankan checkdbatau checkfilegroup( untuk setiap grup file dalam database, termasuk sekunder baca-tulis dan[PRIMARY] ), kesalahan di bawah ini dikembalikan ...

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.

Apakah ada metode yang didukung untuk memiliki data toko kolom di grup-baca read-only? Atau apakah saya dilarang melakukan pemeriksaan integritas dalam skenario ini?

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

Penafian: posting silang ke forum-forum teknologi

Peter Vandivier
sumber

Jawaban:

12

Masalah terjadi ketika DBCC mencoba memverifikasi bitmap yang dihapus untuk tabel toko kolom read-only.

Bitmap yang dihapus disimpan pada grup file yang sama dengan tabel kolom toko. Mereka melacak baris yang dihapus secara logis dari grup baris terkompresi.

Sejauh yang saya tahu, semuanya diatur dengan benar dalam tabel sistem internal (pada SQL Server 2017 CU3), dan sebagian besar kode DBCC dengan benar bertanggung jawab atas rowset tersembunyi yang menyimpan bitmap yang dihapus di kolom storestore.

Untuk beberapa alasan, pemeriksaan untuk grup file offline atau hanya-baca menghasilkan pengecualian yang tidak ditangani:

Tumpukan panggilan

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.

Pemeriksaan offline / read-only yang sama dilakukan beberapa kali sebelumnya dalam pemrosesan DBCC (ketika fakta sedang dikumpulkan) tanpa masalah.

Masalah terjadi ketika DBCC CHECKDBatau DBCC FILEGROUPdijalankan (pada filegroup apa pun), atau DBCC CHECKTABLEdiminta untuk memeriksa tabel penyimpanan kolom read-only tertentu. Tak satu pun dari ini akan menghasilkan kondisi kesalahan fatal yang mencegah sisa pemeriksaan DBCC berjalan, jadi ini harus bug.


Atau apakah saya dilarang melakukan pemeriksaan integritas dalam skenario ini?

Sebagai solusinya, jalankan DBCC CHECKFILEGROUPfilegroup kolomstore segera sebelum dibuat read-only (atau dijalankan DBCC CHECKDBpada waktu itu) lalu:

  1. DBCC CHECKALLOC pada database
  2. Lari DBCC CHECKCATALOG
  3. Jalankan DBCC CHECKTABLEuntuk setiap tabel (tidak termasuk tabel kolom toko di grup baca-saja)
  4. Anda mungkin juga ingin menjalankan DBCC CHECKCONSTRAINTS.

Lihat Opsi Pemeriksaan Konsistensi untuk VLDB oleh Paul Randal dan Tanya Jawab DBCC CHECKDB selama beberapa hari .

Paul White Reinstate Monica
sumber
9

Pertama, terima kasih atas informasi dan kode / situasi yang mereproduksi.

Saya sudah mengambil ini dan mengajukan item internal, sudah ditugaskan dan akan segera dilihat.

Anda dapat memilih kerja di filegroup untuk read_only mencegah checkbb dbcc dari berjalan di situs umpan balik SQL Server.

Saya akan memperbarui jawaban ini dengan informasi lebih lanjut saat tersedia.

Sean mengatakan Hapus Sara Chipps
sumber