SQL Server saklı yordamları veri sonuçlarını önbelleğe alıyor mu?


11

Bunu arkadaşlardan duydum, ama bunun doğru olup olmadığını hiç araştırmadım.

Yürütülen bir sorgunun veri sonuçlarının önbellekte saklandığı doğru mu?

Yani, eğer gibi bir saklı yordam varsa:

SELECT * FROM USERLIST

... sonucun (bu durumda kullanıcı listesi) önbellekte saklandığı doğrudur.

Ayrıca, eğer bunlar varsa:

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

(user / userzzz'nin parametre olarak iletildiği), veritabanı önbelleğinde 2 farklı sonuç depolaması doğru mu?

Ben öyle düşünmüyorum, ama sizden onay istiyorum uzmanlar!


şimdi sizin için şimdi marc_s tarafından gönderildi stackoverflow.com/questions/8559443/…

Yanıtlar:


19

Sorgu sonuçları önbelleğe alınmaz

Bununla birlikte, kaynak tablo ve dizin verileri ve meta veriler 1. kullanımdan sonra önbelleğe alınır (yine de sürekli kullanım, yük ve bellek basıncına tabi)

Yani, bir sorgunun sonuçları her yürütme değerlendirilir, ancak sorgu tarafından kullanılan tablolar (ve herhangi bir dizin vb.) Büyük olasılıkla bellekte olacaktır.

Derlenen yürütme planı önbelleğe alınacak, bu da karışıklığın geldiğinden şüpheleniyorum


"Yani, bir sorgunun sonuçları her yürütme değerlendirilir, ancak sorgu tarafından kullanılan tablolar (ve herhangi bir dizin vb.) Büyük olasılıkla bellekte olacaktır." : evet, ben de SP kullanmıyorum Sanırım ... Bu bir Veritabanı optimizasyonu, Sp ile önemli değil, değil mi?

@markzzz: Doğrudan bir UPDATE, SELECT veya saklı yordam olsun, neredeyse tüm SQL bir yürütme planına derlenir
gbn

6

Saklı yordam yürütüldüğünde, en iyileştirilir ve derlenir ve sorgu planı yordam önbelleğine yerleştirilir.

Yordam, alan olduğu sürece diğer kullanıcılar için önbellekte kalır. Prosedürler en son kullanılan (LRU) algoritması kullanılarak çıkarılır.


Saklı bir yordamın ilk yürütülmesi diskteki sistem yordamlarından alınmayı gerektirse de, sonraki yürütmeler için en uygun planı yordam önbelleğinden almak mümkündür. Bu davranış, önemli performans kazancı sağlayabilir.

Yani, önbellekte ne saklı yordamın sonuçları değil, saklı yordam optimize edilmiş planıdır.


6

Bir sorgu SQL Server tarafından işlenmeye hazır olduğunda, SQL Manager bunu arar cache; ve eğer orada değilse, derlenmelidir. Derleme işlemi birkaç şeyi kapsar.

Saklı bir yordam yürütüldüğünde, en iyileştirilir ve derlenir. buna göre bir sorgu planı prosedür önbelleğine yerleştirilir.

Kontrol Compilation and Executionbölümüne Microsoft SQL Server sorgu işlemcisi Internals Mimarlık sorgu işleme hakkında ayrıntılı bilgi vb

Derleme aşamasının son ürünü, yordam önbelleğine konan bir sorgu planıdır. SQL sorgu sonucu / işlemi MB, GB boyutunda olabilir, bu nedenle yordam önbelleğine veya sorgu planına konulmaz.

Sorunuz hakkında temizlemek için saklı yordamın yürütülmesi için aşağıdaki şemaya (MSDN'den) bakın: resim açıklamasını buraya girin


-1

SQL Server temel olarak herhangi bir sorguyu (saklı yordam çağrısı veya geçici SQL deyimi) yürütmek için şu adımları izler:

1) sorguyu sözdizimsel olarak kontrol edin
2) eğer uygunsa - o sorgu için zaten bir yürütme planı olup olmadığını görmek için plan önbelleğini kontrol eder
3) bir yürütme planı varsa - bu plan (yeniden) kullanılır ve sorgu yürütülür
4) henüz bir plan yoksa, bir yürütme planı belirlenir
5) bu plan daha sonra yeniden kullanılmak üzere plan önbelleğine kaydedilir
6) sorgu yürütülür

(Marc_s yanıtının kopyası)


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.