DBCC SHRINKFILE ilerlemesini nasıl kontrol edebilirim?


31

İfadenin ilerlemesini öğrenmenin bir yolu var mı DBCC SHRINKFILE?

İşte nasıl çalıştırıyordum

dbcc daraltma dosyası ('main_data', 250000)

SQL Server 2005 ve 2008'in her ikisinde de yukarıdaki ifadeyi çalıştırıyorum.

[GÜNCELLEME] İlerlemeyi ve çalışmakta olan metni kontrol etmek için koştuğum sorgu.

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

Yanıtlar:


33

Sys.dm_exec_requests içinde yüzde_bilgisini kontrol ettiniz mi?


Şu anda bu DMV'den dönen verilerin nasıl okunacağını kontrol ediyor.
— dance2die

14

Aaron'un cevabı çok açık, ama korkunç performans sorunlarına yol açtığı için sizi veri dosyası küçültmeye karşı uyarmak istiyorum. Shrink koduna sahiptim, o yüzden neden bahsettiğimi biliyorum. Bu blog gönderisine göz atın Dün ne yazdığımı gösteren ve aslında bir daralma olmadan daralmanın nasıl etkili olacağı konusunda tavsiyelerde bulunduğunu yazdım: Neden veri dosyalarınızı daraltmamalısınız

Bu yardımcı olur umarım!

PS Uzun zaman alıyor mu ve kontrol edilemiyor mu, kontrol etmek için bir şey daha var - blokaja bakın. Shrink, ihtiyaç duyduğu kilitleri sonsuz bekler.


4
"Shrink kodunu kullandım, bu yüzden neden bahsettiğimi biliyorum." Güzel!
— splattne

1
600G veri dosyasını küçültmek sonsuza dek sürüyordu ... Okumak ve index defrag kullanmayı düşünmek. Paul teşekkürler!
— dance2die

1
akılda tutmak bu cevabı buldum çünkü DBCC SHRINKFILE (MyFile, EMPTYFILE) konusunda ilerleme kaydediyordum ... Yeni sürücüdeki dosya grubuna bir dosya ekleyerek, orijinali boşaltarak ve bırakarak sürücüler arasında veri taşıyorum.
— Sam Saffron

@Paul, bir dosyayı hedef boyutuna küçültmenin biraz zaman aldığını ancak tamamladığını (dosya boyutuna bakarken görüyorum) gözlemlemekteyim. Daha küçük ile aynı (bazı MB'ler veya daha büyük (1 GB) miktarlarda küçültme hacmi). sys.dm_exec_requests sürekli olarak sonsuz aktivite gösterir, kaynak kilitlerini değiştirir, aynı zamanda yüzde_ tamamlama% 32,8 civarında bir şeye kalır. Bu noktada süreci İPTAL EDİYORUM ve resmi olarak başarılı bir şekilde kutladım - SOMETHING'in hala gittiğini bilerek ... herhangi bir fikrin var mı? 2008r2
— Magier


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
Kodunuzun cevabınıza ne yaptığının bir açıklamasını eklemek yararlı olabilir
— BE77Y

Mükemmel bir sorgu için +1, ancak OP'nin bundan altı yıl sonra söylediklerini tekrarlamak için -1. Sorgunuz bir açıdan ondan daha iyiyse, lütfen açıklayın, aksi halde sadece boşa harcanır.

5

Aşağıdaki sorgu size bunun gibi bir sonuç verecektir: dbcc shrink durumunu takip et

-------------------------------
--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

İlgilenen herkes için kendi sürümümü ekleyerek, millsecond zaman sütunlarını daha okunaklı dakika ve saniyelere dönüştürür.

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

-1

Veya exec sp_who3'ü çalıştırabilirsiniz.


2
Bunun daha iyi bir açıklamaya ihtiyacı var.
— Sven

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.