web-dev-qa-db-ja.com

DBCC SHRINKFILEの進行状況を確認する方法は?

DBCC SHRINKFILEステートメントの進行状況を確認する方法はありますか?

これが私がそれを実行していた方法です

dbccrinkfile( 'main_data'、250000)

SQL Server 2005と2008の両方で上記のステートメントを実行しています。

[UPDATE]これは、進行状況と実行中のテキストを確認するために実行したクエリです。

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

Sys.dm_exec_requestsのpercent_completeを確認しましたか?

33
Aaron Alton

Aaronの答えは的確ですが、データファイルの圧縮を実行すると、恐ろしいパフォーマンスの問題が発生するので、注意してください。以前は縮小コードを所有していたので、自分が何を話しているのかがわかります。私が昨日書いたこのブログ投稿をチェックアウトして、私が何を意味するかを示し、実際に縮小を行わずに縮小を実行する方法をアドバイスします。 データファイルを縮小すべきではない理由

お役に立てれば!

PS時間がかかり、percent_completeが増加していないかどうかを確認するためのもう1つのこと-ブロックを探します。縮小は、必要なロックを無限に待ちます。

14
Paul Randal

以下のクエリでは、次のような結果が表示されます。 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')

興味のある人のために自分のバージョンを追加すると、ミリ秒の時間列がより読みやすい分と秒に変換されます。

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