quarta-feira, 9 de janeiro de 2013

DBCC PAGE – bug com índice filtrado

Post rápido...
Gravando o treinamento on-demand de indexação eu me deparei com um possível bug do DBCC PAGE, onde ele formata incorretamente a saída de uma página do índice cluster, quando criamos um índice não-cluster filtrado na mesma tabela.
O Fabiano Amorim reproduziu e o Paul Randall também, então é um bug. O fato de não ser um comando documentado não sei se vai ganhar muita atenção no Connect, mas registrei uma entrada mesmo assim: https://connect.microsoft.com/SQLServer/feedback/details/776144/dbcc-page-incorrect-output-with-filtered-indexes.
Se quiser reproduzir o problema, o script está aqui:
USE tempdb
GO

SELECT @@version

IF OBJECT_ID('dbo.MyTable', 'U') IS NOT NULL
      DROP TABLE dbo.MyTable
GO

CREATE TABLE dbo.MyTable (
      ID INT IDENTITY NOT NULL PRIMARY KEY
      , Name CHAR(100) NOT NULL DEFAULT ('DBCC PAGE')
      , SomeDate DATETIME2 NOT NULL DEFAULT(SYSDATETIME())
)
GO

INSERT INTO dbo.MyTable DEFAULT VALUES
GO 30000

INSERT INTO dbo.MyTable ( Name, SomeDate )
SELECT Name, DATEADD(YY, -1, SomeDate)
FROM dbo.MyTable
GO

SELECT
      OBJECT_NAME(object_id) AS ObjectName
      , AU.*
      , P.*
FROM SYS.system_internals_allocation_units AS AU
INNER JOIN SYS.Partitions AS P
ON AU.Container_id = P.Partition_id
WHERE Object_ID IN (object_id('MyTable'))
ORDER BY object_id, type
GO

DBCC TRACEON(3604)
DBCC PAGE(Tempdb, 1, 1383, 3)
GO

-- output ok

CREATE NONCLUSTERED INDEX idxNCL_MyTable_SomeDate
ON dbo.MyTable (SomeDate)
WHERE SomeDate > '2013-01-01'
go

-- Same root page for CL, as expected
SELECT
      OBJECT_NAME(object_id) AS ObjectName
      , AU.*
      , P.*
FROM SYS.system_internals_allocation_units AS AU
INNER JOIN SYS.Partitions AS P
ON AU.Container_id = P.Partition_id
WHERE Object_ID IN (object_id('MyTable'))
ORDER BY object_id, type
GO

DBCC PAGE(Tempdb, 1, 1383, 3)
GO

-- output not ok

DROP INDEX MyTable.idxNCL_MyTable_SomeDate

-- output ok again
DBCC PAGE(Tempdb, 1, 1383, 3)
GO

Abraços,
sr. Nimbus Serviços em Tecnologia - www.srnimbus.com.br

Nenhum comentário:

Postar um comentário