Tôi có một chỉ mục không gian để DBCC CHECKDB
báo cáo tham nhũng:
DBCC CHECKDB(MyDB)
WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS, ALL_ERRORMSGS, TABLERESULTS
Chỉ mục không gian, chỉ mục XML hoặc chế độ xem được lập chỉ mục 'sys.extends_index_xxx_384000' (ID đối tượng xxx) không chứa tất cả các hàng mà định nghĩa chế độ xem tạo ra. Điều này không nhất thiết thể hiện vấn đề toàn vẹn với dữ liệu trong cơ sở dữ liệu này.
Chỉ mục không gian, chỉ mục XML hoặc chế độ xem được lập chỉ mục 'sys.extends_index_xxx_384000' (ID đối tượng xxx) chứa các hàng không được tạo bởi định nghĩa chế độ xem. Điều này không nhất thiết thể hiện vấn đề toàn vẹn với dữ liệu trong cơ sở dữ liệu này.
CHECKDB đã tìm thấy 0 lỗi phân bổ và 2 lỗi nhất quán trong bảng 'sys.extends_index_xxx_384000' (ID đối tượng xxx).
Cấp sửa chữa là repair_rebuild
.
Bỏ và tạo lại chỉ mục không loại bỏ các báo cáo tham nhũng. Không có EXTENDED_LOGICAL_CHECKS
nhưng với DATA_PURITY
lỗi không được báo cáo.
Ngoài ra, CHECKTABLE
mất 45 phút cho bảng này mặc dù CI của nó có kích thước 30 MB và có khoảng 30k hàng. Tất cả dữ liệu trong bảng đó là geography
dữ liệu điểm .
Là hành vi này dự kiến trong bất kỳ trường hợp? Nó nói "Điều này không nhất thiết phải đại diện cho một vấn đề toàn vẹn". Tôi phải làm gì bây giờ? CHECKDB
thất bại đó là một vấn đề.
Kịch bản này tái tạo vấn đề:
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
Đây là phiên bản 12.0.4427.24 (SQL Server 2014 SP1 CU3).
Tôi viết kịch bản với lược đồ và dữ liệu, DB mới, thực thi. Cùng một lỗi. CHECKDB cũng có thời gian chạy đáng kinh ngạc là 45 phút. Tôi đã nắm bắt kế hoạch truy vấn CHECKDB bằng SQL Profiler. Nó có một vòng lặp sai lầm tham gia rõ ràng gây ra thời gian chạy quá mức. Kế hoạch có thời gian chạy bậc hai trong số lượng hàng của bảng! Vòng lặp quét lồng nhau tham gia.
Xóa tất cả các chỉ mục phi không gian không thay đổi bất cứ điều gì.