พบพวกเขา
สร้างตารางด้วยวัตถุสถิติอย่างง่าย
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
เชื่อมต่อโดยใช้ DAC ( 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
สำหรับวัตถุสถิติแต่ละรายการนั้นไม่เหมือนกับสถิติ Blob แต่มันมีสถิติ Blob ซึ่งเป็นเพียงการชดเชย ในระบบของฉันมันให้สิ่งนี้สำหรับ x (ฉันเห็นได้ชัดว่าตัดบิตบิตยุติธรรม):
0x0100...bunch of chars...000007000000C4E1BE00EEA0...rest the same
0x07000000C4E1BE00EEA0...rest the same
และนี่สำหรับ y:
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))
ไปข้างหน้าและลองทำเองที่บ้าน แต่มีเหตุผลที่คุณต้องเชื่อมต่อกับ DAC สำหรับสิ่งนี้ ฉันอยากรู้อยากเห็นแน่นอนว่าคุณจะทำอย่างไรกับข้อมูลนี้ที่คุณไม่สามารถทำได้ด้วยDBCC SHOW_STATISTICS
ผลลัพธ์
โปรดทราบว่าหลักสูตรนี้ไม่ได้พยายามถอดรหัสSTATS_STREAM
เพื่อให้ฮิสโตแกรมหรือข้อมูลอื่น ๆ และฉันไม่สามารถหาหลักฐานใด ๆ ที่แสดงว่าการส่งออกตารางของDBCC SHOW_STATISTICS ... WITH HISTOGRAM
ถูกเก็บไว้ที่ใดก็ได้ในรูปแบบตาราง Joe Chang มีข้อมูลบางอย่างเกี่ยวกับการถอดรหัสหากเป็นสิ่งที่คุณต้องการ ผมไม่คิดว่ามันเป็นสิ่งที่คุณต้องการจะทำในแบบสอบถาม - DBCC
เพียงแค่ใช้
STATS_STREAM
ฉันไม่เคยตรวจสอบว่านี่เป็นสิ่งที่สามารถค้นหาได้ในไฟล์เอง