Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makale, SQL Server'da sorgu çalıştırdığınızda yüksek CPU kullanımının oluşması sorununu çözmenize yardımcı olur.
Şunlar için geçerlidir: SQL Server
Özgün KB numarası: 2009160
Belirtiler
Yüksek oranda eşzamanlı iş yüküne sahip Microsoft SQL Server'ı çalıştırırken sorgularda bazı performans sorunlarıyla karşılaşabilirsiniz. Bu davranış orta ve yüksek CPU kullanımı veya aşırı bellek verme istekleri olarak gösterilebilir.
Ayrıca OOM koşulları, plan önbelleği çıkarma için bellek baskısı veya beklenmeyen RESOURCE_SEMAPHORE
beklemeler gibi diğer yan etkilerle karşılaşabilirsiniz.
Ayrıca, çok fazla CPU veya bellek kullanan sorgular için sorgu planlarının İç İçe Döngüler birleştirme işleci için optimize edilmiş özniteliğinin True olarak ayarlandığını fark edebilirsiniz.
Neden
Bu sorun, SQL Server sorgu işlemcisi performansı geliştirmek için isteğe bağlı bir sıralama işlemine neden olan bazı durumlarda oluşabilir. Bu işlem "İyileştirilmiş İç İçe Döngü" veya "Batch Sort" olarak bilinir ve sorgu iyileştiricisi bu işleçlerin en iyi şekilde tanıtılması gereken zamanları belirler. Nadir durumlarda sorgu yalnızca birkaç satıra dokunur, ancak sıralama işleminin kurulum maliyeti o kadar önemlidir ki iyileştirilmiş iç içe döngünün maliyeti avantajlarından daha ağır basar. Bu nedenle, bu durumlarda beklenen performansla karşılaştırıldığında daha yavaş performans gözlemleyebilirsiniz.
Çözüm
İzleme bayrağı 2340
Sorunu düzeltmek için, iyileştirmeyi devre dışı bırakmak için izleme bayrağı 2340'ı kullanın. İzleme bayrağı 2340, sorgu işlemcisine sorgu planı oluştururken iyileştirilmiş iç içe döngü birleşimleri için sıralama işlemi (toplu sıralama) kullanmamasını ister. Bu durum tüm örneği etkiler.
Bu izleme bayrağını etkinleştirmeden önce, bu iyileştirmeyi devre dışı bıraktığınızda beklenen performans avantajlarını elde ettiğinizden emin olmak için uygulamalarınızı kapsamlı bir şekilde test edebilirsiniz. Bunun nedeni, plan tarafından dokunulan satır sayısında büyük bir artış olduğunda sıralama iyileştirmesinin yararlı olmasıdır.
Daha fazla bilgi için bkz . DBCC TRACEON - İzleme Bayrakları (Transact-SQL).
kodu DISABLE_OPTIMIZED_NESTED_LOOP ipucunu kullanacak şekilde değiştirme
Alternatif olarak, aşağıdaki sorgu ipucunu uygulayarak DISABLE_OPTIMIZED_NESTED_LOOP
sorgu düzeyinde iyileştirmeyi devre dışı bırakın.
SELECT * FROM Person.Address
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION (USE HINT (DISABLE_OPTIMIZED_NESTED_LOOP));
Daha fazla bilgi için bkz . DISABLE_OPTIMIZED_NESTED_LOOP.
Daha Fazla Bilgi
Veritabanı Altyapısı Hizmeti Başlatma Seçenekleri
Şunlara uygulanır
- SQL Server 2005 ile SQL Server 2019 arasında