postgresql
집계 함수
수색…
간단한 통계 : min (), max (), avg ()
테이블 열의 값에 대한 간단한 통계를 결정하기 위해 집계 함수를 사용할 수 있습니다.
individuals
테이블이 :
이름 | 나이 |
---|---|
앨리 | 17 |
아만다 | 14 |
알라나 | 20 |
이 문장을 작성하여 최소값, 최대 값 및 평균값을 얻을 수 있습니다.
SELECT min(age), max(age), avg(age)
FROM individuals;
결과:
최소 | 최대 | 평균 |
---|---|---|
14 | 20 | 17 |
string_agg (표현식, 구분 기호)
string_agg()
함수를 사용하여 구분 기호로 구분 된 문자열을 연결할 수 있습니다.
individuals
테이블이 :
이름 | 나이 | 국가 |
---|---|---|
앨리 | 15 명 | 미국 |
아만다 | 14 | 미국 |
알라나 | 20 | 러시아 제국 |
SELECT ... GROUP BY
문을 써서 각 국가의 이름을 얻을 수 있습니다.
SELECT string_agg(name, ', ') AS names, country
FROM individuals
GROUP BY country;
string_agg()
는 집계 함수이기 때문에 GROUP BY
절을 사용해야합니다.
결과:
이름 | 국가 |
---|---|
알리, 아만다 | 미국 |
알라나 | 러시아 제국 |
더 많은 PostgreSQL 집계 함수가 여기에 설명되어 있습니다.
regr_slope (Y, X) : (X, Y) 쌍에 의해 결정되는 최소 제곱 피트 선형 방정식의 기울기
regr_slope (Y, X)를 사용하는 방법을 설명하기 위해 실제 문제에 적용했습니다. Java에서 메모리를 올바르게 정리하지 않으면 쓰레기가 걸려서 메모리를 가득 채울 수 있습니다. 매 시간마다 다른 클래스의 메모리 사용률을 덤프하고 분석을 위해 포스트 그레스 데이터베이스에로드합니다.
모든 메모리 누수 후보자는 더 많은 시간이 지남에 따라 더 많은 메모리를 소비하는 경향이 있습니다. 이 추세를 플로팅하면 선이 위로 올라가고 왼쪽으로 향하는 것을 상상할 수 있습니다.
^
|
s | Legend:
i | * - data point
z | -- - trend
e |
( |
b | *
y | --
t | --
e | * -- *
s | --
) | *-- *
| -- *
| -- *
--------------------------------------->
time
힙 덤프 막대 그래프 데이터 (얼마나 많은 메모리를 소비하는지에 대한 클래스 매핑)가있는 테이블이 있다고 가정합니다.
CREATE TABLE heap_histogram (
-- when the heap histogram was taken
histwhen timestamp without time zone NOT NULL,
-- the object type bytes are referring to
-- ex: java.util.String
class character varying NOT NULL,
-- the size in bytes used by the above class
bytes integer NOT NULL
);
각 클래스의 기울기를 계산하려면 클래스별로 그룹화하십시오. HAVING 절> 0은 양의 기울기 (선이 위로 가고 왼쪽)가있는 후보 만 얻는 것을 보장합니다. 슬로프를 내림차순으로 정렬하여 맨 위에 가장 큰 메모리 증가율을 가진 클래스를 얻습니다.
-- epoch returns seconds
SELECT class, REGR_SLOPE(bytes,extract(epoch from histwhen)) as slope
FROM public.heap_histogram
GROUP BY class
HAVING REGR_SLOPE(bytes,extract(epoch from histwhen)) > 0
ORDER BY slope DESC ;
산출:
class | slope
---------------------------+----------------------
java.util.ArrayList | 71.7993806279174
java.util.HashMap | 49.0324576155785
java.lang.String | 31.7770770326123
joe.schmoe.BusinessObject | 23.2036817108056
java.lang.ThreadLocal | 20.9013528767851
출력에서 우리는 java.util.ArrayList의 메모리 소비가 초당 71.799 바이트로 빠르게 증가하는 것을 볼 수 있으며 잠재적으로 메모리 누수의 일부입니다.