Yavaş sistemler, herhangi bir ürünün baş belasıdır. Web uygulamalarının hedef kitlesine sorun, anlarsınız. Araştırmalar, kullanıcıların %47'sinin web sayfalarının 2 saniye veya daha kısa sürede yüklenmesini beklediğini, kullanıcıların %40'ının ise yüklenmesi 3 saniyeden uzun sürerse bir siteyi terk edeceğini buldu¹!
Bir web uygulamasının performansını optimize etmek için sayısız yöntem olsa da, bu tartışma için arka ucumuzun performansına odaklanmak istiyoruz. Arka uçtan, veritabanı sorgularımızın performansı, ön uç uygulamamızın kullanıcı deneyimini doğrudan etkileyen API'lerimizin gecikmesine kadar "önde ve ortada"dır.
Çözülmesi uzun süren (veya zaman aşımına uğrayan) verimsiz sorgular varsa, bu, kullanıcılarınızın doğrudan karşılaşacağı (ve şikayet etmeyi seveceği) bir acı noktası olacaktır.
Aşağıda, PostgreSQL'de sorguları ölçmek ve optimize etmek için kolayca kullanabileceğimiz birkaç metodolojiye ve araca değinmek istiyorum. Cloud SQL'in en son aracı olan Query Insights hakkında konuşmaya devam edeceğim, bu aynı konu için paylaşmaktan gerçekten heyecan duyuyorum.
Hadi başlayalım :)
Uygulamanızı geliştirirken, çözülmesi uzun zaman alan veya genellikle zaman aşımına uğrayan karmaşık bir sorguyla karşılaşabilirsiniz. Bu olduğunda, yürütülen sorgunuzun sorgu planını anlamak için aşağıdaki sorguyu çalıştırabilirsiniz:
EXPLAIN ANALYZE <% INSERT_YOUR_QUERY_HERE %>
Sorgu planında, sorgunuzun "A-Z'lerini" görürsünüz. Nasıl parçalandığını ve sorgunun tamamında hangi tabloların, sütunların ve dizinlerin yer aldığını anlayacaksınız.
Bu bilgileri kullanarak, sorgunuzun iyileştirilebileceği işaretleri aramak isteyebilirsiniz. Her bölümde tahmini maliyet ve yürütülen fiili süredeki darboğazları kontrol edin ve iyileştirilecek alanlar bulabilmelisiniz. Yaygın bir örnek, sorgulanan sütun(lar)a bir dizin eklenerek optimize edilebilecek büyük bir tabloda zaman alıcı bir sıralı taramanın (yukarıda "sıralı tarama" olarak görüldüğü gibi) yapıldığını bulmaktır.
Ayrıca, herhangi bir sorgu planının özelliklerine giren çok sayıda kılavuz vardır. Aşina olmadığınız terimler varsa, resmi belgelerle başlayabilir ve Google'daki diğer sonuçlara dalabilirsiniz.
Bazen, kullanarak bir sorgunun performansını doğrudan doğrulayabilmek mantıklıdır
EXPLAIN ANALYZE.
Ancak, uygulamanın ölçeğinin, farklı filtreler ve sıralama koşullarına sahip bir sürü sorgunun sunulmasında rol oynayabileceği ve her bir sorguyu manuel olarak optimize etmeyi zorlaştırabileceği zamanlar vardır.
İşte burada pg_stat_statements devreye girer ve sorgu performansının analizinde güçlü bir rol oynar. Bunu, sorgularınızı izlemek için kullanabilir ve tarihsel olarak en iyiden en kötü performansa kadar olan sorgular için bilgi çıkararak, ilk olarak hangi sorguların optimize edilmesi gerektiğini bilmenizi sağlayabilirsiniz. Bu uzantı, uygulamanızdaki olası darboğazlara katkıda bulunan sorguları saptamanıza olanak vererek, yük testleri ile birlikte de kullanılabilir.
pg_stat_statements'tan gelen bilgiler , her sorgunun toplam süresine (esas olarak CPU kullanımı) veya her sorgunun ortalama süresine göre farklı dikeylerde sıralanabilir. Ortalama süreye göre sıralanacak sorgunun bir örneği aşağıda gösterildiği gibidir:
Yukarıdaki sorguyu çalıştırdığınızda, aşağıdaki sonuçları gözlemleyebilmelisiniz. Hey, bu ikinci sorgu, toplam CPU süresinin %78,65'ini kapladığı göz önüne alındığında optimize edilebilecek bir sorguya benziyor.
Yukarıda, pg_stat_statments uzantısını eklediğim gibi, analiziniz için önemli olmayan sorgular olabileceğini unutmayın . Bunu önlemek için sonuçlarınızı sıfırlayabilirsiniz. Bu, yeni sorgunun daha iyi performans gösterip göstermediğini görmek için önemli bir optimizasyon çabasından sonra da yapılabilir.
İstatistiklerinizi sıfırlamak için aşağıdaki komutu çalıştırmanız yeterlidir:
SELECT pg_stat_reset(); -- Local database SELECT pg_stat_statements_reset(); -- For Google Cloud SQL
Bu uzantıyı kullanmaya nasıl başlayacağınızdan bahsedelim.
Yerel veritabanınızda pg_stat_statements kullanmaya başlamak için, aşağıdakileri postgresql.conf yapılandırma dosyanıza eklemeniz yeterlidir .
pg_stat_statements.track = all shared_preload_libraries = 'pg_stat_statements'
Yapılandırma ayarlandıktan sonra, uzantıyı doğrudan aşağıdaki sorguyla oluşturabilirsiniz:
CREATE EXTENSION IF NOT EXISTS “pg_stat_statements”;
Şimdiye kadar,
EXPLAIN ANALYZEseçilen sorgularla denediniz ve bazı başarılar elde ettiniz . Geçmiş sorgularınızın performansını anlamak için pg_stat_statements kullandınız . Bununla birlikte, bu iki strateji arasında ortak bir tema vardır, çünkü bunlar manuel süreçlerdir - sorguları doğrudan kabuktan çalıştırmamızı gerektirir.
Bu, benimsemeye bir eğri ekliyor - her iki çözümü de etkili bir şekilde kullanabilmek için mühendisleri eğitmeniz gerekiyor.
İzleme ve optimizasyon çabalarımızı gerçekten ölçeklendirmek istiyorsak, bu manuel çözümlerin ötesine geçebiliriz. Bu amaçla farklı çözümlere baktım ve PgHero'yu buldum . Ekibimin tüm sorgularımızın performansını doğrudan bir web uygulamasından görselleştirmesini sağlayan bir kullanıcı arayüzü içeriyordu.
Bu gerçekten kullanışlı! Kabuğumuzdan manuel olarak herhangi bir komut çalıştırmaya gerek yok! Ayrıca, yalnızca dahili erişim için kısıtlamak için özel olarak da barındırabiliriz.
Bu kullanışlı kontrol paneli ile ekibim, hangi sorguların yükseltilmesi gerektiğini hemen anlayabilir. Uygulama ayrıca, veritabanı bulut sunucunuza olan mevcut bağlantıları görselleştirmek gibi başka faydalı içerikler de sunar.
Bir başka harika özellik de, gösterge panosunun başka bir alternatif optimizasyon alanı olan disk alanı hakkında bilgi vermesidir. Aşağıdaki örnekte fazlalık bir dizin oluşturdum ve PgHero bu bilgiyi alabildi ve kaldırılmasını önerdi!
Ayrıca ilk bölümdeki gibi bir sorguyu analiz etmek isterseniz doğrudan veritabanına erişmenize gerek yoktur.
ExplainSekmede görüldüğü gibi, sorgu planını doğrudan web uygulamasından kontrol edebilirsiniz :
Ve yukarıdakiler, PgHero'da desteklenen özelliklerden sadece birkaçıdır . Kesinlikle kontrol edin ve ekibiniz için işe yarayıp yaramadığını görün
Liman işçisi görüntüsünü kullanmayı düşünüyorsanız, veritabanına bağlanmak için kimlik bilgilerini eklemeniz yeterlidir; gitmeniz iyi olur!
Aynı uygulamadan aynı anda birden fazla veritabanını gözlemlemek isterseniz, bu da mümkündür. Aşağıdaki yapılandırma dosyasıyla aynı web uygulamasında birden çok veritabanı yapılandırması görüntülenebilir:
Hızlı bir yapılandırma için PgHero yerel ortamda liman işçisi-oluşturmadeneyimine ile, sen benim göz atabilirsiniz depo bir liman işçisi-oluşturma konfigürasyon özellikleri. Ayrıca kendi ihtiyaçlarınıza göre artırabileceğiniz yukarıdaki veritabanı yapılandırma dosyasını da içerir.
Çalışma arkadaşlarımız için kullanım kolaylığını kolaylaştırmak için PgHero'nun web uygulamasını bir yerde barındırabilmek istiyoruz . Ancak bu basit bir iş değildir ve başvuruyu çevrimiçi yayınlamadan önce birkaç endişemiz var:
Yukarıdakiler daha önce bahsettiğimiz üç noktayı çözüyor mu?
Son olarak, sorgu değerlendirmesi için PgHero'yu kullanabilmek için , ikinci adımla aynı şekilde pg_stat_statements'ı etkinleştirmelisiniz . Sonradan anlaşıldı ki, PgHero kullanır pg_stat_statements sizin sorgunun performanslarını değerlendirmek için kaputun altında!
Benim , özellikle bulutta PgHero'yu kurmak çok büyük bir çaba gibi görünüyor. Bunun yerine sorguları izlemek için yönetilen bir çözüm varsa ne olur?
Görünüşe göre…… var! 28 Ocak 2021'den itibaren Cloud SQL'in yeni bir özelliği olan Query Insights kullanıma sunuldu. Bu, geliştiriciler olarak bizler için, birden fazla çemberin içinden geçmek zorunda kalmadan sorgularımızın performansını anlayabilmemiz için ek bir yol sağlar.
Cloud SQL'i kullanırken, veritabanının temel ölçümlerini izlemek için gösterge tablolarını içeren veritabanına ilişkin temel bir genel bakışa sahibiz. Query Insights, bu yardımcı programın üzerine kuruludur ve seçili veritabanı örneğinde çalışan sorguların bilgilerini izlememize olanak tanır.
PgHero'ya benzer şekilde, "Query Insights"ı incelerken, aynı sıralama alanlarına sahip benzer bir bilgi tablosu almalısınız:
"Paranızın karşılığını" biraz daha vererek, aynı zamanda veritabanı örneğinin kullanımını gösteren bir gösterge panosuna da sahiptir. Her ikisi de tüm sorguların sektörü için görüntülenebilir…
…ve özel sorgular için! Bu ne kadar şaşırtıcı!
Zamana göre sıralanmış sorguların önceki tablosundan, performansını ve etkisini görmek için herhangi bir sorguyu doğrudan seçebilirsiniz. PgHero'dan farklı olarak Query Insights, yalnızca mevcut zaman noktası için değil, aynı zamanda ayarlanabilir bir sorgu zaman aralığı boyunca bilgi sağlar. Bu, belirli bir zaman diliminde meydana gelen hata ayıklama olayları için "tatlı noktalara" ulaşmamızı sağlar. Bu özellikten, nelerin optimize edilebileceğini keşfetmek için başka bir alan olan uygulamamızın kullanım modellerini daha iyi anlamak için de yararlanabiliriz (örneğin, çok sık çağrılan sorguları önbelleğe alma). Burada, seçilen bir sorgunun toplu gecikme grafiğini görebilirsiniz:
Son olarak , Query Insights'taki sorgu planı, PgHero'nun yanı sıra veritabanı kabuğunda elde edebildiğimizden büyük bir yükseltmedir . Yazılı bir hesap ve değer planı yerine, geçen sorguyu görselleştirmek için bir web uygulaması alıyoruz - bu ne kadar harika!
Pekala, eğlenceli kısma geçelim, aracı ayarlayalım!
Query Insights'ı etkinleştirmek
Enable Query Insightsiçin veritabanınızı oluşturmadan önce onay kutusunu işaretlemeniz yeterlidir . Bekle, hepsi bu mu?!!
Birçok yönden PgHero ve Query Insights oldukça benzerdir. Bu amaçla, Cloud SQL'in Query Insights'ın PgHero ile karşılaştırmasını ve bunun tersini anlamak için daha yakın bir karşılaştırma yapmak istedim.
Yukarıdakileri karşılaştırırken, Query Insights , kurulum kolaylığının yanı sıra PgHero'dan daha fazla değer sağlıyor gibi görünüyor . Bunun en büyük dezavantajı, Google Cloud'un yönetilen bir aracı olarak avantajları diğer bulut sağlayıcılarına taşıyamamamız gibi görünüyor.
Bununla birlikte, her ikisini de desteklemenin maliyetinin, veritabanlarınızı ölçeklendirmenin maliyetiyle karşılaştırıldığında önemsiz olacağı göz önüne alındığında, her iki aracın da faydalarından yararlanmak mümkündür. Query Insights, sorguların periyodik olarak izlenmesi için kullanılabilirken, PgHero, veritabanı tablolarının ve dizinlerinin boyutunu tek tek izlemek için kullanılabilir ve her ikisi de sorgu performansını optimize etmek için toplu olarak kullanılabilir.
Sonuç olarak, sorgu performansı, uygulamanızın kullanıcılarınız tarafından doğrudan nasıl deneyimlendiği için çok önemlidir. Sorgularınızın performansını iyileştirmek için emrinizde olan araçları anlamak önemlidir.
PgHero ve Query Insights için özel panolar kullanıyor olsanız bile , nasıl kullanılacağını anlamak
EXPLAIN ANALYZE, özellikle de kötü sorguları ortadan kaldırmak için geliştirmenin ilk aşamasında etkili bir önlem olabilir.
Şimdiye kadar sorgularınızı daha performanslı hale getirme konusunu ele aldık - uygulamamızı optimize etmeye başladığımızda olağan sıkıntı noktası. Ölçeklenebilirlik ve dolayısıyla kullanılabilirlik ne olacak? Veritabanı yük devretmelerini araştırmaya , replikaları okumaya (ağır okuma gerektiren uygulamalar için) ve veritabanınızı bölümlere ayırmaya başlamanız gerekir . Google Cloud'da bu düzeyde ağır hizmet performansı sağlamak için yönetilen araçlar arıyorsanız Cloud Spanner'ı deneyin .
(1) — Sean Çalışması. Yükleme Süresi Sonuçlarınızı Nasıl Etkiler?
Birkaç gün önce çok ilginç bir şey oldu: Büyük bir şirketin battığını gördük. Bu duyulmamış bir şey değil, ancak genellikle bu konuda çok açık ve halka açık olmaktan kaçınmak için süreçleri var.
Bu yılın başlarında iki ay boyunca, Collab Lab'in bahar 2021 kohortunda diğer üç geliştiriciden ve üç danışmandan oluşan bir ekiple çalışma ayrıcalığına sahip oldum. Collab Lab'a aşina değilseniz, web sitelerine göre, katılımcılara “diğer erken kariyer geliştiricileriyle gerçek dünya projelerinde uzaktan çalışarak pratik deneyim kazanma fırsatı” sağlıyorlar.
İnternetten para kazanmak aslında o kadar da zor değil. İnsanların internetten para kazanmakta zorlanmasının birkaç nedeni vardır.
Küçüklüğümden beri koşu topluluğunun bir parçasıyım. Yedinci sınıftayken okulumun koşu takımına katıldım ve ondan önce bir basketbol oyuncusu olarak sahada çok koştum.
KAS GÜÇLENDİRME aktivitesi kardiyovasküler hastalık, kanser, tip 2 diyabet ve erken ölüm riskinizi azaltabilir mi? Aerobik aktiviteyi sıklıkla duyarız, ancak bugün halter gibi direnç egzersizlerinin sağlığa faydalarına dönüyoruz. Prospektif çalışmaların yakın tarihli bir incelemesi, içgörü sağlar.
Aşı oranları arttı ve kısıtlamalar gevşetildi. Bu pandemi henüz sona ermemiş olsa da, tamamen aşılanmış olanlar monotonluk ve kitle travmasından kurtulmaya ve bir mola vermeye kesinlikle hazır.
Owen Wilson, 'Loki'nin 2. bölümünün sonunda Mobius'un ihanete uğramış hissettiğini söylüyor, ancak aynı zamanda Loki'nin yeni bir yüzünün de yakında ortaya çıkacağını söylüyor.
Braunwyn Windham-Burke, 'RHOC'tan kovulduktan sonra duygularını açıklıyor ve Andy Cohen incinmesinin bir nedeni.
Başrollerini Joshua Sasse ve Mallory Jansen'in paylaştığı yeni Hallmark Channel filmi 'Her Pen Pal' Fransa'da çekildi.
Rick James, hem sahnede hem de sahne dışında vahşi maskaralıklarıyla tanınıyordu. Bir keresinde farkında olmadan Lionel Richie'nin kariyerine yardımcı oldu.
Gerçek şu ki, bu mega sellerden birini vurma şansınız her yıl aynıdır: yüzde 1.
Laboratuvarda yaratılan, sürdürülebilir ve çevresel etkisi azaltılmış yeni bir evcil hayvan mamaları dönemi geliyor. Ama evcil hayvanlar - ve onların insanları - bundan hoşlanacak mı?
O mükemmel kahve için dünyayı mı arıyorsunuz? Belki de kendi kahve çekirdeklerinizi kavurmanın güzel sanatlarını ve bilimini öğrenmenin yolu budur.
Yaratılış'ta sadece kısa bir kez ortaya çıkıyor, ancak İsa Mesih'in habercisi olarak görülüyor. O gerçekte neydi ve İsa ile nasıl ilişkilendirildi?
Kemba Walker Oklahoma City'ye gidiyor. Kabul et.
4. sıradaki Vanderbilt, büyük ölçüde takımın göze çarpan atışları sayesinde hepsini kazanmanın favorisi.
Mevcut aldatma skandalı göz önüne alındığında, Gerrit Cole'un bir gün Hall of Fame'de şansı var mı? 2022, Barry Bonds ve Roger Clemens'in Hall of Fame oylamasındaki son yılları olacak. 90'ların ve 00'ların iki beyzbol süperstarı, oy pusulasında son sekiz yılda giderek daha fazla oy topladı ve yüzdelerini 2014'te yaklaşık yüzde 35'ten yaklaşık 61'e çıkardı.
1987 yazında 16 yaşıma girdim. Stephanie Mills'in If You Were My Woman adlı klasik albümünü yayınladığı yaz mevsimiydi.
Will Smith'in ilham verici anı kitabı Will, 9 Kasım'da Penguin Press tarafından yayınlanacak.
Ünlülerin havalimanı görünümlerinin fotoğraflarını uzun süredir "sadece eğlence için" toplayan Rolling Stone yaratıcı yönetmeni Jodi Peckman, en sevdiği fotoğrafları Come Fly with Me adlı yeni kitabında bir araya getirdi.
Evli Chicago Med mezunları, karantinadan sağ çıkmayı, kızlarının en sevdiği yatmadan şarkılarını ve Hallmark Movies & Mysteries için yeni filmleri To Catch a Spy'ı çekmek için Malta'ya seyahat etmeyi konuşuyorlar
Hollywood'dan New York'a ve aradaki her yere, en sevdiğiniz yıldızların neler yaptığını görün