ฉันมีดัชนีเชิงพื้นที่ซึ่งDBCC CHECKDB
รายงานความเสียหาย:
DBCC CHECKDB(MyDB)
WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS, ALL_ERRORMSGS, TABLERESULTS
ดัชนีเชิงพื้นที่ดัชนี XML หรือมุมมองที่จัดทำดัชนี 'sys.extended_index_xxx_384000' (ID วัตถุ xxx) ไม่มีแถวทั้งหมดที่นิยามมุมมองสร้างขึ้น สิ่งนี้ไม่จำเป็นต้องแสดงถึงปัญหาด้านความสมบูรณ์ของข้อมูลในฐานข้อมูลนี้
ดัชนีปริภูมิดัชนี XML หรือมุมมองที่จัดทำดัชนี 'sys.extended_index_xxx_384000' (ID อ็อบเจ็กต์ xxx) มีแถวที่ไม่ได้สร้างขึ้นโดยการกำหนดมุมมอง สิ่งนี้ไม่จำเป็นต้องแสดงถึงปัญหาด้านความสมบูรณ์ของข้อมูลในฐานข้อมูลนี้
CHECKDB พบข้อผิดพลาดในการจัดสรร 0 ข้อและข้อผิดพลาดที่สอดคล้องกัน 2 ข้อในตาราง 'sys.extended_index_xxx_384000' (รหัสวัตถุ xxx)
repair_rebuild
ระดับการซ่อมเป็น
การปล่อยและสร้างดัชนีใหม่จะไม่ลบรายงานความเสียหายเหล่านี้ หากไม่มีEXTENDED_LOGICAL_CHECKS
แต่ด้วยDATA_PURITY
ข้อผิดพลาดจะไม่ถูกรายงาน
นอกจากนี้CHECKTABLE
ใช้เวลา 45 นาทีสำหรับตารางนี้แม้ว่า CI ของมันจะมีขนาด 30 MB และมีแถวประมาณ 30k ข้อมูลทั้งหมดในตารางนั้นเป็นgeography
ข้อมูลจุด
พฤติกรรมนี้คาดว่าจะเกิดขึ้นภายใต้สถานการณ์ใด ๆ หรือไม่? มันบอกว่า "สิ่งนี้ไม่จำเป็นต้องแสดงถึงปัญหาด้านความสมบูรณ์" ฉันควรจะทำอย่างไร? CHECKDB
ล้มเหลวซึ่งเป็นปัญหา
สคริปต์นี้สร้างปัญหาขึ้นอีกครั้ง:
CREATE TABLE dbo.Cities(
ID int NOT NULL,
Position geography NULL,
CONSTRAINT PK_Cities PRIMARY KEY CLUSTERED
(
ID ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
GO
INSERT dbo.Cities (ID, Position) VALUES (20171, 0xE6100000010C4E2B85402E424A40A07312A518C72A40)
GO
CREATE SPATIAL INDEX IX_Cities_Position ON dbo.Cities
(
Position
)USING GEOGRAPHY_AUTO_GRID
WITH (
CELLS_PER_OBJECT = 16, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
นี่คือรุ่น 12.0.4427.24 (SQL Server 2014 SP1 CU3)
ฉันสคริปต์ตารางด้วยสคีมาและข้อมูล, ฐานข้อมูลใหม่, รัน ข้อผิดพลาดเดียวกัน CHECKDB ยังมีรันไทม์ที่เหลือเชื่อนี้เป็นเวลา 45 นาที ฉันบันทึกแผนการสืบค้น CHECKDB โดยใช้ SQL Profiler มีการรวมวงที่เข้าใจผิดทำให้เกิดการรันไทม์มากเกินไป แผนมีรันไทม์กำลังสองในจำนวนแถวของตาราง! ซ้อนซ้อนการสแกนวนซ้ำกันเป็นสองเท่า
การล้างดัชนีที่ไม่ใช่เชิงพื้นที่ทั้งหมดจะไม่เปลี่ยนแปลงอะไรเลย