Bekleme istatistiklerini açıklama
Sunucu performansını izlemeye yönelik kapsamlı bir yaklaşım, sunucunun ne beklediğini değerlendirmeyi içerir. Bekleme istatistikleri karmaşıktır ve SQL Server, çalışan her iş parçacığını izleyen ve iş parçacığının neyi beklediğini günlüğe kaydeden yüzlerce bekleme türüyle donatılmıştır.
SQL Server performans sorunlarını etkili bir şekilde algılamak ve gidermek için, bekleme istatistiklerinin nasıl çalıştığını ve veritabanı altyapısının istekleri işlerken bunları nasıl kullandığı anlamak önemlidir. Bu bilgi, performans sorunlarını tespit etmenizi ve performansı daha doğru bir şekilde iyileştirmenizi sağlar.
Bekleme istatistikleri üç bekleme türüne ayrılır: kaynak beklemeleri, kuyruk beklemeleri ve dış beklemeler.
- SQL Server'daki bir çalışan iş parçacığı, iş parçacığı tarafından kullanılmakta olan bir kaynağa erişim istediğinde kaynak beklemeleri gerçekleşir. Bekleme kaynaklarına örnek olarak kilitler, mandallar ve disk giriş/çıkış beklemeleri verilebilir.
- Kuyruk beklemeleri, bir çalışan iş parçacığı boşta olduğunda ve görevlendirilmeyi beklediğinde gerçekleşir. Örnek kuyruk beklemeleri kilitlenme izleme ve silinen kayıt temizleme işlemleridir.
- SQL Server, bağlantılı sunucu sorgusu gibi bir dış işlemin tamamlanmasını beklediğinde dış beklemeler gerçekleşir. Dış beklemeye örnek olarak, istemci uygulamasına büyük bir sonuç kümesi döndürmeyle ilgili bir ağ beklemesi örnektir.
Çalıştırılan iş parçacıklarının karşılaştığı tüm beklemeleri keşfetmek için sys.dm_os_wait_stats sistem görünümünü kontrol edebilir ve sys.dm_db_wait_stats Azure SQL Veritabanı için aynı işlemi yapabilirsiniz. Sistem sys.dm_exec_session_wait_stats görünümünde etkin bekleme oturumları listelenir.
Bu sistem görünümleri, sunucunun performansına genel bir bakış elde etmenizi ve yapılandırma veya donanım sorunlarını kolayca tanımlamanızı sağlar. Bu veriler örnek başlangıcından itibaren kalıcı olur, ancak değişiklikleri tanımlamak için gerektiğinde veriler temizlenebilir.
Bekleme istatistikleri, sunucudaki toplam beklemelerin yüzdesi olarak değerlendirilir.
bu sorgunun sys.dm_os_wait_stats sonucu, bekleme türünü ve bekleme süresi yüzdesini (Bekleme Yüzdesi sütunu) ve her bir bekleme türü için saniye cinsinden ortalama bekleme süresini gösterir.
Bu durumda sunucu, REDO_THREAD_PENDING_WORK ve PARALLEL_REDO_TRAN_TURN bekleme türleri tarafından gösterildiği gibi AlwaysOn Kullanılabilirlik Grupları'na sahiptir. CXPACKET ve SOS_SCHEDULER_YIELD beklemelerinin görece yüksek yüzdesi, bu sunucunun bir CPU baskısı altında olduğunu gösterir.
DMV'ler son SQL Server başlangıcından bu yana en yüksek süre birikmiş bekleme türlerinin listesini sağladığından, bekleme istatistikleri verilerini düzenli aralıklarla toplamak ve depolamak, performans sorunlarını anlamanıza ve diğer veritabanı olaylarıyla bağıntı oluşturmanıza yardımcı olabilir.
DMV'lerin son SQL Server başlangıcından bu yana birikmiş en yüksek süreye sahip bekleme türlerinin listesini sağladığını göz önünde bulundurarak, bekleme istatistiklerini düzenli aralıklarla toplamak ve depolamak, diğer veritabanı olaylarıyla ilgili performans sorunlarını anlamanıza ve ilişkilendirmenize yardımcı olabilir.
SQL Server'da çeşitli bekleme türleri vardır, ancak bazıları yaygındır.
RESOURCE_SEMAPHORE— genellikle belirli sorgulara aşırı bellek ataması nedeniyle sorguların belleğin kullanılabilir olmasını beklediğini gösterir. Bu sorun genellikle uzun sorgu çalışma zamanları ve hatta zaman aşımları olarak kendini gösterir. Bu bekleme türlerinin nedenleri arasında güncel olmayan istatistikler, eksik dizinler ve yüksek sorgu eşzamanlılığı bulunabilir.
LCK_M_X; genellikle engelleme sorununu gösterir. Bu sorun yalıtım düzeyine
READ COMMITTED SNAPSHOTdeğiştirilerek, işlem sürelerini azaltmak için dizinleme iyileştirilerek veya T-SQL kodu içinde işlem yönetimi iyileştirilerek çözülebilir.PAGEIOLATCH_SH— Bu bekleme türü dizinlerle ilgili sorunları veya yararlı dizinlerin olmamasını belirterek SQL Server'ın aşırı miktarda veri taramasına neden olabilir. Alternatif olarak, bekleme sayısı düşükse ancak bekleme süresi yüksekse depolama performansı sorunları önerebilir. Belirli bir bekleme türü için ortalama bekleme süresini hesaplamak üzere
waiting_tasks_countsistem görünümündekiwait_time_msvesys.dm_os_wait_statssütunlarındaki verileri analiz ederek bu davranışı gözlemleyebilirsiniz.SOS_SCHEDULER_YIELD— Bu bekleme türü yüksek CPU kullanımını gösterebilir. Bu, yüksek sayıda büyük tarama veya eksik dizinlerle ve genellikle çok sayıda CXPACKET beklemesiyle ilişkilidir.
CXPACKET—Bu bekleme türünün sıkça görülmesi yanlış yapılandırmaya işaret edebilir. SQL Server 2019'dan önce, yüksek paralellik derecesi (MAXDOP) için varsayılan ayar, sorgular için tüm kullanılabilir CPU'ları kullanmaktı. Buna ek olarak, paralellik için maliyet eşiği 5 olarak ayarlanmıştır ve bu da küçük sorguların paralel olarak yürütülmesine neden olarak aktarım hızını sınırlayabilir. Bu bekleme türünü azaltmak için MAXDOP ayarını düşürebilir ve paralellik için maliyet eşiğini artırabilirsiniz. Ancak CXPACKET bekleme türü, genellikle dizin ayarlama yoluyla çözümlenen yüksek CPU kullanımını da gösterebilir.
PAGEIOLATCH_UP— 2:1:1 veri sayfalarında bu bekleme türü, Sayfa Boş Alanı (PFS) veri sayfalarında TempDB çekişmesini gösterebilir. Her veri dosyasında 64 MB veri başına bir PFS sayfası vardır. Bu bekleme genellikle SQL Server 2016'da olduğu gibi yalnızca bir TempDB dosyasına sahip olmasından kaynaklanır. Varsayılan davranış TempDB için bir veri dosyası kullanmaktır. TempDB için en iyi yöntem, CPU çekirdeği başına en fazla sekiz dosya olmak üzere bir dosya kullanmaktır. TempDB veri dosyalarınızın aynı boyutta olduğundan ve eşit kullanıldığından emin olmak için aynı otomatik büyüme ayarlarına sahip olduğundan emin olmak da önemlidir. SQL Server 2016 ve üzeri, TempDB veri dosyalarının tutarlı ve eşzamanlı bir şekilde büyüdüklerinden emin olmak için büyümeyi denetler.
Sorgu Deposu, daha önce bahsedilen DMV'lere ek olarak belirli sorgularla ilişkili beklemeleri de izler. Sorgu Deposu tarafından izlenen bekleme verileri DMV'lerdeki veriler kadar ayrıntılı olmasa da, sorgunun ne beklediğine ilişkin yararlı bir genel bakış sağlar.