Saya mengimpor sejumlah besar data ke database kosong, dan sebelum saya mulai, saya menonaktifkan semua indeks non-cluster non-unik untuk melihat apakah saya dapat meningkatkan kinerja impor.
Sekarang saya ingin mengaktifkan kembali indeks, dan saya bertanya-tanya apakah ada yang bisa saya lakukan untuk mengoptimalkan ini.
Ada> 100 tabel dan hampir 2.000 indeks yang akan dibangun kembali. Basis data berukuran 200GB.
Bagian kunci dari skrip yang saya jalankan adalah ini:
declare c_toggle_index cursor FORWARD_ONLY READ_ONLY for
select 'alter index ' + QUOTENAME(i.name) + ' on ' + o.name + ' rebuild'
from sys.indexes as i
Inner Join sys.objects o
On o.object_id = i.object_id
Where o.is_ms_shipped = 0
And i.index_id >= 1
and i.type > 1
and i.is_disabled = 1
Saya mempertimbangkan pengaturan ONLINE = OFF untuk pernyataan indeks alter, tetapi ketika indeks mulai dinonaktifkan, saya tidak yakin bahwa pengaturan ini akan berpengaruh. Saya juga mempertimbangkan pengaturan SORT_IN_TEMPDB = ON, tetapi karena file tempdb berada di drive yang sama dengan file .mdf dari database, saya berasumsi bahwa tidak ada manfaat untuk melakukan itu.
Saat menjalankan skrip pembangunan kembali, saya perhatikan bahwa saya memiliki banyak jenis menunggu CXPACKET. Saya tidak benar-benar mengerti mengapa itu terjadi atau jika itu masalah yang harus saya cari untuk diatasi.
Satu poin terakhir yang mungkin relevan: seluruh server saya saat ini tidak aktif selain dari impor data ke dalam database. Tidak ada aktivitas pengguna lain untuk dipertimbangkan atau dikhawatirkan; Satu-satunya kekhawatiran saya adalah mengimpor data ke dalam database dalam waktu sesingkat mungkin.
CXPACKET
menunggu: indeks membangun kembali sendiri indeks pemindaian (bahkan indeks sedang dibangun kembali ), dan pemindaian tersebut dapat menggunakan paralelisme. Anda tidak perlu khawatir tentang menunggu itu - paralelisme mungkin membantu.