Saya punya kueri sederhana yang dijalankan terhadap SQL Server 2005
SELECT *
FROM Table
WHERE Col = 'someval'
Pertama kali saya mengeksekusi kueri dapat mengambil > 15 secs
. Eksekusi berikutnya kembali < 1 sec
.
Bagaimana saya bisa mendapatkan SQL Server 2005 untuk tidak menggunakan hasil cache? Saya sudah mencoba berlari
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
Tapi ini tampaknya tidak berpengaruh pada kecepatan kueri (masih < 1 sec
).
sql-server
caching
PaulB
sumber
sumber
Jawaban:
Inilah beberapa penjelasan yang bagus. lihat itu.
http://www.mssqltips.com/tip.asp?tip=1360
Dari artikel yang ditautkan:
sumber
Delapan cara berbeda untuk menghapus cache rencana
1. Hapus semua elemen dari cache rencana untuk seluruh instance
Gunakan ini untuk menghapus cache rencana dengan hati-hati. Membebaskan cache rencana menyebabkan, misalnya, prosedur tersimpan untuk dikompilasi ulang daripada digunakan kembali dari cache. Ini dapat menyebabkan penurunan tiba-tiba, sementara dalam kinerja permintaan.
2. Siram cache paket untuk seluruh instance dan tahan pesan penyelesaian rutin
"Eksekusi DBCC selesai. Jika DBCC mencetak pesan kesalahan, hubungi administrator sistem Anda."
3. Siram ad hoc dan siapkan cache rencana untuk seluruh instance
4. Bilas ad hoc dan siapkan cache rencana untuk satu kumpulan sumber daya
5. Siram seluruh paket cache untuk satu kumpulan sumber daya
6. Hapus semua elemen dari cache rencana untuk satu database (tidak berfungsi dalam SQL Azure)
7. Hapus cache rencana untuk database saat ini
8. Hapus satu paket permintaan dari cache
Sumber 1 2 3
sumber
Meskipun pertanyaannya agak lama, ini mungkin masih membantu. Saya mengalami masalah serupa dan menggunakan opsi di bawah ini telah membantu saya. Tidak yakin apakah ini solusi permanen, tetapi sedang memperbaikinya untuk saat ini.
Maka permintaan Anda akan seperti ini
sumber
select * from Table where Col = 'someval' OPTION (OPTIMIZE FOR UNKNOWN)
Nilai apa yang Anda tentukan untuk memori server tidak penting, asalkan berbeda dari yang sekarang.
Btw, hal yang menyebabkan speedup bukan cache permintaan, tetapi cache data.
sumber
Perhatikan bahwa keduanya
DBCC DROPCLEANBUFFERS;
tidakDBCC FREEPROCCACHE;
didukung di SQL Azure / SQL Data Warehouse.Namun, jika Anda perlu mengatur ulang cache paket di SQL Azure, Anda dapat mengubah salah satu tabel dalam kueri (misalnya, cukup tambahkan lalu hapus kolom), ini akan memiliki efek samping dari menghapus paket dari cache .
Saya pribadi melakukan ini sebagai cara menguji kinerja kueri tanpa harus berurusan dengan rencana cache.
Lebih detail tentang Cache Prosedur Azure SQL di sini
sumber