it-swarm-id.com

Bagaimana cara memeriksa perkembangan DBCC SHRINKFILE?

Apakah ada cara untuk mengetahui perkembangan DBCC SHRINKFILE pernyataan?

Beginilah cara saya menjalankannya

dbcc shrinkfile ('main_data', 250000)

Saya menjalankan pernyataan di atas pada SQL Server 2005 dan 2008.

[UPDATE] Ini adalah query yang saya jalankan untuk memeriksa progres dan teks yang sedang dijalankan.

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

Sudahkah Anda memeriksa persen_lengkap di sys.dm_exec_requests?

33
Aaron Alton

Jawaban Harun sangat tepat, tetapi saya ingin mengingatkan Anda agar tidak menjalankan menyusutkan file data karena menyebabkan masalah kinerja yang mengerikan. Saya dulu memiliki kode menyusut, jadi saya tahu apa yang saya bicarakan. Periksa posting blog ini yang saya tulis kemarin yang menunjukkan kepada Anda apa yang saya maksud dan menyarankan cara melakukan menyusut tanpa benar-benar melakukan menyusut: Mengapa Anda tidak boleh menyusutkan file data Anda

Semoga ini membantu!

PS Satu hal lagi untuk memeriksa apakah perlu waktu lama dan persen_lengkap tidak bertambah - cari pemblokiran. Kecilkan akan tak terbatas-tunggu kunci yang dibutuhkan.

14
Paul Randal

Kueri di bawah ini akan menampilkan hasil seperti ini: lacak status menyusut 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%'
5
Mark Varnas
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')
5

Menambahkan versi saya sendiri untuk siapa pun yang tertarik, ini mengubah kolom waktu milidetik menjadi menit dan detik yang lebih mudah dibaca.

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