Fand sie.
Erstellen Sie eine Tabelle mit einem einfachen Statistikobjekt.
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
Stellen Sie eine Verbindung mit dem DAC ( ADMIN:Server[\instance]
) her.
Führen Sie die folgenden Abfragen aus:
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');
Sie werden feststellen, dass imageval
für jedes Statistikobjekt nicht dasselbe gilt wie für das Statistik-Blob, es enthält jedoch das Statistik-Blob - es ist lediglich ein Versatz. Auf meinem System ergab sich folgendes für x (ich habe offensichtlich einiges abgeschnitten):
0x0100...bunch of chars...000007000000C4E1BE00EEA0...rest the same
0x07000000C4E1BE00EEA0...rest the same
Und das für Sie:
0x0100...bunch of chars...430007000000C7E1BE00EEA0...rest the same
0x07000000C7E1BE00EEA0...rest the same
Gleiches gilt für indexbasierte Statistiken.
Sie könnten dies wahrscheinlich mit einer Reihe von Abfragen unter Verwendung von DBCC
Befehlen überprüfen. Ermitteln Sie zunächst die Seiten, die am Clustered-Index beteiligt sind sys.sysobjvalues
(ersetzen Sie Ihren Datenbanknamen):
DBCC IND('splunge', 'sys.sysobjvalues', 1);
Das Ergebnis enthält eine Reihe von Seiten, an denen Sie interessiert sind PageType = 1
. Mit einer neuen Datenbank sollten Sie diese Informationen auf einer der Seiten mit den höchsten PagePID
Werten finden. Auf meinem System war dies beispielsweise Seite 281, also habe ich mir diese Seite genauer angesehen:
DBCC TRACEON(3604);
DECLARE @dbid INT = DB_ID();
DBCC PAGE(@dbid, 1, 281, 3);
DBCC TRACEOFF(3604);
Natürlich habe ich die Daten in Slot 17 gefunden:
(Bei größeren Datenbanken müssen Sie möglicherweise viel mehr suchen und picken, da nicht garantiert werden kann, dass auch ein neues Statistikobjekt auf einer neuen (er) Seite angezeigt wird.)
Probieren Sie dies zu Hause aus, aber es gibt einen Grund, warum Sie sich dafür mit dem DAC verbinden müssen. Ich wäre natürlich gespannt, was Sie mit diesen Informationen machen werden, die Sie mit der DBCC SHOW_STATISTICS
Ausgabe nicht machen könnten .
Beachten Sie, dass dies natürlich nicht versucht, das STATS_STREAM
Histogramm oder andere Informationen zu dekodieren , und ich konnte keine Beweise dafür finden, dass die tabellarische Ausgabe von DBCC SHOW_STATISTICS ... WITH HISTOGRAM
irgendwo im Tabellenformat gespeichert ist. Joe Chang hat einige Informationen zum Dekodieren, wenn Sie danach suchen. Ich glaube nicht, dass Sie das in einer Abfrage tun möchten - verwenden Sie einfach DBCC
.
STATS_STREAM
angezeigt, in der ich noch nie nachgesehen habe, ob dies in der Datei selbst auffindbar ist.