PostgreSQL'den Azure SQL'e geçişte operasyonel istatistikler
Microsoft'un PostgreSQL'den SQL'e geçiş notlarının bu bölümünde iki motorun çalışma zamanı tanılama yetenekleri karşılaştırılıyor. Azure SQL'in çalışan sorguları, son gerçek execution plan'ları, bekleme istatistiklerini ve bellek grant'lerini ek eklenti olmadan nasıl gösterdiği anlatılıyor. Yavaş sorguları araştıran ve veri erişim kodunu taşıyan geliştiriciler için faydalı.
Kilit noktalar
- Çalışan bir sorguyu sys.dm_exec_requests ve sys.dm_exec_query_statistics_xml ile iptal etmeden inceleyebilirsiniz.
- Son gerçek planı görmek için önce ALTER DATABASE SCOPED CONFIGURATION ile LAST_QUERY_PLAN_STATS özelliğini açın.
- sys.dm_exec_query_plan_stats yalnızca plan hâlâ önbellekteyken sonuç verir; etkinleştirme önceki çalıştırmaları geri getirmez.
- sys.dm_db_wait_stats kümülatif bekleme sayısı ve süresini tür bazında verir; zaman içinde karşılaştırma yapmak gerekir.
- sys.dm_exec_query_memory_grants ile istenen, verilen ve kullanılan bellek değerlerini doğrudan okuyabilirsiniz.
- Bazı Azure SQL Database katmanlarında bu bilgilere erişmek için yükseltilmiş yetki gerekebilir.
Microsoft'un PostgreSQL'den SQL'e geçiş notlarının bu bölümünde, yavaşlayan sorguları teşhis ederken iki motorun sunduğu imkanlar karşılaştırılıyor. PostgreSQL'in olgun kümülatif istatistik görünümleri ve EXPLAIN ANALYZE aracı güçlü olsa da, başka bir oturumdaki çalışan sorguyu incelemek ya da tamamlanmış planları yakalamak genellikle ek yapılandırma, eklenti ya da dış izleme gerektiriyor. Azure SQL ise bu yetenekleri dinamik yönetim görünümleri ve fonksiyonlar üzerinden doğal olarak sunuyor.
Yazıda dört alan öne çıkıyor. sys.dm_exec_requests ile sys.dm_exec_query_statistics_xml birlikte, çalışmakta olan sorgunun operatör düzeyinde satır sayılarını içeren planını döndürüyor. LAST_QUERY_PLAN_STATS etkinleştirildikten sonra sys.dm_exec_query_plan_stats, plan önbellekte kaldığı sürece son gerçek planı verebiliyor. sys.dm_db_wait_stats bekleme türlerine göre birikimli süreleri, sys.dm_exec_query_memory_grants ise istenen ve verilen belleği gösteriyor. Profilleme varsayılan olarak açık, ancak bazı katmanlar yükseltilmiş yetki istiyor ve önbellekteki planlar kaybolabiliyor.
Gerçek dünyada kullanımı
- Üretimde yavaşlayan bir API'nin sorgusunu yeniden çalıştırmadan, çalışırken planını inceleyerek darboğazı bulmak.
- Gece çalışan bir raporun son gerçek planını kontrol edip tahmin edilen ve gerçek satır sayılarının ayrıştığı yeri görmek.
- Yoğun saatlerde bekleme türlerini izleyip kilitlenme ya da bellek baskısının tekrar eden desenini tespit etmek.
- PostgreSQL'den taşınan bir Entity Framework Core uygulamasında sorgu performansını Azure SQL tarafında doğrulamak.
Neden önemli
PostgreSQL'de benzer tanılama için çoğu zaman önceden eklenti kurmanız gerekirken Azure SQL'de bu veriler motorun içinde hazır bulunuyor. Geçiş yapan bir ekip, sorun çıkmadan önce hangi DMV'lerin ve ayarların gerektiğini planlamalı.