PL / PGSQL 함수 내에서 PostgreSQL 서버 성능을 모니터링 할 수 있습니까?

Aug 17 2020

서버에서 대량 쓰기 PL / PGSQL 함수를 실행하는 것이 '좋은 순간'인지 프로그래밍 방식으로 알고 싶습니다. '좋은 순간'이란로드 수준, 동시성 수준 또는 PostgreSQL 서버의 기타 규모에 대한 직접 또는 계산 된 지표를 숙고하는 것을 의미합니다.

성능 추적에 특화된 고급 응용 프로그램이 많이 있다는 것을 알고 있습니다. https://www.datadoghq.com. 그러나 저는 '더 나은 순간'이 올 때까지 이러한 무거운 쓰기 절차의 실행을 변경하거나 지연시키는 간단한 내부 KPI를 원합니다.

이러한 절차 중 일부는 테이블을 제거하고, 일부는 수백만 행에 대한 평균 / 합계 계산을 수행하고, 일부는 원격 테이블을 확인하는 등의 작업을 수행합니다. 동시 사용자 부담이 줄어들 때 '더 나은 순간'을 위해 몇 분 또는 몇 시간 동안 기다릴 수 있습니다.

어떤 생각?

답변

3 jjanes Aug 16 2020 at 23:56

다음과 같이 활성화 된 다른 세션의 수를 확인할 수 있습니다.

select count(*) from pg_stat_activity where state='active';

하지만 수퍼 유저이거나 pg_monitor 역할이 있어야합니다. 그렇지 않으면 다른 사용자의 세션에 대해 상태가 NULL이됩니다. 이것이 귀찮다면 SECURITY DEFINER를 사용하여이 정보에 대한 액세스를 허용하는 함수를 작성할 수 있습니다. (어쨌든 이것을 자체 함수에 넣어야합니다. 즉, 사용할 수있는 유일한 언어가 아니면 plpgsql에서 구현해야 할 이유가 없습니다.)

적절한 권한이있는 pl 언어를 사용하여 임의의 OS 작업을 호출 할 수도 있습니다. 그것은 남용에 의한 plpgsql 에서 포함됩니다COPY...FROM PROGRAM .