Bagaimana cara menghapus tabel dari cache SQL Server?

10

Saya punya beberapa tabel di database saya yang tidak boleh di-cache.

Bagaimana cara memberi tahu SQL Server untuk tidak men-cache halaman tabel atau bagaimana saya menghapus satu tabel dari cache?

Membilas semua cache bukan opsi.

Saya menggunakan SQL Server 2008 dan SQL Server 2008 R2.

Catalin Adler
sumber
4
Atas dasar apa Anda memutuskan bahwa tabel tidak boleh di-cache?
3
Jika tabel Anda di-cache maka mereka ditanya. Jika mereka jarang diakses maka SQL Server Memory manager akan membuangnya dalam preferensi objek lain pada waktu yang diperlukan. Apa tujuanmu di sini?
John Sansom
4
@ John - Tidak tahu apa tujuan OP tetapi ada kalanya ini berguna. mis. melakukan pemindaian satu kali terhadap meja besar tanpa menyiram kolam penyangga.
3
Beberapa alasan: tabel prioritas rendah, iis / rs pada mesin yang sama dengan sql server, penggunaan daya, dll. Yang paling penting adalah bahwa beberapa tabel adalah tabel prioritas rendah berkaitan dengan kinerja aplikasi dan dapat dengan aman dibaca dari disk kapan pun mereka diakses. Dengan menjaga tabel-tabel itu keluar dari kumpulan buffer, analisis memori menjadi agak lebih mudah.
Catalin Adler
1
@ user973156: Apakah kode dan desain Anda bagus sehingga Anda sekarang hanya dapat menebak SQL Server ke-2 untuk menjadikannya lebih baik?
gbn

Jawaban:

12

Tidak ada cara untuk melakukan ini.

DBCC DROPCLEANBUFFERStidak menerima parameter apa pun untuk database atau objek tertentu. Secara internal SQL Server dapat melakukan ini pada tingkat basis data namun seperti ketika database AUTO_CLOSEd semua halaman yang sesuai dihapus dari cache buffer.

Juga secara internal SQL Server dapat menandai halaman tertentu sehingga mereka akan menjadi yang pertama dikeluarkan oleh penulis malas. Ini digunakan oleh DMVs seperti sys.dm_db_index_physical_statsuntuk menghindari pembilasan kumpulan buffer seperti yang disinggung dalam artikel ini tetapi fungsi ini tidak terpapar dengan cara apa pun kepada kami (meskipun mungkin berguna untuk dapat menentukan yang sama jika melakukan pemindaian satu kali) dari tabel besar misalnya).

Martin Smith
sumber
7

Anda tidak dapat menentukan bahwa tabel tertentu tidak boleh di-cache. Apa yang membuat Anda berpikir bahwa Anda tidak ingin tabel dalam cache?

SQL Server melakukan SEMUA operasi normalnya di buffer pool jadi jika Anda bisa memberi tahu SQL Server untuk tidak memuat tabel ke dalam cache tabel itu tidak akan dapat diakses untuk operasi DML normal.

mrdenny
sumber