2011-02-08 35 views
6

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

5

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?

+0

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

+0

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. –

+0

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

1

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.

İlgili konular