Kemungkinan untuk menjalankan dua perintah DBCC INDEXDEFRAG secara bersamaan, masing-masing pada tabel yang berbeda?

9

Saat ini saya sedang menjalankan skrip yang melakukan INDEXDEFRAG DBCC pada setiap tabel dalam database SQL Server 2005, satu tabel pada satu waktu. Menggunakan DBCC DBREINDEX dan bukannya INDEXDEFRAG bukanlah suatu pilihan, karena kendala ruang dan persyaratan waktu aktif.

Saya perhatikan bahwa perlu waktu lama untuk tabel tertentu didefragmentasi. Sebagai contoh jika saya memeriksa tampilan manajemen dinamis "sys.dm_exec_requests", saya dapat melihat bahwa INDEXDEFRAG berikut sedang mengaduk-aduk indeks berkerumun tabel yang memiliki table_id dari 829610394:

DBCC INDEXDEFRAG (0, 829610394, 1)

Saya tahu bahwa itu akan lama sebelum proses defragmentasi selesai. Mengesampingkan fakta bahwa skrip yang saat ini berjalan pada akhirnya akan mendefrag semua tabel, apakah ada salahnya saya secara manual menjalankan DBCC INDEXDEFRAG lain pada indeks berkerumun di tabel lain saat perintah saat ini dijalankan? Apakah kedua tabel sebenarnya akan didefragmentasi pada saat yang sama jika saya melakukan ini?

Mike tanpa henti
sumber

Jawaban:

15

Ya, Anda bisa melakukannya untuk beberapa tabel. Anda tidak dapat melakukannya untuk beberapa indeks pada tabel yang sama - Saya menemukan subresource kunci indeks baru untuk mencegahnya. Perilaku yang sama di ALTER INDEX ... REORGANISASI yang saya gantikan dengan pada tahun 2005.

Terima kasih

Paul S. Randal
sumber
2
Anda tidak bisa mendapatkan jawaban yang lebih akurat daripada jawaban dari orang yang menulisnya! Jangan lupa tentang beban IO yang terkait dengan melakukan beberapa pembangunan kembali atau reorg pada saat yang sama, dan pastikan untuk menggunakan ALTER INDEX daripada perintah DBCC yang maju.
AndrewSQL
Setuju, saya tidak tahu bagaimana mungkin untuk mendapatkan jawaban yang lebih akurat tentang masalah khusus ini daripada yang langsung dari Paul Randal. Terima kasih Paul.
RelentlessMike
6

Perhatikan bahwa DBCC INDEXDEFRAG & DBREINDEX sudah tidak digunakan lagi dan diganti oleh ALTER INDEX:

Penting

Fitur ini akan dihapus di versi masa depan Microsoft SQL Server. Jangan gunakan fitur ini dalam pekerjaan pengembangan baru, dan modifikasi aplikasi yang saat ini menggunakan fitur ini sesegera mungkin. Gunakan ALTER INDEX sebagai gantinya. - http://msdn.microsoft.com/en-us/library/ms177571(v=SQL.90).aspx

Sedangkan untuk menjalankan dua secara bersamaan, itu tergantung pada tata letak file Anda. Jika mereka semua pada disk yang sama, Anda mungkin akan memperlambat masing-masing karena mereka akan bertarung satu sama lain untuk I / O. Anda akan lebih baik jika hanya REORG atau REBUILD jika perlu. Lihatlah skrip Michelle Ufford di sini untuk solusi otomatis: http://sqlfool.com/2010/04/index-defrag-script-v4-0/

Eric Humphrey - lotahelp
sumber
Eric terima kasih. Dalam kasus khusus ini, basis data tersebar di beberapa file data, pada partisi yang berbeda, dan di atas SAN IBM DS8300. Jadi saya pikir saya akan baik-baik saja sejauh I / O pergi.
RelentlessMike