web-dev-qa-db-fra.com

Index manquant clair DMV

Comment puis-je effacer les DMV d'index manquants tels que dm_db_missing_index_group_stats, dm_db_missing_index_groups et dm_db_missing_index_details?

Je n'ai pas la possibilité de redémarrer le serveur ou de la récupérer d'abord et de remettre en ligne à nouveau comme un environnement de production.

3
Stackoverflowuser

Vous ne pouvez effacer que cette seule table à la fois (ou en redémarrant le serveur). Si vous reconstruisez un index, ajoutez un index ou déposez un index que la table est supprimée de la vue.

Donc, par extension si vous créez un index filtré à 1 rangée sur la clé primaire, puis supprimez cet index, vous supprimez cette table. Le DMV détient un maximum de 500 enregistrements afin de créer des indices maximum à 1 rangée et de les déposer.

Cela peut ne pas être trop mauvais, mais si vous courez sur un système très lourdement utilisé, vous prendrez toujours schema_mod verrouille sur la table. Un pour créer l'index et celui de déposer l'index. Cela peut provoquer un blocage. Cependant, je parle de tables qui se voient accessibles dans les centaines de dollars à des milliers de fois par seconde. Si vous ne voyez pas ce type de taux d'accès ou si vous avez une fenêtre de reconstruction d'index pour toutes vos tables, vous allez bien faire le changement à ce moment-là.

Donc, si vous avez eu une table nommée "test" dans le "dbo" schéma et une clé primaire sur "id" alors le ci-dessous effacerait une table pour vous: -

create nonclustered index ix_dmv_drop
    on dbo.test( id )
    where id = 1
    with( online = on );
go
drop index ix_dmv_drop on dbo.test;
go

Vous pouvez créer un script simple à partir de ce modèle pour les déposer tous. Tirez simplement les détails de la DMV et créez la commande Créer et déposer. Si vous reliez cela à quelque chose comme dm_db_index_operational_stats Vous pouvez obtenir un taux d'accès approximatif et donc éviter de bloquer les problèmes.

2
Runwin