Frage Wie kann ich den Fortschritt von DBCC SHRINKFILE überprüfen?


Gibt es eine Möglichkeit, den Fortschritt von DBCC SHRINKFILE Aussage?

Hier ist, wie ich es ausgeführt habe

dbcc shrinkfile ('main_data', 250000)

Ich führe obige Anweisung auf SQL Server 2005 und 2008 aus.

[AKTUALISIEREN] 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

29
2018-06-25 13:44


Ursprung




Antworten:


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


32
2018-06-25 13:48



Derzeit prüfen, wie Daten gelesen werden, die von diesem DMV zurückgegeben werden. - Sung Kim
Das ist es, Aaron! Vielen Dank - Sung Kim


Die Antwort von Aaron ist genau richtig, aber ich möchte Sie davor warnen, den Datendatei-Shrink auszuführen, da dies zu schrecklichen Leistungsproblemen führt. Ich besaß den Schrumpfcode, also weiß ich, wovon ich rede. Checkout diesen Blogbeitrag, den ich gestern schrieb, der dir zeigt, was ich meine und rät, wie man einen Psychiater bewirkt, ohne wirklich einen Psychiater zu machen: Warum sollten Sie Ihre Datendateien nicht verkleinern?

Hoffe das hilft!

PS Noch eine Sache zu prüfen, ob es eine lange Zeit dauert und die percent_complete nicht zunimmt - suchen Sie nach Blockierung. Shrink wird unendlich - warten auf Sperren, die es benötigt.


14
2018-06-25 15:27



"Ich besaß den Schrumpfcode, also weiß ich, wovon ich rede." nett! - splattne
Es dauerte ewig, 600G Datendatei zu schrumpfen ... Ich werde es lesen und erwägen, Index Defrag zu verwenden. Danke Paul! - Sung Kim
Beachten Sie, dass ich diese Antwort gefunden habe, weil ich nach einem Fortschritt bei DBCC SHRINKFILE gesucht habe (MyFile, EMPTYFILE) ... Ich verschiebe Daten zwischen Laufwerken, indem ich eine Datei zur Dateigruppe auf dem neuen Laufwerk hinzufüge, das Original leert und es ablege. - Sam Saffron
@Paul, ich beobachte, dass das Schrumpfen einer Datei auf eine Zielgröße eine Weile dauert, aber abgeschlossen ist (ich sehe es bei der Dateigröße) - aber obwohl es SEEMS erfolgreich abgeschlossen werden muss, läuft der Prozess des Shintings immer noch und läuft für immer. Gleiches gilt für kleinere (einige MB oder größere (1 GB) Mengen an Shink-Volumen). sys.dm_exec_requests zeigt kontinuierlich endlose Aktivitäten an, wobei Ressourcensperren geändert werden, während percent_completion gleichzeitig bei 32,8% bleibt. An dieser Stelle lösche ich den Prozess und feiere offiziell einen Erfolg - in dem Wissen, dass ETWAS noch läuft ... irgendeine Ahnung, was los ist? 2008r2 - Magier


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
2018-06-16 10:06



Es kann hilfreich sein, eine Beschreibung des Codes in die Antwort einzubeziehen - BE77Y
+1 für eine ausgezeichnete Abfrage, aber -1 für das, was das OP sechs Jahre nach der Tat sagte. Wenn Ihre Anfrage in mancher Hinsicht besser ist, beschreiben Sie sie bitte, sonst ist es nur verschwendeter Speicherplatz.


Durch das Hinzufügen meiner eigenen Version für alle Interessierten werden die Millisekunden-Spalten in lesbarere Minuten und Sekunden umgewandelt.

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

3
2017-11-15 17:57





Abfrage unten zeigt Ihnen Ergebnis wie folgt: verfolgen Sie den 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%'

3
2017-08-18 20:38





Oder Sie können einfach exec sp_who3 ausführen.


-1
2018-03-07 09:40



Dies würde eine bessere Erklärung benötigen. - Sven♦