Periksa kemajuan perubahan indeks reorganisasi / rekondisi


17

Bagaimana saya bisa mengecek progres / status ketika saya mengirim indeks perubahan, mengatur ulang / membangun kembali?


1
Maksud Anda, berapa banyak baris indeks yang telah diperiksa dan berapa banyak yang tersisa? Saya rasa Anda tidak bisa melakukannya. Taruhan terbaik Anda adalah memantau menggunakan DMV sys.dm_exec_requests
Shanky

Jawaban:


16

Sangat sulit untuk mengatakan berapa lama pembangunan kembali Anda, karena SQL itu sendiri tidak benar-benar tahu sebelumnya dan tidak bisa memberi Anda perkiraan.

Anda dapat menggunakan kueri berikut untuk menggunakan dm_exec_requests dmv untuk melihat berapa lama indeks yang Anda buat kembali berjalan, dan untuk memverifikasi bahwa SQL tidak benar-benar memiliki perkiraan:

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

Namun ketika datang ke perkiraan nyata pada waktu yang diperlukan Anda dapat membaca posting blog yang bagus ini dari sqlmunkee, yang merangkum ini dengan mengatakan "..itu tergantung.":

Dan karena kita tidak semua pada perangkat keras yang sama, menggunakan perangkat lunak yang sama, atau melihat data yang sama, jawabannya harus ..... tergantung

Frustasi, tetapi benar, sedih.


2
Terima kasih untuk skrip yang bagus, saya harus menyesuaikan klausa mana ke 'DBCC' tetapi kemudian saya mendapatkan beberapa informasi kembali, mengatakan bahwa persen selesai adalah 6,42 dan ETA Min sekitar 707 (yang untuk satu partisi). Saya akan mengawasi sejauh mana hal ini akan terjadi. Akan memeriksa pos juga.
nojetlag

apakah ini juga berfungsi untuk membangun kembali ONLINE?
Simon_Weaver

1
@Simon_Weaver Harus lakukan ya.
Menghasilkan

Ini hanya berfungsi untuk REORGANIZE. Ini tidak berfungsi untuk REBUILD. Silakan lihat kolom "persen_lengkap" di URL berikut untuk daftar lengkap tempat kerjanya. Estimasi_completion_time kolom jatuh ke dalam kategori yang sama tetapi tidak didokumentasikan karena itu "Hanya Internal". docs.microsoft.com/en-us/sql/relational-databases/…
Jeff Moden

4

Saya berhasil menemukan posting blog ini dengan skrip magick yang diduga melakukan tugas, tidak dapat memeriksa karena ini tampaknya tidak berfungsi untuk SQL Server 2014 yang saya jalankan, blok permintaan menunggu Kunci Bersama. Mungkin seseorang akan menganggapnya berguna, jadi saya akan meninggalkannya di sini.

;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

Saya menemukan jawaban yang diterima di atas baik, tetapi melewatkan satu hal penting: status perintah (mis. Adalah perintah diblokir)

Pilihan sederhana ini menunjukkan status bagian depan dan tengah:

SELECT percent_complete, *
FROM sys.dm_exec_requests
WHERE session_id = <session id of alter index>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.