Uzun süredir çalışan bir plpgsql saklı yordamının performansını artırmaya çalışıyorum, ancak profil oluşturma araçlarının mevcut olup olmadığını bilmiyorum. Böyle bir prosedürün nasıl görüntüleneceğine dair önerilerde bulunabilir mi?plpgsql yordamları nasıl yapılır
cevap
Veritabanının zaman harcadığı yeri görmek için clock_timestamp() da dahil olmak üzere bazı yordamlardan 'u kaldırın. Ve prosedürleri mümkün olduğunca basit hale getirin.
Bize bir örnek gösterebilir misiniz?
Başlamak için logging of all statements'u Postgres günlüğüne açabilirsiniz. Günlük, her ifade için çalışma zamanını içerecektir. Bu şekilde en yavaş sorguları tanımlayabilir ve bunları optimize etmeyi deneyebilirsiniz.
Ama Frank'in gönderisine yorumunuzu okurken, sorunun döngü olduğunu tahmin ediyorum. Döngüden kurtulmaya çalışın ve her şeyi tek bir sorguda yapın. Çok fazla satır okuyan bir deyim, yalnızca birkaç satır okuyan çok sayıda ifadeden genellikle daha verimlidir.
pg_stat_statements uzantısını (http://www.postgresql.org/docs/9.2/static/pgstatstatements.html) kullanmayı deneyin. Tüm ifadeler için çağrı numarasını ve toplam çağrı süresini gösterebilir (plpgsql prosedürleri içindeki alt ifadeler dahil).
Şu anda bu soruya daha iyi cevaplar arıyor ve bu araç rastladım var: http://www.openscg.com/2015/02/postgresql-plpgsql-profiler/ de Hosted: https://bitbucket.org/openscg/plprofiler
Bu toplam süre de dahil olmak üzere aradığınızı size iddiaFonksiyonun her satırında harcanan. Henüz daha araştırmamıştık, ancak yazarın iddialarına dayanarak iyimseriz.
- 1. plpgsql fonksiyon tablosunu (..)
- 2. Kayıtlı yordamları görünümlere eşleme
- 3. mysql saklı yordamları nasıl derler?
- 4. clr saklı yordamları
- 5. plpgsql: FROM yan tümcesine birleştirme sonucu
- 6. PostgreSQL saklı yordamları (işlevleri) için uygun sözdizimi nedir?
- 7. SQLCLR saklı yordamları giriş parametresi
- 8. Dize parametrelerine sahip Delphi yordamları
- 9. İç içe geçmiş saklı yordamları saklı yordamları aramada kullanın Sql Server 2008
- 10. T-SQL saklı yordamları için regresyon testleri
- 11. Yürütme SqlFiddle'da saklı yordamları tetikler. Mysql
- 12. Azure Cosmos DB Saklı Yordamları nasıl hata ayıklanır?
- 13. depolanan yordamları nasıl dışa aktarır ve içe aktarırsınız phpmyadmin
- 14. Tüm saklı yordamları belirli bir veritabanından nasıl yükleyebilirim
- 15. Tüm SQL depolanmış yordamları bir kerede nasıl en aza indirir
- 16. Spring/Hibernate/JPA içinde PostgreSQL işlevlerini (saklı yordamları) doğru olarak nasıl çağırılır?
- 17. Bir değer plpgsql ile bir tam sayı ise nasıl kontrol edilir?
- 18. mysql yordamları ile ilgili hata HATA 1304 & HATA 1305
- 19. Münhasır yazım nasıl yapılır, ancak münhasır olmayan okumalar nasıl yapılır?
- 20. Jquery'de Yapıştır nasıl yapılır?
- 21. JQuery lightbox nasıl yapılır?
- 22. DataGrid nasıl şeffaf yapılır?
- 23. Sahte aramalar nasıl yapılır?
- 24. Nasıl Yapılır ODataQueryOptions
- 25. Nasıl yapılır: Örnek
- 26. Stil geçişi nasıl yapılır
- 27. Aslanım nasıl yapılır?
- 28. Nasıl yapılır Mock
- 29. Android'de bildirim nasıl yapılır?
- 30. Başlangıç görevleri nasıl yapılır?
Prosedürde değişiklik gerektirmeyen bir yöntem olmasını umuyordum, ancak bu muhtemelen hiçbir şeyden daha iyi olamazdı. http://www.depesz.com/index.php/2010/03/18/profiling-stored-proceduresfunctions/document benzer bir prosedür, ancak kullanılabilir veriler elde etmek için aşırı karmaşık görünüyor. Prosedür, bir Solr veri içe aktarma işleyicisi sorgusu için belge oluşturmak için kullanılan iç içe geçmiş döngüler kümesidir; – Aneurysm9
Bunu yapmak için harika bir yol değil, ama bu tek yol. Bu yüzden de işleri kısa ve basit tutmak önemlidir: diğer prosedürlerde olduğu gibi, kısa prosedürler de hata ayıklama ve profilleme için çok daha kolaydır. –
Maalesef, prosedür alabileceği kadar basit. Bazı verileri seçerek, n üzerinde yineleyerek, daha fazla veri seçerek, iç içe geçmiş 1: n ilişkilerini yineleyerek, daha sonra tam bir satır hazır olduğunda iç döngüden RETURN NEXT ile bir grup 1: n arasındaki ilişkiyi yürütür. SELECT veya FOR'den daha karmaşık olan her şey diğer prosedürlere zaten koyulmuştur. – Aneurysm9