Як перевірити хід DBCC SHRINKFILE?


31

Чи є спосіб з’ясувати хід DBCC SHRINKFILEтвердження?

Ось як я його запустив

dbcc shrinkfile ('main_data', 250000)

Я працюю над твердженням на SQL Server 2005 та 2008.

[UPDATE] Ось запит, який я запустив, щоб перевірити хід та текст, який виконується.

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?


На даний момент перевіряється, як читати дані, повернені з цього DMV.
dance2die

14

Відповідь Аарона не вказана, але я хотів би застерегти вас від скорочення файлів даних, оскільки вони спричиняють жахливі проблеми з роботою. Я раніше володів кодом скорочення, тому знаю, про що я говорю. Опублікуйте цю публікацію в блозі, про яку я писав вчора, яка показує, що я маю на увазі, і радить, як вплинути на зменшення, не роблячи фактично зменшення: чому ви не повинні зменшувати свої файли даних

Сподіваюся, це допомагає!

PS Ще одна річ, щоб перевірити, чи це займає тривалий час, і відсоток_комплект не збільшується - шукайте блокування. Скорочення буде нескінченно - чекайте необхідних йому замків.


4
"Я мав власність скорочувального коду, тому я знаю, про що я говорю". приємно!
splattne

1
Було потрібно назавжди скоротити файл даних 600G ... Я прочитаю його і подумаю про використання дефрагментації індексу. Спасибі Павло!
dance2die

1
майте на увазі, я знайшов цю відповідь, тому що я шукав прогрес у DBCC SHRINKFILE (MyFile, EMPTYFILE) ... Я переміщую дані між дисками, додаючи файл у групу файлів на новому диску, випорожнюючи оригінал та видаляючи його.
Сем Шафран

@Paul, я зауважую, що скорочення файлу до цільового розміру займає деякий час, але завершується (я бачу, дивлячись на розмір файлу) -але це, здається, здається успішним, процес виблискування все ще триває і працює назавжди. Те ж саме з меншими (декілька Мб або більшими (1 Гб) обсягами збивання). sys.dm_exec_requests постійно демонструє нескінченну активність, змінюючи блокування ресурсів, в той же час відсоток завершення затримується на рівні близько 32,8%. На цьому етапі я відміняю цей процес і офіційно відзначаю успіх - знаючи, що дещо все-таки відбувається ... будь-яка ідея, що не так? 2008r2
Magier

Посилання на допис у блозі порушено, це, мабуть, є дійсним зараз: sqlskills.com/blogs/paul/…
Джонатан Гілберт,

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 за відмінний запит, але -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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.