Cara paling efisien untuk mendapatkan statistik di seluruh database SQL Server


8

Yang ingin saya lakukan adalah meninjau basis data kami dan mengunci semua auto-shrinkpengaturan, serta mendapatkan pegangan di mana basis data / tabel sangat terfragmentasi.

Apakah ada skrip tertentu yang dapat saya jalankan untuk mendapatkan ide bagus per basis data?

Saya tahu saya bisa menjalankan yang berikut ini pada tingkat per tabel (setidaknya SQL Server 2005):

DBCC SHOWCONTIG ('DB.TABLE');

Tapi apa yang bisa saya jalankan untuk menunjukkan kepada saya semua tabel dalam database?

Terima kasih

Jawaban:


6

Untuk memeriksa fragmentasi pada 2005/2008 Anda dapat menggunakan skrip berikut. Anda perlu mengatur @DBdan @Tablenilai - nilai. Jika Anda mendefinisikannya NULLmaka akan berjalan di semua database dan / atau semua tabel. Jika Anda melakukan satu db pastikan Anda mengeksekusi dalam konteks DB itu ( USE MyDB).

SELECT 
    object_name(IPS.object_id) AS [Table Name], 
    SI.name AS [Index Name], 
        CASE IPS.Index_type_desc
            WHEN 'CLUSTERED INDEX' THEN 'Clustered'
            ELSE 'Non-Clustered'
        END AS 'Index Type', 
    IPS.avg_fragmentation_in_percent as 'Avg Fragmentation (%)', 
    IPS.avg_fragment_size_in_pages as 'Avg Frag Size (pages)',
    IPS.page_count as 'Page Count', 
    IPS.forwarded_record_count as 'Forwarded Records',
    --IPS.avg_page_space_used_in_percent as 'Avg Page Space Used (%)', 
    --IPS.record_count as 'Record Count', 
    --IPS.ghost_record_count as 'Ghost Record Count',
    IPS.fragment_count as 'Fragment Count'
FROM sys.dm_db_index_physical_stats
    (
        db_id(@DB), 
        OBJECT_ID(@Table), 
        NULL,
        NULL , 
        'LIMITED'
    ) as IPS
JOIN sys.indexes as SI WITH (nolock) 
    ON IPS.object_id = SI.object_id 
    AND IPS.index_id = SI.index_id
ORDER BY 1,3,5

Untuk autoshrink, Anda cukup memeriksa master.sys.databases:

select * from master.sys.databases
where is_auto_shrink_on = 1

+1, terima kasih apa yang saya butuhkan. Namun 'satu-satunya' saya adalah, saya melihat beberapa basis data tidak membuahkan hasil sama sekali, apakah hanya karena mereka perlu memiliki statistik fisik dalam sysdb?
Jakub

@ Jakub - ya Skrip ini juga mengabaikan tumpukan (tabel yang tidak diindeks), jadi jika tidak ada tabel yang diindeks dalam DB, ia juga tidak akan muncul.
JNK
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.