web-dev-qa-db-fra.com

Pourquoi le statut "dbccfilesCompact" est-il "suspendu"?

Je passe un fichier rétractable sur un fichier de données 600G.

Actuellement, le statut est rapporté comme "suspendu" et sys.dm_exec_requests.percent_complete pour DbccFilesCompact commande rapporte qu'il est en cours d'exécution (mais très lentement)

Y a-t-il un moyen de vérifier pourquoi il est suspendu et comment la rendre plus lisse?


FYI - requête SQL pour le statut de vérification

select T.text, R.Status, R.Command, DatabaseName = db_name(R.database_id)
       , R.cpu_time, R.total_elapsed_time, R.percent_complete
from   sys.dm_exec_requests R
       cross apply sys.dm_exec_sql_text(R.sql_handle) T
order by Command
11
dance2die

Non, vous ne pouvez pas vérifier pourquoi il fonctionne lentement, mais je peux vous donner des indices:

1) Dans SQL 2005, la gestion d'index non clusters a été modifiée par rapport au moteur de stockage (mon équipe) au processeur de requête. Cela comporte de nombreux effets secondaires, dont l'un est la vitesse avec laquelle les pages de données de tas peuvent être déplacées en rétrécissant. Tous les enregistrements d'index non clusterés contiennent un backlink vers l'enregistrement de données qu'ils indexent - dans le cas d'un tas, il s'agit d'un lien physique vers un numéro d'enregistrement sur une page de données spécifique. Lorsqu'une page de données de tas est déplacée par Shrink, tous les enregistrements d'index non clusterés que Backlink vers des enregistrements sur cette page doivent être mis à jour avec le nouvel emplacement de la page. En 2000, cela a été fait très efficacement par le moteur de stockage lui-même. En 2005, cela doit être fait en appelant le processeur de requête pour mettre à jour les enregistrements d'index non clusterés. Ceci est parfois jusqu'à 100 fois plus lent qu'en 2000.

2) Valeurs LOB hors ligne (les types de données LOB ou les données de débordement de ligne) ne contiennent pas de backlink sur les données ou l'enregistrement d'index qu'elles font partie. Lorsqu'une page des enregistrements LOB est déplacée, toute la table ou l'index qu'elles font partie de DOIVENT être numérisées pour déterminer quel enregistrement de données/index pointe pour eux, afin qu'ils puissent être mis à jour avec le nouvel emplacement. C'est aussi très, très lent.

3) Il peut y avoir un autre processus à l'aide de la base de données qui provoque le déplacement de la rétractation d'attendre les serrures nécessaires pour déplacer des pages.

4) Vous pouvez avoir une isolation d'instantanée activée et la réduction ne peut pas déplacer des pages avec des liens de magasin de version jusqu'à ce que les transactions nécessitant ces anciennes versions soient terminées.

5) Votre sous-système d'E/S peut être sous-alimenté. Une longueur de file d'attente de disque supérieure à des chiffres simples basse signifie votre sous-système d'E/S dans le goulot d'étranglement.

Tout ou tout cela pourrait contribuer à des moments de rétrécissement lents.

En général, vous ne voulez pas courir réduire. Voir ce poteau de blog pour plus de détails: Pourquoi vous ne devez pas réduire vos fichiers de données .

J'espère que cela t'aides!

10
Paul Randal

Vous pouvez exécuter ce script pour vérifier le pourcentage terminé!

SELECT 
    percent_complete, 
    start_time, 
    status, 
    command, 
    estimated_completion_time, 
    cpu_time, 
    total_elapsed_time
    --,*
FROM 
    sys.dm_exec_requests
WHERE
    command = 'DbccFilesCompact'
8
Sammy Machethe

Je suis rétrécissant une base de données dans SQL Server 2008 SP1 et à une manière que je peux dire à la progression de la commande rétractable consiste à exécuter SP_Lock Spid et pour la plupart, je peux voir qu'il met un verrou sur le fichier 1 puis lorsqu'il est fait la place Verrouiller le fichier ID 2, et ainsi de suite et de cette façon, je peux dire quand il fonctionne sur le dernier identifiant de fichier et que c'est mon indication qui est presque terminée.

Merci,

Alex Aguilar

2
Alex

J'ai découvert quel était le problème (dans mon cas) et j'offre ici la solution que j'ai utilisée.

Je n'avais rien d'utiliser la base de données et Master était la base de données par défaut de ma session, j'ai vérifié qu'utiliser SP_WHO2. Ensuite, j'ai cliqué avec droit sur la base de données, sélectionnez "Tâches", puis "Réduire" et sur "OK" la boîte de dialogue. Échangez à nouveau avec SP_WHO2, le statut est "suspendu" de plusieurs minutes et après cela a été abandonné parce que "aucun verrou exclusif ne peut être obtenu". Devinez-vous, mais je suis sûr que le dialogue lui-même est celui qui cause cela.

J'ai donc décidé d'aller par ligne de commande en utilisant:

DBCC ShrinkDatabase (mydatabase)

(Sorcière est partout documentée), puis le contrat a pris juste quelques secondes.

0
Luis Siquot