PostgreSQL sunucu performansını bir PL / PGSQL işlevi içinden izlemek mümkün müdür?
Bu kulağa garip gelebilir, çünkü bir sunucuda yoğun yazılan bir PL / PGSQL işlevini yürütmenin 'iyi bir an' olup olmadığını programlı olarak bilmek istiyorum. 'İyi an' derken, yük seviyesinin, eşzamanlılık seviyesinin veya PostgreSQL sunucusunun herhangi bir başka büyüklüğünün doğrudan veya hesaplanmış göstergelerini düşünmeyi kastediyorum.
Performans izlemede uzmanlaşmış bir dizi gelişmiş uygulama olduğunun farkındayım, örneğin https://www.datadoghq.com. Ancak, bu yoğun yazma prosedürlerinin yürütülmesini 'daha iyi bir an' gelene kadar değiştiren veya geciktiren basit bir dahili KPI istiyorum.
Bu prosedürlerden bazıları tabloları temizler, bazıları milyonlarca satır üzerinden ortalama / toplam hesaplamaları yapar, bazıları uzak tabloları kontrol eder, vb. Eşzamanlı kullanıcı baskısı düştüğünde 'daha iyi bir an' için dakikalar veya saatler bekleyebilirler.
Herhangi bir fikir?
Yanıtlar
Aşağıdaki gibi başka kaç seansın aktif olduğunu görebilirsiniz:
select count(*) from pg_stat_activity where state='active';
Ancak bir süper kullanıcı olmanız veya pg_monitor rolüne sahip olmanız gerekir, aksi takdirde diğer kullanıcıların oturumları için durum NULL olacaktır. Bu sizi rahatsız ediyorsa, bu bilgilere erişime izin vermek için SECURITY DEFINER ile bir işlev yazabilirsiniz. (Muhtemelen bunu yine de kendi işlevine koymalısınız, bu da sizin için mevcut olan tek dil olmadığı sürece plpgsql'de uygulanması gerekmediği anlamına gelir.)
Ayrıca uygun şekilde ayrıcalıklı bir pl dili kullanarak herhangi bir rasgele işletim sistemi işlemlerini başlatabilirsiniz. Bu , suistimal ederek , plpgsql'den içerirCOPY...FROM PROGRAM
.