Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Proses pembersihan oleh hantu adalah proses latar belakang berutas tunggal yang menghapus catatan dari halaman yang ditandai untuk penghapusan. Artikel berikut ini memberikan gambaran umum tentang proses ini.
Rekaman hantu
Rekaman yang dihapus dari tingkat daun halaman indeks tidak dihapus secara fisik dari halaman - sebagai gantinya, rekaman ditandai sebagai 'akan dihapus', atau dihantui. Ini berarti bahwa baris tetap berada di halaman tetapi ada sedikit perubahan pada header baris untuk menunjukkan bahwa baris tersebut adalah sebuah hantu. Hal ini berguna untuk mengoptimalkan performa selama operasi penghapusan. Hantu diperlukan untuk penguncian tingkat baris, tetapi juga diperlukan untuk isolasi rekam jepret di mana kita perlu mempertahankan versi baris yang lebih lama.
Tugas pembersihan rekaman hantu
Rekaman yang ditandai untuk dihapus, atau ditandai sebagai dihapus, dibersihkan oleh proses pembersihan hantu latar belakang. Proses latar belakang ini berjalan setelah transaksi penghapusan dikonfirmasi, dan secara fisik menghapus catatan tersembunyi dari halaman. Proses pembersihan hantu berjalan secara otomatis pada interval (setiap 5 detik untuk SQL Server 2012+, setiap 10 detik untuk SQL Server 2008/2008R2) dan memeriksa untuk melihat apakah ada halaman yang ditandai dengan catatan hantu. Jika sistem menemukan adanya, maka akan pergi dan menghapus catatan yang ditandai untuk dihapus, atau dihantui, menyentuh paling banyak 10 halaman dalam setiap proses eksekusi.
Ketika rekaman dihantui, database ditandai sebagai memiliki entri hantu, dan proses pembersihan hantu hanya akan memindai database tersebut. Setelah semua catatan hantu dihapus, proses pembersihan hantu juga akan menandai database sebagai 'tidak memiliki catatan hantu', dan akan melewati database ini pada saat prosesnya dijalankan berikutnya. Proses ini juga akan melewati database mana pun yang tidak dapat diunci berbagi, dan akan mencoba lagi pada saat berikutnya proses ini dijalankan.
Kueri berikut dapat menghitung jumlah rekaman hantu dalam satu database.
SELECT sum(ghost_record_count) total_ghost_records, db_name(database_id)
FROM sys.dm_db_index_physical_stats (NULL, NULL, NULL, NULL, 'SAMPLED')
group by database_id
order by total_ghost_records desc
Nonaktifkan pembersihan hantu
Pada sistem beban tinggi yang sering melakukan penghapusan, proses pembersihan data hantu dapat menyebabkan masalah performa karena halaman tetap berada di kumpulan buffer dan menghasilkan Input/Output (IO). Dengan demikian, dimungkinkan untuk menonaktifkan proses ini dengan penggunaan bendera pelacakan 661. Namun, ada implikasi performa dari menonaktifkan proses.
Menonaktifkan proses pembersihan hantu dapat menyebabkan database Anda tumbuh tidak perlu besar dan dapat menyebabkan masalah performa. Karena proses pembersihan hantu menghapus rekaman yang ditandai sebagai hantu, menonaktifkan proses akan meninggalkan rekaman ini di halaman, mencegah SQL Server menggunakan kembali ruang ini. Ini memaksa SQL Server untuk menambahkan data ke halaman baru sebagai gantinya, yang mengarah ke file database yang kembung, dan juga dapat menyebabkan pemisahan halaman. Pemisahan halaman menyebabkan masalah performa saat membuat rencana eksekusi, dan saat melakukan operasi pemindaian.
Setelah proses pembersihan hantu dinonaktifkan, diperlukan beberapa tindakan untuk menghapus catatan yang ditinggalkan. Salah satu opsinya adalah menjalankan pembangunan ulang indeks, yang akan memindahkan data di sekitar halaman. Opsi lain adalah menjalankan sp_clean_db_free_space secara manual (untuk membersihkan semua file data database) atau sp_clean_db_file_free_space (untuk membersihkan satu file data database), yang akan menghapus catatan hantu.
Peringatan
Menonaktifkan proses pembersihan hantu umumnya tidak disarankan. Melakukannya harus diuji secara menyeluruh di lingkungan yang terkontrol sebelum diimplementasikan secara permanen di lingkungan produksi.