Нашел их.
Создайте таблицу с простым объектом статистики.
CREATE DATABASE splunge;
GO
USE splunge;
GO
CREATE TABLE dbo.foo(bar INT, munge INT);
GO
CREATE STATISTICS x ON dbo.foo(bar);
CREATE STATISTICS y ON dbo.foo(munge);
GO
INSERT dbo.foo SELECT s1.[object_id], s2.[object_id]
FROM sys.objects AS s1
CROSS JOIN sys.objects AS s2;
GO
UPDATE STATISTICS dbo.foo;
GO
Подключите с помощью ЦАП ( ADMIN:Server[\instance]
).
Запустите следующие запросы:
DBCC SHOW_STATISTICS('dbo.foo', 'x') WITH STATS_STREAM;
DBCC SHOW_STATISTICS('dbo.foo', 'y') WITH STATS_STREAM;
SELECT name, imageval
FROM sys.stats AS s
INNER JOIN sys.sysobjvalues AS o
ON s.object_id = o.objid
AND s.stats_id = o.subobjid
WHERE
s.object_id = OBJECT_ID('dbo.foo');
Вы заметите, что imageval
для каждого объекта статистики не то же самое, что у объекта статистики, но он содержит объект статистики - это просто смещение. В моей системе это дало это для x (я явно обрезал немало битов):
0x0100...bunch of chars...000007000000C4E1BE00EEA0...rest the same
0x07000000C4E1BE00EEA0...rest the same
И это для вас:
0x0100...bunch of chars...430007000000C7E1BE00EEA0...rest the same
0x07000000C7E1BE00EEA0...rest the same
То же самое относится и к индексной статистике.
Вероятно, вы могли бы провести дальнейшую проверку этого с помощью ряда запросов с использованием DBCC
команд. Сначала найдите страницы, связанные с кластерным индексом sys.sysobjvalues
(подставьте имя вашей базы данных):
DBCC IND('splunge', 'sys.sysobjvalues', 1);
В результате вы получите список страниц, которые вам интересны PageType = 1
. С новой базой данных вы сможете найти эту информацию на одной из страниц с самыми высокими PagePID
значениями. Например, в моей системе это была страница 281, поэтому я посмотрел поближе на эту страницу:
DBCC TRACEON(3604);
DECLARE @dbid INT = DB_ID();
DBCC PAGE(@dbid, 1, 281, 3);
DBCC TRACEOFF(3604);
Конечно же, я нашел данные в слоте 17:
(В больших базах данных вам, возможно, придется выполнять гораздо больше операций поиска и клевания, поскольку нет гарантии, что даже новый объект статистики попадет на новую (er) страницу.)
Попробуйте это дома, но есть причина, по которой вам нужно подключиться к ЦАП. Мне, конечно, было бы интересно узнать, что вы собираетесь делать с этой информацией, которую вы не можете сделать с DBCC SHOW_STATISTICS
выводом.
Обратите внимание, что это, конечно, не пытается декодировать, STATS_STREAM
чтобы предоставить гистограмму или другую информацию, и я не смог найти никаких доказательств того, что табличный вывод DBCC SHOW_STATISTICS ... WITH HISTOGRAM
хранится где-либо в табличном формате. У Джо Чанга есть некоторая информация о декодировании, если это то, что вам нужно. Я не думаю, что это то, что вы хотели бы сделать в запросе - просто используйте DBCC
.
STATS_STREAM
я никогда не изучал, находится ли это в самом файле.