sp_filestream_force_garbage_collection (T-SQL)

Berlaku untuk:SQL Server

Memaksa pengumpul sampah FILESTREAM (GC) untuk dijalankan, menghapus file FILESTREAM yang tidak diperlukan.

Kontainer FILESTREAM tidak dapat dihapus sampai semua file yang dihapus di dalamnya dibersihkan oleh GC. FILESTREAM GC berjalan secara otomatis. Namun, jika Anda perlu menghapus kontainer sebelum GC berjalan, Anda dapat menggunakan sp_filestream_force_garbage_collection untuk menjalankan GC secara manual.

Konvensi sintaks transact-SQL

Sintaks

sp_filestream_force_garbage_collection
    [ @dbname = ] 'database_name'
    [ , [ @filename = ] 'logical_file_name' ]
[ ; ]

Argumen

[ @dbname = ] 'database_name'

Menandakan nama database untuk menjalankan GC.

@dbname adalah sysname. Jika tidak ditentukan, database saat ini diasumsikan.

[ @filename = ] 'logical_file_name'

Menentukan nama logis kontainer FILESTREAM untuk menjalankan GC. @filename bersifat opsional. Jika tidak ada nama file logis yang ditentukan, GC membersihkan semua kontainer FILESTREAM dalam database yang ditentukan.

Mengembalikan nilai kode

Nilai Deskripsi
0 Operasi berhasil
1 Kegagalan operasi

Tataan hasil

Nilai Deskripsi
file_name Menunjukkan nama kontainer FILESTREAM
num_collected_items Menunjukkan jumlah item FILESTREAM (file atau direktori) yang telah dikumpulkan sampah (dihapus) dalam kontainer ini.
num_marked_for_collection_items Menunjukkan jumlah item FILESTREAM (file atau direktori) yang telah ditandai untuk GC dalam kontainer ini. Item ini belum dihapus, tetapi mungkin memenuhi syarat untuk dihapus setelah fase GC.
num_unprocessed_items Menunjukkan jumlah item FILESTREAM yang memenuhi syarat (file atau direktori) yang tidak diproses untuk GC dalam kontainer FILESTREAM ini. Item mungkin tidak diolah karena berbagai alasan, termasuk:

- File yang perlu disematkan karena cadangan log atau titik pemeriksaan belum diambil.

- File dalam model pemulihan FULL atau BULK_LOGGED.

- Ada transaksi aktif yang berjalan lama.

- Pekerjaan pembaca log replikasi belum berjalan. Lihat laporan resmi PENYIMPANAN FILESTREAM di SQL Server 2008 untuk informasi selengkapnya.
last_collected_xact_seqno Mengembalikan nomor urutan log terakhir yang sesuai (LSN) di mana file telah dikumpulkan untuk kontainer FILESTREAM yang ditentukan.

Keterangan

Secara eksplisit menjalankan tugas pengumpulan sampah FILESTREAM untuk diselesaikan pada database yang diminta (dan kontainer FILESTREAM). Proses GC menghapus file yang tidak lagi diperlukan. Waktu yang diperlukan agar operasi ini selesai tergantung pada ukuran data FILESTREAM dalam database atau kontainer tersebut, dan jumlah aktivitas DML yang baru-baru ini terjadi pada data FILESTREAM. Meskipun operasi ini dapat dijalankan dengan database online, ini dapat memengaruhi performa database selama eksekusinya karena berbagai aktivitas I/O yang dilakukan oleh proses GC.

Catatan

Disarankan agar operasi ini dijalankan hanya jika diperlukan dan di luar jam operasi biasa.

Beberapa pemanggilan prosedur tersimpan ini dapat dijalankan secara bersamaan hanya pada kontainer terpisah atau database terpisah.

Karena operasi dua fase, prosedur tersimpan harus dijalankan dua kali untuk benar-benar menghapus file FILESTREAM yang mendasarinya.

Pengumpulan sampah bergantung pada pemotongan log. Oleh karena itu, jika file dihapus baru-baru ini pada database menggunakan model pemulihan penuh, file tersebut dikumpulkan sampah hanya setelah cadangan log dari bagian log transaksi tersebut diambil, dan bagian log ditandai tidak aktif. Pada database yang menggunakan model pemulihan sederhana, pemotongan log terjadi setelah CHECKPOINT dikeluarkan terhadap database.

Izin

Memerlukan keanggotaan dalam peran database db_owner .

Contoh

Contoh berikut menjalankan GC untuk kontainer FILESTREAM dalam fsdb database.

J. Tentukan tidak ada kontainer

USE fsdb;
GO
EXEC sp_filestream_force_garbage_collection @dbname = N'fsdb';

B. Tentukan kontainer

USE fsdb;
GO
EXEC sp_filestream_force_garbage_collection @dbname = N'fsdb',
    @filename = N'FSContainer';