ดัชนี 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 ในกลุ่มไฟล์แบบอ่านอย่างเดียวหรือไม่? หรือฉันถูกกีดกันจากการตรวจสอบความสมบูรณ์ในสถานการณ์นี้?

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

ข้อจำกัดความรับผิดชอบ: โพสต์ข้ามไปยังฟอรัมเทคโน

คำตอบ:


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ถูกขอให้ตรวจสอบตาราง columnstore แบบอ่านอย่างเดียวโดยเฉพาะ สิ่งเหล่านี้ไม่ควรสร้างเงื่อนไขข้อผิดพลาดร้ายแรงที่ป้องกันส่วนที่เหลือของการตรวจสอบ DBCC ที่ทำงานอยู่ดังนั้นสิ่งนี้จะต้องเป็นข้อบกพร่อง


หรือฉันถูกกีดกันจากการตรวจสอบความสมบูรณ์ในสถานการณ์นี้?

เพื่อหลีกเลี่ยงปัญหาเรียกใช้DBCC CHECKFILEGROUPบนกลุ่มไฟล์ columnstore ทันทีก่อนที่จะสร้างเป็นแบบอ่านอย่างเดียว (หรือเรียกใช้DBCC CHECKDBในเวลานั้น) จากนั้น:

  1. DBCC CHECKALLOC บนฐานข้อมูล
  2. วิ่ง DBCC CHECKCATALOG
  3. เรียกใช้DBCC CHECKTABLEสำหรับแต่ละตาราง (ยกเว้นคอลัมน์ columnstore บนกลุ่มไฟล์แบบอ่านอย่างเดียว)
  4. DBCC CHECKCONSTRAINTSนอกจากนี้คุณยังอาจต้องการใช้

ดูความสอดคล้องตัวเลือกสำหรับ VLDB การตรวจสอบโดยพอล Randal และ Q & A แบ่ง DBCC CHECKDB มากกว่าหลายวัน


9

ก่อนอื่นขอขอบคุณสำหรับข้อมูลและรหัส / สถานการณ์การทำซ้ำ

ฉันได้ทำสิ่งนี้แล้วยื่นรายการภายในมันถูกกำหนดแล้วและจะถูกดูในไม่ช้า

คุณสามารถลงคะแนนให้ทำงานที่กลุ่มไฟล์เพื่อ read_only ป้องกัน dbcc checkdb ไม่ให้ทำงานบนไซต์ผลตอบรับของ SQL Server

ฉันจะอัปเดตคำตอบนี้พร้อมข้อมูลเพิ่มเติมเมื่อพร้อมใช้งาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.