Apakah SQL Server tersimpan menyimpan hasil cache data?

11

Saya telah mendengar ini dari teman-teman, tetapi saya tidak pernah menyelidiki apakah ini benar.

Apakah benar bahwa hasil data dari kueri yang dieksekusi disimpan dalam cache?

Maksud saya, jika saya memiliki prosedur tersimpan seperti:

SELECT * FROM USERLIST

... benarkah hasilnya (daftar pengguna, dalam hal ini) disimpan dalam cache.

Juga, jika saya memiliki ini:

SELECT * FROM USERLIST WHERE user="user"
SELECT * FROM USERLIST WHERE user="userzzz"

(di mana pengguna / userzzz dilewatkan sebagai parameter), apakah benar menyimpan 2 hasil berbeda pada cache basis data.

Saya kira tidak, tetapi saya ingin konfirmasi dari Anda, para ahli!


sumber
baru saja menjawab sekarang untuk Anda oleh marc_s stackoverflow.com/questions/8559443/…

Jawaban:

19

Hasil kueri tidak di- cache

Namun, tabel sumber dan indeks data serta metadata akan di-cache setelah penggunaan pertama (akan terus digunakan, beban, dan tekanan memori)

Artinya, hasil kueri akan dievaluasi setiap eksekusi tetapi tabel (s) (dan setiap indeks dll) yang digunakan oleh kueri kemungkinan besar sudah ada dalam memori.

Rencana eksekusi yang disusun akan di-cache di mana kebingungan itu berasal dari saya curiga

gbn
sumber
"Yaitu, hasil dari suatu query akan dievaluasi setiap eksekusi tetapi tabel-tabel (dan setiap indeks dll) yang digunakan oleh query tersebut kemungkinan besar sudah ada dalam memori." : yeah, juga saya saya tidak menggunakan SP Saya kira ... itu adalah optimasi Database, itu tidak masalah dengan Sp, kan?
@markzzz: hampir semua SQL dikompilasi untuk rencana eksekusi, apakah pembaruan langsung, SELECT atau prosedur tersimpan
gbn
6

Ketika prosedur tersimpan dijalankan, ini dioptimalkan dan dikompilasi dan rencana kueri ditempatkan dalam cache prosedur.

Prosedur tetap ada dalam cache untuk pengguna lain, selama ada ruang. Prosedur dihapus menggunakan algoritma yang paling terakhir digunakan (LRU).


Sementara eksekusi awal dari prosedur tersimpan memerlukan pengambilan dari prosedur sys pada disk, adalah mungkin, untuk eksekusi selanjutnya, untuk hanya mengambil rencana yang dioptimalkan dari cache prosedur. Perilaku ini dapat menyebabkan perolehan kinerja yang signifikan.

Jadi, apa yang ada dalam cache adalah paket yang dioptimalkan dari prosedur tersimpan dan bukan hasil dari prosedur tersimpan.

aF.
sumber
6

Ketika kueri siap diproses oleh SQL Server, SQL Manager mencarinya di cache; dan jika tidak ada di sana, itu harus dikompilasi. Proses kompilasi mencakup beberapa hal.

Ketika prosedur tersimpan dijalankan, ini dioptimalkan dan dikompilasi. menurut ini rencana kueri ditempatkan dalam cache prosedur.

Periksa Compilation and Executionbagian tentang Internal dan Arsitektur Prosesor Microsoft SQL Server Query untuk informasi terperinci tentang pemrosesan kueri, dll.

Produk akhir dari fase kompilasi adalah rencana kueri, yang dimasukkan ke dalam cache prosedur. Hasil / operasi kueri SQL bisa berukuran dalam MB, GB sehingga tidak dimasukkan ke dalam cache prosedur atau rencana kueri.

Periksa diagram berikut (dari MSDN) untuk eksekusi prosedur tersimpan untuk menghapus pertanyaan Anda: masukkan deskripsi gambar di sini

Niranjan Singh
sumber
-1

SQL Server pada dasarnya berjalan melalui langkah-langkah ini untuk menjalankan permintaan apa pun (panggilan prosedur tersimpan atau pernyataan SQL ad-hoc):

1) secara sintaksis memeriksa kueri
2) jika tidak apa-apa - ia memeriksa cache paket untuk melihat apakah sudah memiliki rencana eksekusi untuk kueri itu
3) jika ada rencana eksekusi - rencana itu (kembali) digunakan dan kueri dieksekusi
4) jika belum ada rencana, rencana eksekusi ditentukan
5) rencana disimpan ke dalam cache rencana untuk digunakan kembali nanti
6) kueri dieksekusi

(salinan jawaban Marc_s)

Nighil
sumber
-1

Seperti yang telah dinyatakan orang lain, hasil kueri dalam SQL Server tidak di-cache.

Jika Anda ingin men-cache hasil kueri (atau SP), ada solusinya. Misalnya, lihat artikel ini di situs web Brent Ozar .

pedrofernandes
sumber