Le moyen le plus efficace pour obtenir des statistiques sur une base de données SQL Server entière

8

Ce que je cherche à faire est d'examiner nos bases de données et de verrouiller tous les auto-shrinkparamètres, ainsi que de savoir quelles bases de données / tables sont très fragmentées.

Existe-t-il un script particulier que je peux exécuter pour avoir une bonne idée par base de données?

Je sais que je peux exécuter ce qui suit au niveau de chaque table (SQL Server 2005 au moins):

DBCC SHOWCONTIG ('DB.TABLE');

Mais que puis-je exécuter pour me montrer toutes les tables d'une base de données?

Merci

Jakub
la source

Réponses:

6

Pour vérifier la fragmentation en 2005/2008, vous pouvez utiliser le script suivant. Vous devez définir les valeurs @DBet @Table. Si vous les définissez comme NULLalors, il s'exécutera sur toutes les bases de données et / ou toutes les tables. Si vous effectuez une seule base de données, assurez-vous de l'exécuter dans le contexte de cette base de données ( 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

Pour le rétrécissement automatique, vous pouvez simplement vérifier master.sys.databases:

select * from master.sys.databases
where is_auto_shrink_on = 1
JNK
la source
+1, merci juste ce dont j'ai besoin. Mon 'seulement' est cependant, je vois que certaines bases de données ne retournent aucun résultat, est-ce seulement parce qu'elles ont besoin d'avoir des statistiques physiques dans la sysbase de données?
Jakub
@Jakub - oui. Ce script ignore également les tas (tables non indexées), donc s'il n'y a pas de tables indexées dans une base de données, il n'apparaîtra pas non plus.
JNK