Tidak, Anda tidak dapat memeriksa mengapa ini berjalan lambat, tetapi saya dapat memberi Anda beberapa petunjuk:
1) Dalam SQL 2005, manajemen indeks nonclustered berubah dari Mesin Penyimpanan (tim saya) ke Prosesor Permintaan. Ini memiliki banyak efek samping, salah satunya adalah kecepatan tumpukan data yang dapat dipindahkan dengan menyusut. Semua catatan indeks yang tidak tercakup mengandung tautan balik ke catatan data yang mereka indeks - dalam kasus tumpukan, ini adalah tautan fisik ke nomor catatan pada halaman data tertentu. Ketika halaman tumpukan data dipindahkan oleh psikiater, semua catatan indeks yang tidak dibatasi yang menghubungkan balik ke catatan pada halaman itu harus diperbarui dengan lokasi baru dari halaman tersebut. Pada tahun 2000 ini dilakukan dengan sangat efisien oleh Storage Engine itu sendiri. Pada tahun 2005 dan seterusnya, ini harus dilakukan dengan memanggil Prosesor Kueri untuk memperbarui catatan indeks yang tidak tercakup. Ini terkadang hingga 100 kali lebih lambat dari tahun 2000.
2) Nilai LOB Off-row (baik tipe data LOB aktual atau data overflow baris) tidak mengandung backlink ke data atau catatan indeks yang menjadi bagiannya. Ketika halaman catatan LOB dipindahkan, seluruh tabel atau indeks yang menjadi bagiannya harus dipindai untuk mencari tahu data / indeks catatan mana yang menunjuk ke mereka, sehingga dapat diperbarui dengan lokasi baru. Ini juga sangat, sangat lambat.
3) Mungkin ada proses lain menggunakan database yang menyebabkan menyusutnya blok menunggu kunci yang diperlukan untuk memindahkan halaman.
4) Anda mungkin memiliki isolasi snapshot diaktifkan, dan psikiater tidak dapat memindahkan halaman dengan tautan store versi sampai transaksi yang membutuhkan versi lama selesai.
5) Subsistem I / O Anda mungkin kurang bertenaga. Panjang antrian disk yang lebih tinggi dari satu digit tunggal berarti subsistem I / O Anda dalam kemacetan.
Salah satu atau semua ini dapat berkontribusi untuk memperlambat waktu menyusut.
Secara umum, Anda tidak ingin menjalankan shrink. Lihat posting blog ini untuk detailnya: Mengapa Anda tidak harus mengecilkan file data Anda .
Semoga ini membantu!
Anda dapat menjalankan skrip ini untuk memeriksa persentase yang sudah selesai!
sumber
Saya menyusut database dalam SQL Server 2008 SP1 dan satu cara saya dapat memberitahu kemajuan dari perintah Shrink adalah dengan mengeksekusi sp_lock spid dan sebagian besar saya dapat melihat bahwa itu meletakkan kunci pada file 1 kemudian ketika dilakukan menempatkan sebuah file kunci pada id file 2, dan seterusnya dan dengan cara ini saya bisa tahu kapan ia bekerja pada id file terakhir dan ini adalah indikasi saya yang hampir selesai.
Terima kasih,
Alex Aguilar
sumber
Saya menemukan apa masalahnya (dalam kasus saya) dan saya menawarkan di sini solusi yang saya gunakan.
Saya tidak menggunakan database, dan master adalah database default pada sesi saya, saya telah memverifikasi bahwa menggunakan sp_who2. Lalu saya klik kanan pada database, pilih "tugas" dan kemudian "menyusut" dan pada "ok" dialog. Mengganti lagi dengan sp_who2, status "ditangguhkan" oleh beberapa menit dan setelah itu dibatalkan karena "tidak ada kunci eksklusif dapat diperoleh". Tebak dirimu, tapi aku yakin dialog itu sendirilah yang menyebabkan itu.
Jadi saya memutuskan untuk pergi melalui command line menggunakan:
DBCC SHRINKDATABASE (myDataBase)
(Penyihir di mana-mana didokumentasikan), Kemudian psikiater hanya butuh beberapa detik.
sumber
DBCC SHRINKDATABASE
harus dihindari karena akan mengecilkan semua file untuk basis data - file data apa pun dan file log apa pun.