PostgreSQL은 필드에 따라 평균을 적용한 후 다른 필드를 삽입하여 하나의 예제를 수행합니다.

서버 부하 상태 모니터링을 할 때 부하의 최고치로 인해 쓸모없는 경보가 발생하는 문제를 피하기 위해 제가 사용한 방법은 최근 10회의 부하 평균치를 취하는 것입니다.이전에 이 수요는 직접django에서 프로그램으로 해결되었지만, 일정 시간 실행된 후 속도가 매우 이상적이지 않다.현재 해결의 사고방식은 먼저 새로운 데이터를 삽입할 때 데이터베이스에 부하 계산을 다른 필드에 놓고 django에서 각 서버의 부하 평균값을 계산하는 코드를 삭제하고 부하 값을 직접 읽는 평균값으로 바꾸는 것이다.데이터베이스 서버의 현재 압력이 크지 않기 때문에 트리거를 늘린 후 성능에 미치는 영향은 별로 고려하지 않았다.

평균값을 계산하다


PostgreSQL 계산 평균값은 다음과 같습니다.
with s as (select cast(load_15 as float) from asset_serverstatus where sid_id=10 order by id desc limit 10) select avg(load_15) from s

트리거 함수

CREATE OR REPLACE FUNCTION fn_status_loadavg_insert()
 RETURNS trigger AS
$BODY$
BEGIN
 update asset_serverstatus set load_avg=(
 with s as (select cast(load_15 as float) from asset_serverstatus where sid_id=new.sid_id order by id desc limit 10) select avg(load_15) from s
 ) where id=new.id;
return new;
END;
$BODY$
 LANGUAGE plpgsql VOLATILE
 COST 100;

pgsql로 트리거의 함수를 썼는데 기본적인 사고방식은 사실 업데이트입니다.

테이블에 트리거 추가

CREATE TRIGGER trg_status_loadavg_insert
 AFTER INSERT
 ON asset_serverstatus
 FOR EACH ROW
 EXECUTE PROCEDURE fn_status_loadavg_insert();

이렇게 하면 PostgreSQL 데이터베이스에서 어떤 조건에 따라 어떤 필드의 평균 값을 추출하여 다른 필드에 삽입하는 실현이 완성된다.
기록하다.
원문 주소:http://www.sijitao.net/2030.html

좋은 웹페이지 즐겨찾기