Знайшов їх.
Створіть таблицю з простим об’єктом статистики.
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:
(На великих базах даних вам, можливо, доведеться зробити набагато більше полювання та клювання, оскільки немає гарантії, що навіть новий об’єкт статистики опиниться на новій (ер) сторінці.)
Вперед і спробуйте це вдома, але для цього вам потрібно зв’язатися з ЦАП. Мені було б цікаво дізнатись, звичайно, що ви збираєтеся робити з цією інформацією, яку ви не могли зробити з DBCC SHOW_STATISTICS
результатами.
Зауважте, що це, звичайно, не намагається розшифрувати STATS_STREAM
для надання гістограми чи іншої інформації, і я не міг знайти жодних доказів того, що табличний вихід DBCC SHOW_STATISTICS ... WITH HISTOGRAM
зберігається в будь-якому місці у форматі таблиці. Джо Чанг має деяку інформацію про розшифровку, якщо це те, що ви хочете. Я не думаю, що це щось, що ви хочете зробити в запиті - просто використовуйте DBCC
.
STATS_STREAM
я ніколи не розглядав, чи є це щось виправдане у самому файлі.