![如何检查DBCC SHRINKFILE的进度?](https://linux22.com/image/486413/%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5DBCC%20SHRINKFILE%E7%9A%84%E8%BF%9B%E5%BA%A6%EF%BC%9F.png)
有没有办法可以了解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
答案1
您是否检查过 sys.dm_exec_requests 中的 percent_complete?
答案2
Aaron 的回答很正确,但我想提醒您不要运行数据文件收缩,因为它会导致严重的性能问题。我曾经拥有收缩代码,所以我知道我在说什么。查看我昨天写的这篇博客文章,它向您展示了我的意思,并建议如何在不实际执行收缩的情况下实现收缩:为什么不应该缩小数据文件
希望这可以帮助!
PS 如果花费了很长时间,而 percent_complete 没有增加,还有一件事要检查 - 查找阻塞。 Shrink 将无限等待所需的锁。
答案3
下面的查询将显示如下结果: 跟踪 dbcc shrink 状态
-------------------------------
--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%'
答案4
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')