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.