Bir üretim uygulamasında (C #, SQL Server 2014 Standard ile konuşurken), aşağıdaki gibi görünen bir sorgu var. Çoğu zaman milisaniye olarak çalışır. Ancak bazen (belirli değerleri için @Id
), çıldırır ve bir dakika kadar sürer. Bu, uygulama zaman aşımından daha uzundur, bu nedenle uygulama kullanıcı için başarısız olur.
"Çıldırıyor" vakalarında, döndürülen sonuç kümesi, diğer tüm durumlarda olmasa da birçok durumda olduğu gibi doğru şekilde boştur.
Neyse ki bu hem üretim hem de geliştirme ortamlarında tekrarlanabilir.
Geliştirici, sorgudan "TOP 1" ifadesini kaldırdıktan sonra uygulamanın sonuç kümesinin fazladan satırlarını tükettiğinden emin olarak performans sorununu ortadan kaldırdığını söylüyor.
Sorgu planlayıcısı TOP 1
mevcut olduğunda hiçbir dizin önermez . (dev).
Sorguyu değiştirme ve uygulamayı düzeltme işlemi devam ediyor. Sunum biraz zaman alıyor.
Benim sorum: Yeni sorgu ile uygulama değişikliği başlamadan önce bu sorunun üstesinden gelmek için üretim SQL Server örneği ayarlamak veya ayarlamak için DBA erişilebilir bir yolu var mı?
SELECT TOP 1
subscription_id
FROM subscription AS sub
JOIN billing_info AS bi ON bi.billing_info_id = sub.billing_info_id
JOIN person_group AS apg ON apg.person_id = bi.person_id
JOIN pplan ON pplan.plan_id = sub.plan_id
JOIN product ON product.product_id = [plan].product_id
JOIN product_attribute ON product_attribute.product_id = product.product_id
WHERE apg.group_id = @Id
AND apg.start_date < GETDATE()
AND (apg.end_date IS NULL OR apg.end_date > GETDATE())
AND (sub.end_date IS NULL OR sub.end_date > GETDATE())
AND product_attribute.attribute_type = 'special feature'
AND product_attribute.attribute_data = '1'
ORDER BY sub.start_date ASC;
@ID
her zaman "çıldırmak" yapar mı? Öyleyse, bu değerlerden birini kullanarak test edin ve gerçek sorgu planını yakalayın. Bu size neyin yanlış gittiğini söyleyecektir. "Kötü" değerler tutarlı değilse, bunun parametre ya da koklama (bkz. @ MartinSmith'in çözüm cevabı) ya da istemcinin sonuç kümesini gerçekte nasıl istediği ve tükettiğini içeren bir kilitleme problemi olduğu anlaşılmaktadır.