Doğru sorgu performansı nasıl elde edilir?


9

Saklı yordamın performansını artırmak için çalışıyorum. SP'yi çalıştırdığımda, bir şey önbelleğe alınmış gibi neredeyse anında bitiyor. SSMS'de SP yürütmeden önce aşağıdaki iki SQL satırını kullanmam söylendi:

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

SP'yi SP'nin iki kod satırı ile çalıştırdığımda yaklaşık 8 saniye içinde biter. Ancak, bu gerçekten gerçek yürütme süresi veriyor mu (bunu bir uygulamadan çalıştırıyormuşum gibi)? Nasıl bilebilirim?


Yanıtlar:


9

Bu komutlar iki şey yapar:

  • Diskten önceden alınmış veri sayfalarını depolayan sayfa önbelleğini temizleyin (normalde bir sorgudaki en büyük faktör disk erişimidir)
  • Sorgu planı önbelleğini temizleyin; bu, sunucunun yeni bir sorgu planı oluşturması gerektiği anlamına gelir. Bu, çok yüksek işlem hacimleri dışında normalde önemli değildir.

Temelde "en kötü durum" senaryosuna eşdeğer bir zaman alıyorsunuz - sadece sunucuyu yeniden başlattınız ve bellekte hiçbir şey yok. Müteakip çalışmaların, bu sayfalar zaten belleğe yüklendiği için verileri diskten çekme maliyetini ödemek zorunda değildir.

Bu gerçek dünyadaki duruma benzer - belirli bir sorguyu çalıştıran ilk kullanıcınız aynı verileri kontrol ettiğiniz varsayılarak sonraki çalışmalardan daha uzun süre beklemek zorunda kalacaktır.

Kullanmayı sevdiğim iyi bir yöntem birden çok kez koşmak ve ortalama almaktır. Tempdb gibi paylaşılan kaynaklar üzerinde tam kontrole sahip olmadığınız için bu özellikle paylaşılan bir ortamda yararlıdır.

Ayrıca, sahne arkasında neler olup bittiğiyle ilgili daha fazla bilgi almak için bu komutları kullanabilirsiniz:

SET STATISTICS IO ON
SET STATISTICS TIME ON

Bunlar diskten (nesne başına) sayfa okumaları, mantıksal sayfa okumaları, bir planı derlemek için harcanan zaman ve bir sorguyu yürütmek için harcanan zaman hakkında ayrıntılı bilgi verecektir.


her zamanki gibi mükemmel cevap JNK.
OO

Memnuniyetle yardım ettim! Sadece çok uğraştığım şeyler hakkında sorular soruyorsun. Çoğaltma veya bellek yönetimi hakkında sorarsanız eklemek için fazla bir şeyim olmayacak :)
JNK

2
SET İSTATİSTİKLERİ IO AÇIK biliyordum, ama SET İSTATİSTİKLERİ ZAMAN AÇIK asla bilmiyordum. Teşekkürler JNK.
datagod

2
Sadece FYI, SQL Sentry Plan Explorer kullanarak gerçek planlar oluşturarak tüm SET ayarları olmadan bu bilgilerin çoğunu alabilirsiniz. Ve çoklu (örneğin, 5) çalışma elde etmek için toplu işi GO 5SSMS'de olduğu gibi sonlandırabilirsiniz . Bu ücretsiz bir indirme, size bir şey satmaya çalışmıyorum. sqlsentry.net/plan-explorer/sql-server-query-view.asp
Aaron Bertrand

1
@JNK, elbette, ücretsizdir, zaman kazandırır ve Management Studio'dan çıkmak imkansız veya çok hantal olan bilgileri gösterir. Ve orada çalışıyorum. :-)
Aaron Bertrand
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.