it-swarm-vi.tech

Làm cách nào để kiểm tra tiến độ của DBCC SHRINKFILE?

Có cách nào để tìm hiểu tiến trình của DBCC SHRINKFILE tuyên bố?

Đây là cách tôi đang chạy nó

dbcc cofile ('main_data', 250000)

Tôi đang chạy câu lệnh trên trên cả SQL Server 2005 và 2008.

[CẬP NHẬT] Đây là truy vấn tôi đã chạy để kiểm tra tiến trình và văn bản đang được chạy.

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

Bạn đã kiểm tra phần trăm_complete trong sys.dm_exec numquests chưa?

33
Aaron Alton

Câu trả lời của Aaron là đúng chỗ, nhưng tôi muốn cảnh báo bạn về việc chạy tập tin dữ liệu bị thu hẹp vì nó gây ra các vấn đề hiệu suất khủng khiếp. Tôi đã từng sở hữu mã thu nhỏ, vì vậy tôi biết những gì tôi đang nói về. Kiểm tra bài đăng trên blog này tôi đã viết ngày hôm qua cho bạn thấy ý nghĩa của tôi và tư vấn cách thực hiện thu nhỏ mà không thực sự thu nhỏ: Tại sao bạn không nên thu nhỏ tệp dữ liệu của mình

Hi vọng điêu nay co ich!

PS Một điều nữa để kiểm tra xem có mất nhiều thời gian không và phần trăm_complete không tăng - hãy tìm cách chặn. Shrink sẽ vô hạn - chờ khóa mà nó cần.

14
Paul Randal

Truy vấn bên dưới sẽ hiển thị cho bạn kết quả như thế này: theo dõi trạng thái thu nhỏ 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%'
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
Francisco Figueiredo

Thêm phiên bản của riêng tôi cho bất kỳ ai quan tâm, điều này sẽ chuyển đổi các cột thời gian millsecond thành phút và giây dễ đọc hơn.

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