Apakah Informasi dalam sys.dm_db_index_usage_stats dapat diandalkan

8

Saya mengarsipkan data dari sistem lama yang tidak memiliki dokumentasi. Beruntung saya...

Saya ingin mencari tahu kapan tabel dibuat, diakses terakhir dll. Dapatkah saya percaya bahwa pertanyaan ini akan memberi saya jawaban yang benar atau apakah ada beberapa parameter yang pertama kali harus saya periksa? SQL Server 2008 R2:

 SELECT t.Name AS Tabelname, p.rows AS NoOfRows, MAX(us.last_user_lookup) AS LastUsed, t.create_date AS CreatedDate
FROM sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
LEFT JOIN --A lot of the tables did not have any records in this table
    sys.dm_db_index_usage_stats as us ON t.OBJECT_ID = us.OBJECT_ID
GROUP BY t.Name, p.rows, create_date
ORDER BY MAX(us.last_user_lookup) DESC
Colin 't Hart
sumber

Jawaban:

15

Tidak.

The sys.dm_db_index_usage_statpandangan hanya mencerminkan, di terbaik, data sejak startup terakhir basis data (contoh terakhir startup, atau terakhir kali DB dibawa online). Selanjutnya entri dapat dihapus di bawah tekanan memori. Ini akan memberikan hasil positif yang akurat (jika tabel memiliki statistik bukan nol maka itu digunakan)) tetapi dapat memberikan negatif palsu (0 penggunaan dalam statistik mungkin tidak mencerminkan penggunaan sebenarnya). Juga ada banyak sistem yang menggunakan tabel tertentu hanya sekali per minggu, sekali per bulan atau bahkan sekali per tahun.

Remus Rusanu
sumber
3

Berikut adalah satu lagi alasan mengapa Anda tidak dapat secara buta mengandalkan DMV sys.dm_index_usage_stats. sys.dm_db_index_usage_stats tidak bisa diperbarui setelah indeks digunakan hanya untuk statistik yang terkait dengan kolom yang diindeks. Paul menunjukkan ini di tautannya.

Apa yang sys.dm_index_usage_stats DMV tidak memberitahu Anda

Anda juga ingin membaca

Artikel ini tentang statistik penggunaan indeks DMV

Selain itu IMO Saya tidak berpikir dengan menggunakan DMV ada cara SEMPURNA untuk mengetahui kapan tabel terakhir digunakan. I Belive menggunakan Profiler trace atau Extended event trace akan menjadi opsi yang lebih baik. Meskipun profiler dapat menyebabkan beban tetapi penelusuran sisi server adalah pilihan yang baik.

Shanky
sumber