Ho un indice spaziale per il quale DBCC CHECKDB
riporta corruzioni:
DBCC CHECKDB(MyDB)
WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS, ALL_ERRORMSGS, TABLERESULTS
L'indice spaziale, l'indice XML o la vista indicizzata 'sys.extended_index_xxx_384000' (ID oggetto xxx) non contiene tutte le righe prodotte dalla definizione della vista. Ciò non rappresenta necessariamente un problema di integrità con i dati in questo database.
L'indice spaziale, l'indice XML o la vista indicizzata 'sys.extended_index_xxx_384000' (ID oggetto xxx) contiene righe che non sono state prodotte dalla definizione della vista. Ciò non rappresenta necessariamente un problema di integrità con i dati in questo database.
CHECKDB ha trovato 0 errori di allocazione e 2 errori di coerenza nella tabella 'sys.extended_index_xxx_384000' (ID oggetto xxx).
Il livello di riparazione è repair_rebuild
.
Eliminare e ricreare l'indice non rimuove questi rapporti di corruzione. Senza EXTENDED_LOGICAL_CHECKS
ma con DATA_PURITY
l'errore non viene segnalato.
Inoltre, CHECKTABLE
questa tabella richiede 45 minuti, sebbene il relativo elemento della configurazione abbia una dimensione di 30 MB e vi siano circa 30.000 righe. Tutti i dati in quella tabella sono geography
dati puntuali .
Questo comportamento è previsto in qualche circostanza? Dice "Questo non rappresenta necessariamente un problema di integrità". Cosa dovrei fare? CHECKDB
sta fallendo, il che è un problema.
Questo script riproduce il problema:
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
Questa è la versione 12.0.4427.24 (SQL Server 2014 SP1 CU3).
Ho scritto la tabella con schema e dati, eseguire DB fresco, eseguire. Stesso errore CHECKDB ha anche questo incredibile tempo di esecuzione di 45 minuti. Ho acquisito il piano di query CHECKDB utilizzando SQL Profiler. Ha un loop loop mal guidato che sembra causare un'eccessiva durata. Il piano ha un tempo di esecuzione quadratico nel numero di righe della tabella! Unisci loop di scansione nidificati.
La cancellazione di tutti gli indici non spaziali non cambia nulla.