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
Bạn đã kiểm tra phần trăm_complete trong sys.dm_exec numquests chưa?
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.
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%'
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')
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