13 votes

Pourquoi le statut de "DbccFilesCompact" est-il "Suspendu" ?

J'exécute le fichier SHRINK sur un fichier de données de 600G.

Actuellement, le statut est signalé comme "suspendu" et sys.dm_exec_requests.percent_complete pour DbccFilesCompact indique qu'il fonctionne (mais très lentement).

Y a-t-il un moyen de vérifier pourquoi il est suspendu et comment le faire fonctionner plus facilement ?

FYI - Requête SQL pour vérifier l'état

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

12voto

Sammy Machethe Points 91

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

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

11voto

Bernie Perez Points 5091

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

1) Dans SQL 2005, la gestion des index non groupés est passée du Storage Engine (mon équipe) au Query Processor. Cela a de nombreux effets secondaires, dont l'un est la vitesse à laquelle les pages de données du tas peuvent être déplacées par le rétrécissement. Tous les enregistrements d'index non groupés contiennent un lien inverse 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 du tas est déplacée par un rétrécissement, tous les enregistrements de l'index non groupé qui renvoient à des enregistrements de cette page doivent être mis à jour avec le nouvel emplacement de la page. En 2000, cette opération était effectuée très efficacement par le moteur de stockage lui-même. À partir de 2005, cela doit être fait en appelant le processeur de requêtes pour mettre à jour les enregistrements de l'index non groupé. Cette opération est parfois jusqu'à 100 fois plus lente qu'en 2000.

2) Les valeurs LOB hors ligne (qu'il s'agisse de types de données LOB réels ou de données de débordement de ligne) ne contiennent pas de lien rétroactif avec l'enregistrement de données ou d'index dont elles font partie. Lorsqu'une page d'enregistrements LOB est déplacée, l'ensemble de la table ou de l'index dont ils font partie doit être scanné pour déterminer quel enregistrement de données/d'index y renvoie, afin qu'il puisse être mis à jour avec le nouvel emplacement. Cette opération est également très, très lente.

3) Il se peut qu'un autre processus utilise la base de données et bloque le rétrécissement en attendant les verrous dont il a besoin pour déplacer les pages.

4) Il se peut que l'isolation des instantanés soit activée, et que le rétrécissement ne puisse pas déplacer les pages ayant des liens avec le magasin de versions jusqu'à ce que les transactions nécessitant ces anciennes versions soient terminées.

5) Votre sous-système d'E/S est peut-être sous-alimenté. Une longueur de file d'attente de disque supérieure à un chiffre signifie que votre sous-système d'E/S est un goulot d'étranglement.

L'un ou l'autre de ces facteurs peut contribuer à la lenteur de l'exécution du rétrécissement.

Mais en général, vous ne voulez pas faire de rétrécissement. Voir cet article de blog pour plus de détails : Pourquoi vous ne devriez pas réduire vos fichiers de données .

J'espère que cela vous aidera !

1 votes

@Paul Randal : J'apprécie votre commentaire et le lien vers la raison pour laquelle il ne faut pas exécuter shrink à moins que cela ne soit nécessaire. Je vais essayer la recommandation (déplacer les fichiers vers un autre groupe de fichiers) et voir comment cela se passe.

2voto

Alex Points 21

Je suis en train de réduire une base de données dans SQL Server 2008 SP1 et l'une des façons de connaître la progression de la commande Shrink est d'exécuter sp_lock spid et, pour la plupart, je peux voir qu'elle place un verrou sur le fichier 1, puis, une fois terminé, un verrou sur le fichier id 2, et ainsi de suite. De cette façon, je peux dire quand elle travaille sur le dernier id de fichier et c'est mon indication que c'est presque terminé.

Merci,

Alex Aguilar

0 votes

Quelle est la taille de votre base de données ?

0voto

Gilles Pion Points 46

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

Je n'avais rien utilisant la base de données, et master était la base de données par défaut sur ma session, j'ai vérifié cela en utilisant sp_who2. Ensuite, j'ai fait un clic droit sur la base de données, j'ai sélectionné "tâches" et ensuite "réduire" et sur "ok" la boîte de dialogue. En vérifiant à nouveau avec sp_who2, le statut est "suspendu" pendant plusieurs minutes et ensuite interrompu parce que "aucun verrou exclusif ne peut être obtenu". Devinez vous-même, mais je suis sûr que c'est la boîte de dialogue elle-même qui est à l'origine de ce problème.

J'ai donc décidé d'utiliser la ligne de commande :

DBCC SHRINKDATABASE(maBaseDeDonnées)

(La sorcière est partout documentée), Puis le rétrécissement n'a pris que quelques secondes.

1 votes

DBCC SHRINKDATABASE doit être évité car il rétrécit todos pour la base de données - tous les fichiers de données et tous les fichiers journaux.

0 votes

Il s'agit d'un accord. Nous ne l'utilisons que dans les environnements de développement. Pratique pour économiser de l'espace disque dans AWS où le disque est mesuré.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X