it-swarm-eu.dev

Comment vérifier la progression de DBCC SHRINKFILE?

Existe-t-il un moyen de connaître les progrès de DBCC SHRINKFILE déclaration?

Voici comment je le dirigeais

dbcc shrinkfile ('main_data', 250000)

J'exécute la déclaration ci-dessus sur SQL Server 2005 et 2008.

[UPDATE] Voici la requête que j'ai exécutée pour vérifier la progression et le texte en cours d'exécution.

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
32
dance2die

Avez-vous vérifié percent_complete dans sys.dm_exec_requests?

33
Aaron Alton

La réponse d'Aaron est juste, mais je voudrais vous mettre en garde contre l'exécution de la réduction du fichier de données car cela provoque d'horribles problèmes de performances. J'étais propriétaire du code de réduction, donc je sais de quoi je parle. Consultez ce billet de blog que j'ai écrit hier qui vous montre ce que je veux dire et vous conseille comment effectuer une réduction sans réellement effectuer une réduction: Pourquoi vous ne devriez pas réduire vos fichiers de données

J'espère que cela t'aides!

PS Une dernière chose pour vérifier si cela prend du temps et si le pourcentage_complet n'augmente pas - recherchez le blocage. Shrink attendra infiniment les verrous dont il a besoin.

14
Paul Randal

La requête ci-dessous vous montrera le résultat comme ceci: track dbcc shrink status

-------------------------------
--Track DBCC shrink status
-------------------------------
select
a.session_id
, command
, b.text
, percent_complete
, done_in_minutes = a.estimated_completion_time / 1000 / 60
, min_in_progress = DATEDIFF(MI, a.start_time, DATEADD(ms, a.estimated_completion_time, GETDATE() ))
, a.start_time
, estimated_completion_time = DATEADD(ms, a.estimated_completion_time, GETDATE() )
from sys.dm_exec_requests a
CROSS APPLY sys.dm_exec_sql_text(a.sql_handle) b
where command like '%dbcc%'
5
Mark Varnas
SELECT 
    d.name,
    percent_complete, 
    session_id,
    start_time, 
    status, 
    command, 
    estimated_completion_time, 
    cpu_time, 
    total_elapsed_time
FROM 
    sys.dm_exec_requests E left join
    sys.databases D on e.database_id = d.database_id
WHERE
    command in ('DbccFilesCompact','DbccSpaceReclaim')
5

Ajouter ma propre version pour toute personne intéressée, cela convertit les colonnes de temps en millisecondes en minutes et secondes plus lisibles.

select 
[status],
start_time,
convert(varchar,(total_elapsed_time/(1000))/60) + 'M ' + convert(varchar,(total_elapsed_time/(1000))%60) + 'S' AS [Elapsed],
convert(varchar,(estimated_completion_time/(1000))/60) + 'M ' + convert(varchar,(estimated_completion_time/(1000))%60) + 'S' as [ETA],
command,
[sql_handle],
database_id,
connection_id,
blocking_session_id,
percent_complete
from  sys.dm_exec_requests
where estimated_completion_time > 1
order by total_elapsed_time desc
4
user5947282