YugabyteDB의 pg_stat_statements
6435 단어 sqlyugabytedbpostgresmonitoring
pg_stat_statements
또는 호출pg_stat_statements_reset()
이 필요합니다. YugabyteDB는 클라우드 네이티브이므로 노드를 추가하고 제거할 수 있습니다. YugabyteDB Managed 또는 YugabyteDB Anywhere을 사용하면 자동으로 수행됩니다. YugabyteDB를 무료로 사용하고 있다면 자동화해야 합니다.여기에서 쉽게 할 수 있는 방법을 보여주고 있습니다.
먼저,
host
출처 및 ts
수집 시점의 타임스탬프를 사용하여 모든 노드에서 수집된 명령문을 보관할 테이블을 생성해 보겠습니다.drop table if exists ybwr_statements ;
create table ybwr_statements as
select now() as ts,'' as host, *
from pg_stat_statements where null is not null;
Create Table As Select를 사용하면 버전을 통해 발전할 수 있는 테이블 구조에 독립적입니다.
이제 예를 들어 모든 노드에서 수집할 plpgsql 코드입니다.
yb_servers()
에서 서버 목록을 쿼리합니다.ysqlsh
에 해당하는 psql
를 실행합니다.postmaster.opts
파일에서 찾았습니다. find
또는 yb-tserver
작업 디렉토리insert into ybwr_statements select '%s','%s',* from pg_stat_statements
에 STDIN으로 전달하는 ysqlsh
를 실행합니다pg_stat_statements_reset()
로 재설정했는데 수집이 성공했습니다(ysqlsh
로 -v ON_ERROR_STOP=1
호출) > /tmp/log.txt 2>&1
를 추가합니다. COPY FROM PROGRAM을 사용하여 쿼리를 -c
로 전달하고 출력을 테이블에 저장하는 것을 선호할 수 있습니다. 여기있어:
do $DO$
declare i record;
begin
for i in (select now() as ts, host from yb_servers()) loop
execute format(
$COPY$
copy (select $SQL$ insert into ybwr_statements select '%s','%s',* from pg_stat_statements; select pg_stat_statements_reset(); $SQL$ ) to program
$BASH$ $(awk '{sub("/postgres/bin/postgres .*","");print}' ./postmaster.opts)/bin/ysqlsh -h $(hostname) -v ON_ERROR_STOP=1 $BASH$
$COPY$
,i.ts,i.host);
end loop;
end;
$DO$
;
그런 다음
ybwr_statements
를 쿼리할 수 있습니다.select ts, host, calls, total_time, query
from ybwr_statements
order by total_time;
다음은 캡처 쿼리만 캡처한 유휴 데이터베이스의 예입니다.
이것은 기술을 보여주는 예입니다. 매시간처럼 예약할 수 있으며
ybwr_statements
테이블에 쿼리의 매시간 스냅샷이 있습니다. 호출하지 않도록 선택할 수 있으며pg_stat_statements_reset()
쿼리 시 스냅샷을 비교합니다.
Reference
이 문제에 관하여(YugabyteDB의 pg_stat_statements), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yugabyte/pgstatstatements-in-yugabytedb-5871텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)