Есть ли способ узнать, как продвигается 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
Вы проверили процент_complete в sys.dm_exec_requests?
Ответ Аарона точен, но я хотел бы предостеречь вас от сжатия файла данных, поскольку это вызывает ужасные проблемы с производительностью. Раньше у меня был код сжатия, поэтому я знаю, о чем говорю. Ознакомьтесь с этим сообщением в блоге, которое я написал вчера, в котором показано, что я имею в виду, и дается совет, как добиться сжатия, не выполняя его: Почему не следует сжимать файлы данных
Надеюсь это поможет!
PS Еще один момент, чтобы проверить, долго ли идет и не увеличивается процент_complete - ищите блокировку. Shrink будет бесконечно ждать необходимых ему блокировок.
Добавляю свою версию для всех, кто интересуется, это преобразует столбцы миллисекундного времени в более удобочитаемые минуты и секунды.
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
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')
Запрос ниже покажет вам следующий результат: отслеживать статус сжатия 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%'
Или вы можете просто запустить exec sp_who3.