Değiştirme dizininin yeniden yapılandırılmasını / yeniden oluşturulmasını ilerleme durumunu kontrol edin


17

Bir değişiklik dizini yeniden düzenlediğimde / yeniden oluşturduğumda ilerleme durumunu / durumunu nasıl kontrol edebilirim?


1
İlerlemeyle, ne kadar dizin dizini kontrol ettiğini ve ne kadar kalacağını kastediyorsunuz? Yapabileceğini sanmıyorum.
İzlemeniz

Yanıtlar:


16

SQL'in gerçekten önceden bilmediği ve size bir tahmin veremediği için yeniden oluşturma işleminizin ne kadar süreceğini söylemek gerçekten zor.

Dm_exec_requests dmv'yi kullanarak dizin yeniden oluşturma işleminizin ne kadar süredir devam ettiğini görmek ve SQL'in gerçekten bir tahmini olmadığını doğrulamak için aşağıdaki sorguyu kullanabilirsiniz:

SELECT r.session_id,r.command,CONVERT(NUMERIC(6,2),r.percent_complete)
AS [Percent Complete],CONVERT(VARCHAR(20),DATEADD(ms,r.estimated_completion_time,GetDate()),20) AS [ETA Completion Time],
CONVERT(NUMERIC(10,2),r.total_elapsed_time/1000.0/60.0) AS [Elapsed Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0) AS [ETA Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0/60.0) AS [ETA Hours],
CONVERT(VARCHAR(1000),(SELECT SUBSTRING(text,r.statement_start_offset/2,
CASE WHEN r.statement_end_offset = -1 THEN 1000 ELSE (r.statement_end_offset-r.statement_start_offset)/2 END)
FROM sys.dm_exec_sql_text(sql_handle)))
FROM sys.dm_exec_requests r WHERE command IN ('Alter Index')

Ancak gerekli gerçek bir tahmin söz konusu olduğunda sqlmunkee'den bu güzel blog gönderisini okuyabilirsiniz, bunu "..it bağlıdır" diyerek özetler:

Ve hepimiz aynı donanımda olmadığımız, aynı yazılımı kullandığımız veya aynı verilere baktığımız için, cevap… ..

Sinir bozucu, ama gerçek, ne yazık ki.


2
Güzel senaryo için teşekkürler, nerede maddeyi 'DBCC' olarak ayarlamak zorunda kaldım ama sonra bazı bilgileri geri aldım, tamamlanan yüzde 6.42 ve ETA Min yaklaşık 707 (bir bölüm için). Bunun ne kadar olacağına bir göz atacağım. Gönderiyi de kontrol edecek.
nojetlag

bu ONLINE yeniden oluşturma için de işe yarıyor mu?
Simon_Weaver

1
@Simon_Weaver Evet yapmalı.
18:11

Bu yalnızca REORGANIZE için geçerlidir. REBUILD için çalışmaz. Nerede çalıştığının tam bir listesi için lütfen aşağıdaki URL'deki "yüzde_konma" sütununa bakın. Tahmini_komisyon_zamanı sütunu aynı kategoriye girer, ancak "Yalnızca Dahili" olduğu için bu şekilde belgelenmez. docs.microsoft.com/tr-tr/sql/relational-databases/…
Jeff Moden

4

Bu blog gönderisini , görevi yürüttüğü iddia edilen bir sihirbaz komut dosyası ile bulmayı başardım , çünkü bu çalıştığım SQL Server 2014 için çalışmıyor gibi görünüyor, bir Paylaşılan Kilit bekleyen sorgu blokları. Belki birisi bunu yararlı bulacaktır, bu yüzden burada bırakacağım.

;WITH cte AS
(
SELECT
object_id,
index_id,
partition_number,
rows,
ROW_NUMBER() OVER(PARTITION BY object_id, index_id, partition_number ORDER BY partition_id) as rn
FROM sys.partitions
)
SELECT
   object_name(cur.object_id) as TableName,
   cur.index_id,
   cur.partition_number,
   PrecentDone =
      CASE
         WHEN pre.rows = 0 THEN 0
      ELSE
         ((cur.rows * 100.0) / pre.rows)
      END,
   pre.rows - cur.rows as MissingRows
FROM cte as cur
INNER JOIN cte as pre on (cur.object_id = pre.object_id) AND (cur.index_id = pre.index_id) AND (cur.partition_number = pre.partition_number) AND (cur.rn = pre.rn +1)
ORDER BY 4

1

Kabul edilen cevabı yukarıda buldum, ama önemli bir şey eksik: komut durumu (örneğin komut engellendi)

Bu basit seçim, ön ve ortadaki durumu gösterir:

SELECT percent_complete, *
FROM sys.dm_exec_requests
WHERE session_id = <session id of alter index>
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.