我有一个空间索引用于该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在表'sys.extended_index_xxx_384000'(对象ID xxx)中发现了0个分配错误和2个一致性错误。
维修等级为repair_rebuild
。
删除并重新创建索引不会删除这些损坏报告。没有EXTENDED_LOGICAL_CHECKS
但没有DATA_PURITY
错误,则不会报告。
同样,CHECKTABLE
此表花费45分钟,尽管它的CI大小为30 MB,大约有3万行。该表中的所有数据都是点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)。
我用表和数据脚本编写表,并使用新鲜的DB执行。同样的错误。CHECKDB还具有45分钟的惊人运行时间。我使用SQL Profiler捕获了CHECKDB查询计划。它具有错误引导的循环连接,显然导致过多的运行时间。该计划在表的行数中具有二次运行时间!双嵌套扫描循环联接。
清除所有非空间索引不会更改任何内容。