SQL Server profil oluşturucusunun PostgreSQL eşdeğeri var mı?


84

Bir PostgreSQL sunucusuna gönderilen sorguları görmem gerekiyor. Normalde bu eylemi SQL Server alanında gerçekleştirmek için SQL Server profil oluşturucusunu kullanırdım, ancak bunu PostgreSQL'de nasıl yapacağımı henüz bulamadım. Oldukça fazla ücretli araç var gibi görünüyor, umarım bir açık kaynak varyantı vardır.

Yanıtlar:


59

Tüm sorguların listesini bir sunucuya almak için log_statement yapılandırma ayarını kullanabilirsiniz.

https://www.postgresql.org/docs/current/static/runtime-config-logging.html#guc-log-statement

Sadece bunu ve günlük dosyası yolunu ayarlayın ve listeye sahip olacaksınız. Ayrıca, yalnızca uzun süre çalışan sorguları günlüğe kaydedecek şekilde yapılandırabilirsiniz.

Daha sonra bu sorguları alabilir ve bunlara ne olduğunu öğrenmek için EXPLAIN çalıştırabilirsiniz.

https://www.postgresql.org/docs/9.2/static/using-explain.html


1
Mükemmel, buna karşı bir tail -f attı
BozoJoe

6
.Csv günlük dosyalarına "SQL Server profil oluşturucusunun eşdeğeri"
adını vermek zor

31

Joshua'nın cevabına ek olarak, şu anda hangi sorguların çalıştığını görmek için herhangi bir zamanda aşağıdaki ifadeyi yayınlayın (örneğin, PGAdminIII'nin sorgu penceresinde):

SELECT datname,procpid,current_query FROM pg_stat_activity;

Örnek çıktı:

     datname    | procpid | current_query
 ---------------+---------+---------------
  mydatabaseabc |    2587 | <IDLE>
  anotherdb     |   15726 | SELECT * FROM users WHERE id=123 ;
  mydatabaseabc |   15851 | <IDLE>
 (3 rows)

4
PG (9.3) sürümümle, aşağıdaki sorguyu kullandım: SELECT datname, pid, usename, application_name, client_addr, sorgu FROM pg_stat_activity; pg_stat_activity, 'postgresql' DB'nin bir görünümüdür
mrmuggles

3
SELECT client_addr, state_change, sorgu FROM pg_stat_activity;
Dmitry Dyachkov

3
"Sorgu" sütun uzunluğu, uzun sorguları görüntülemek için çok kısa.
Dejan Janjušević

25

PgBadger'ı ( http://dalibo.github.io/pgbadger/ ) keşfettim ve birçok kez hayatımı kurtaran harika bir araç. İşte bir rapor örneği: http://dalibo.github.io/pgbadger/samplev4.html . Açarsanız ve 'üst' menüye giderseniz, en yavaş sorguları ve zaman alan sorguları görebilirsiniz. Daha sonra ayrıntıları sorabilir ve soruları saat bazında gösteren güzel grafikleri görebilir ve detay düğmesini kullanırsanız SQL metnini güzel bir şekilde görebilirsiniz. Böylece bu aracın ücretsiz ve mükemmel olduğunu görebiliyorum.


2
Oldukça güzel bir araç. Resmi belge oldukça ayrıntılı olduğu için bu öğreticiyi yüklemek için kullandım: dhis2.org/analysing-postgresql-logs-using-pgbadger
mrmuggles

5
Aracın yalnızca Windows kullanıcıları için berbat * nix sistemleri için olduğuna dikkat edin
Alex Klaus

OP, Sql Server Profiler gibi bir araç istediğinde + 1, gerekli performans bilgilerini manuel olarak çıkarmak için seçenekleri yapılandırmaz.
EAmez

17

Bir PostgreSQL sunucusuna gönderilen sorguları görmem gerekiyor

Bir seçenek olarak, pgAdmin kullanıyorsanız (benim resmimde pgAdmin 4 v2.1). Sorguları "Gösterge Tablosu" sekmesi aracılığıyla gözlemleyebilirsiniz: uygulamadan, panodan pgadmin4 sorgusu


2
Bu, uzun SQL ifadelerini gösteremez. SQL kesilir.
Dejan Janjušević

0

Pg_stat_statements uzantısını kullanabilirsiniz .

Db'yi docker'da çalıştırıyorsanız sadece bu komutu ekleyin docker-compose.yml, aksi takdirde kurulumunuz için kurulum talimatlarına bakın:

command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c max_connections=200

Ve sonra db'de şu sorguyu çalıştırın:

CREATE EXTENSION pg_stat_statements;

Şimdi daha fazla zaman alan operasyonları görmek için:

SELECT * FROM pg_stat_statements ORDER BY total_time/calls DESC LIMIT 10;

Veya aradığınızı bulmak için bu görünümdeki diğer sorgularla oynayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.