Saya memiliki indeks spasial yang DBCC CHECKDB
melaporkan korupsi:
DBCC CHECKDB(MyDB)
WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS, ALL_ERRORMSGS, TABLERESULTS
Indeks spasial, indeks XML atau tampilan terindeks 'sys.extended_index_xxx_384000' (objek ID xxx) tidak mengandung semua baris yang dihasilkan oleh definisi tampilan. Ini tidak selalu mewakili masalah integritas dengan data dalam database ini.
Indeks spasial, indeks XML atau tampilan terindeks 'sys.extended_index_xxx_384000' (objek ID xxx) berisi baris yang tidak diproduksi oleh definisi tampilan. Ini tidak selalu mewakili masalah integritas dengan data dalam database ini.
CHECKDB menemukan 0 kesalahan alokasi dan 2 kesalahan konsistensi dalam tabel 'sys.extended_index_xxx_384000' (objek ID xxx).
Tingkat perbaikan adalah repair_rebuild
.
Menjatuhkan dan membuat ulang indeks tidak menghapus laporan korupsi ini. Tanpa EXTENDED_LOGICAL_CHECKS
tetapi dengan DATA_PURITY
kesalahan tidak dilaporkan.
Juga, CHECKTABLE
membutuhkan 45 menit untuk tabel ini walaupun CI-nya berukuran 30 MB dan ada sekitar 30k baris. Semua data dalam tabel itu adalah geography
data titik .
Apakah perilaku ini diharapkan dalam keadaan apa pun? Dikatakan "Ini tidak selalu mewakili masalah integritas". Apa yang harus aku lakukan? CHECKDB
gagal yang merupakan masalah.
Script ini mereproduksi masalah:
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
Ini adalah versi 12.0.4427.24 (SQL Server 2014 SP1 CU3).
Saya menulis tabel dengan skema dan data, DB baru, jalankan. Kesalahan yang sama. CHECKDB juga memiliki runtime 45 menit yang luar biasa ini. Saya menangkap rencana permintaan CHECKDB menggunakan SQL Profiler. Ini memiliki loop bergabung sesat tampaknya menyebabkan runtime yang berlebihan. Paket memiliki runtime kuadrat dalam jumlah baris tabel! Loop pemindaian bersarang ganda bergabung.
Menghapus semua indeks non-spasial tidak mengubah apa pun.