CPU Skew 가 과도하게 높은 경우
CPU skew는 데이터가 클러스터의 노드 간에 고르게 분배되지 않아서 특정 노드가 과도하게 높은 CPU 사용률을 보일 때 발생한다. 이는 성능 저하를 유발할 수 있으며, 여러 원인이 있을 수 있다.
특정 인스턴스에 데이터가 몰려있으면 작업을 처리할 때까지, master 에선 결과를 계속 기다린다. 결국 전체가 하향평준화되는 느낌을 받는다.
몰려있을 경우 영향
1. 데이터 분포의 불균형
- 테이블의 데이터가 고르게 분포되지 않은 경우: 특정 노드에 데이터가 집중되어 있는 경우, 해당 노드가 다른 노드보다 더 많은 작업을 처리하게 된다. 이는 데이터 분할 키(distribution key) 선택이 적절하지 않은 경우에 발생할 수 있다.
- 잘못된 분할 키: 분할 키가 특정 값에 집중되어 있는 경우, 예를 들어, 특정 값이 매우 빈번하게 나타나는 경우, 데이터가 특정 노드에 집중될 수 있다.
2. 쿼리 실행 계획의 문제
- 해시 조인: 조인 작업 시 해시 테이블이 특정 노드에만 생성되는 경우, 해당 노드가 과도한 로드를 처리해야 할 수 있다.
- 잘못된 테이블 스캔: 특정 테이블 스캔이 한 노드에서만 수행되는 경우, 해당 노드의 CPU 사용률이 급격히 증가할 수 있다.
3. 리소스 할당 및 관리의 문제
- 리소스 큐 설정 문제: 리소스 큐(Resource Queue)가 잘못 설정된 경우, 특정 쿼리가 과도한 리소스를 소비하여 다른 노드가 과부하에 걸릴 수 있다.
- 워크로드 관리: 특정 노드에만 집중된 작업이 계속해서 할당되는 경우, 해당 노드가 과부하 상태가 될 수 있다.
4. 하드웨어 및 네트워크 문제
- 네트워크 병목 현상: 네트워크 대역폭이 특정 노드에서 제한되는 경우, 해당 노드의 작업이 지연될 수 있다.
- 하드웨어 불균형: 클러스터 내 노드 간의 하드웨어 성능이 균일하지 않은 경우, 성능 차이로 인해 CPU skew가 발생할 수 있다.
데이터 분포 확인 및 재분배
- 분할 키 재검토: 데이터가 고르게 분포되도록 적절한 분할 키를 선택한다.
- 데이터 재분배: 필요 시 데이터 분포를 고르게 하기 위해 테이블을 다시 분할(rebalance)한다.
- 참고:분산키 변경 작업은 테이블 사용을 못하게 락이 걸리기 때문에 영향도 파악해서 작업해야 한다.
분산키 변경은 언제?
인스턴스 별로 데이터 차이가 20% 이상 차이날 경우
Skew Table 검색 방법
SELECT gp_segment_id, COUNT(*)
FROM 테이블명
GROUP BY gp_segment_id
ORDER BY 1
Skew 확인
$ cat skew_base.sql
select 'SELECT '''||a.schemaname||'.'||a.tablename||''' tb_nm, Avg(Row_Count), max(Row_Count),(1-
(Avg(Row_Count)/Max(Row_Count)))*100 as Skew_Pct FROM (SELECT gp_segment_id, count(*) as Row_Count FROM
'||a.schemaname||'.'||a.tablename||' GROUP BY gp_segment_id ) A;' qry
from pg_tables a
left outer join pg_partitions b
on a.tablename = b.tablename
left outer join pg_class c
on a.tablename = c.relname
where b.tablename is null
and relstorage <> 'x'
group by a.schemaname, a.tablename
order by 1
$ psql -AXtf skew_base.sql > skew_all.sql
# Background 실행
$ nohup psql -ef skew_all.sql > skew_rslt.log 2>&1 &
50만건 이상이면서, 분산도가 5% 이상인 리스트 확인 방법
grep "|" skew_rslt.log | grep -v tb_nm | awk -F"|" '$4>10 {print$0}' | awk -F"|" '$3>25000 {print$0}'
반응형
'DB > PostgreSQL' 카테고리의 다른 글
쿼리 튜닝용 파라미터 (0) | 2024.08.24 |
---|---|
수동으로 데이터 재분배 (0) | 2024.08.06 |
GPDB -> HDFS -> GPDB 로드 (0) | 2024.08.05 |
Greenplum PXF (0) | 2024.08.05 |
MPP (Massively Parallel Processing) 시스템 (0) | 2024.08.04 |