it-swarm.com.de

Wie überprüfe ich den Fortschritt von DBCC SHRINKFILE?

Gibt es eine Möglichkeit, den Fortschritt der Anweisung DBCC SHRINKFILE Herauszufinden?

Hier ist, wie ich es ausgeführt habe

dbcc shrinkfile ('main_data', 250000)

Ich führe die obige Anweisung sowohl für SQL Server 2005 als auch für 2008 aus.

[UPDATE] Hier ist die Abfrage, die ich ausgeführt habe, um den Fortschritt und den Text zu überprüfen, der ausgeführt wird.

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

Haben Sie Prozent_Komplett in sys.dm_exec_requests überprüft?

33
Aaron Alton

Aarons Antwort ist genau richtig, aber ich möchte Sie davor warnen, Datendateien zu verkleinern, da dies schreckliche Leistungsprobleme verursacht. Früher besaß ich den Schrumpfcode, damit ich weiß, wovon ich spreche. Überprüfen Sie diesen Blog-Beitrag, den ich gestern geschrieben habe und der Ihnen zeigt, was ich meine, und der Ihnen empfiehlt, wie Sie einen Schrumpf ausführen können, ohne ihn tatsächlich zu verkleinern: Warum Sie Ihre Datendateien nicht verkleinern sollten

Hoffe das hilft!

PS Eine weitere Sache, um zu überprüfen, ob es lange dauert und der Prozentsatz nicht vollständig ist - suchen Sie nach Blockierung. Shrink wartet unendlich lange auf die benötigten Sperren.

14
Paul Randal

Die folgende Abfrage zeigt das folgende Ergebnis: 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')

Durch Hinzufügen meiner eigenen Version für alle Interessierten werden die Millsekunden-Zeitspalten in besser lesbare Minuten und Sekunden konvertiert.

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