Menemukan mereka
Buat tabel dengan objek statistik sederhana.
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
Hubungkan menggunakan DAC ( ADMIN:Server[\instance]
).
Jalankan pertanyaan berikut:
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');
Anda akan mencatat bahwa imageval
untuk setiap objek statistik tidak sama dengan gumpalan stats, tetapi itu berisi gumpalan stats - itu hanya offset. Pada sistem saya ini menghasilkan ini untuk x (saya jelas terpotong sedikit bit):
0x0100...bunch of chars...000007000000C4E1BE00EEA0...rest the same
0x07000000C4E1BE00EEA0...rest the same
Dan ini untukmu:
0x0100...bunch of chars...430007000000C7E1BE00EEA0...rest the same
0x07000000C7E1BE00EEA0...rest the same
Hal yang sama berlaku untuk statistik berbasis indeks.
Anda mungkin bisa melakukan validasi lebih lanjut dengan serangkaian pertanyaan menggunakan DBCC
perintah. Pertama, cari halaman yang terlibat dengan indeks berkerumun di sys.sysobjvalues
(gantilah nama basis data Anda):
DBCC IND('splunge', 'sys.sysobjvalues', 1);
Hasilnya akan mencantumkan banyak halaman, Anda tertarik pada halaman PageType = 1
. Dengan database baru, Anda harus dapat menemukan info ini di salah satu halaman dengan nilai tertinggi PagePID
. Misalnya pada sistem saya ini halaman 281, jadi saya melihat lebih dekat ke halaman itu:
DBCC TRACEON(3604);
DECLARE @dbid INT = DB_ID();
DBCC PAGE(@dbid, 1, 281, 3);
DBCC TRACEOFF(3604);
Benar saja, saya menemukan data di slot 17:
(Pada basis data yang lebih besar, Anda mungkin harus melakukan lebih banyak perburuan dan mematuk, karena tidak ada jaminan bahwa objek statistik baru akan berakhir pada halaman (er) baru.)
Silakan dan coba ini di rumah, tetapi ada alasan Anda perlu terhubung dengan DAC untuk ini. Saya ingin tahu, tentu saja, apa yang akan Anda lakukan dengan informasi ini yang tidak dapat Anda lakukanDBCC SHOW_STATISTICS
output.
Perhatikan bahwa ini tentu saja tidak mencoba untuk memecahkan kode STATS_STREAM
untuk memberikan histogram atau informasi lainnya, dan saya tidak dapat menemukan bukti bahwa output tabular DBCC SHOW_STATISTICS ... WITH HISTOGRAM
disimpan di mana saja dalam format tabel. Joe Chang memiliki beberapa informasi tentang decoding jika itu yang Anda cari. Saya tidak berpikir itu adalah sesuatu yang ingin Anda lakukan dalam permintaan - cukup gunakan DBCC
.
STATS_STREAM
saya tidak pernah melihat apakah ini adalah sesuatu yang dapat ditemukan dalam file itu sendiri.