DBCC SHRINKFILE의 진행 상황을 확인하는 방법?


31

DBCC SHRINKFILE진술 의 진행 상황을 알 수있는 방법이 있습니까?

여기 내가 어떻게 실행했는지

dbcc shrinkfile ( 'main_data', 250000)

SQL Server 2005와 2008 모두에서 위의 문을 실행하고 있습니다.

[업데이트] 진행 상황과 실행중인 텍스트를 확인하기 위해 실행 한 쿼리는 다음과 같습니다.

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

답변:


33

sys.dm_exec_requests에서 percent_complete를 확인 했습니까?


현재 해당 DMV에서 반환 된 데이터를 읽는 방법을 확인 중입니다.
dance2die 2016 년

14

Aaron의 대답은 제자리에 있지만 데이터 파일 축소를 실행하면 끔찍한 성능 문제가 발생하지 않도록주의하고 싶습니다. 나는 수축 코드를 소유 했으므로 내가 말하는 것을 알고 있습니다. 어제 작성한이 블로그 게시물을 확인하여 의미하는 바를 보여주고 실제로 축소를 수행하지 않고 축소를 수행하는 방법을 조언 합니다. 데이터 파일을 축소해서는 안되는 이유

이것이 도움이되기를 바랍니다!

추신 : 시간이 오래 걸리고 percent_complete가 증가하지 않는지 확인해야 할 또 하나의 사항은 차단을 찾으십시오. 수축은 필요한 잠금을 무한정 기다립니다.


4
"축소 코드를 소유하고 있었기 때문에 내가 무슨 말을하는지 알고 있습니다." 좋은!
splattne 2016 년

1
600G 데이터 파일을 축소하는 데는 오랜 시간이 걸렸습니다 ...이 파일을 읽고 인덱스 조각 모음 사용을 고려할 것입니다. 고마워 폴!
dance2die 2016 년

1
DBCC SHRINKFILE (MyFile, EMPTYFILE)에서 진행 상황을 찾고있는이 대답을 찾았습니다 ... 새 드라이브의 파일 그룹에 파일을 추가하고 원본을 비우고 삭제하여 드라이브간에 데이터를 이동하고 있습니다.
Sam Saffron

@Paul, 파일을 대상 크기로 축소하는 데 시간이 걸리지 만 완료됩니다 (파일 크기를보고 있음).하지만 성공적으로 완료되는 것으로 보이지만 반짝이는 과정은 계속 계속되고 영원히 실행됩니다. 더 작거나 (일부 MB 또는 더 큰 (1GB) 더 많은 양의 shink 볼륨과 동일) sys.dm_exec_requests는 끝없는 활동을 지속적으로 표시하여 리소스 잠금을 변경하는 동시에 percent_completion은 약 32,8 %에 멈 춥니 다. 이 시점에서 나는 프로세스를 취소하고 공식적으로 성공을 축하합니다. 무언가가 여전히 진행되고 있다는 것을 알고 있습니다. 2008R2
Magier

블로그 게시물에 대한 링크가 깨졌습니다. sqlskills.com/blogs/paul/…
Jonathan Gilbert

5
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')

2
답변에 코드의 기능에 대한 설명을 포함시키는 것이 도움이 될 수 있습니다.
BE77Y

우수한 쿼리의 경우 +1이지만 사실 후 6 년 후에 OP가 말한 것을 반복하면 -1 귀하의 질문이 그의 관점에서 그의 것보다 낫다면, 설명하십시오. 그렇지 않으면 공간이 낭비됩니다.

5

아래 쿼리는 다음과 같은 결과를 보여줍니다 : dbcc 축소 상태 추적

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

관심있는 사람을 위해 내 버전을 추가하면 밀리 초 시간 열을 더 읽기 쉬운 분과 초로 변환합니다.

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

-1

또는 exec sp_who3을 실행할 수도 있습니다.


2
더 나은 설명이 필요합니다.
Sven

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.