728x90
안녕하세요, 오랜만입니다.
오늘은 Redshift의 Cluster CPU가 갑자기 높아졌었던 당시 트러블 슈팅했던 내용에 대해서 다뤄보겠습니다.
CPU utilization의 경우 지난 6시간 기준으로 조회해 보았을때,
리더 노드가 아닌 컴퓨팅 노드들의 CPU가 평균 35%인 것을 확인하였습니다.
문제 시점 실행중인 쿼리는 없었음에도 Compute instance의 35% 전후 cpu 사용률을 보였습니다.
또한, 해당 시간 워크로드 실행 분석 차트에서도 plan / wait / comit / execution이 실행 중인 상태가 아니었습니다.
해당 내용의 경우, 부적절한 배포 키 또는 배포 스타일이 해당 문제의 원인이 아닐까 생각되었습니다.
왜냐하면, 부적절한 배포 키 혹은 배포 스타일은 노드 전체에서 분포 왜곡을 유발할 수 있기 때문입니다.
Cluster Performance > Recommendation > Improve Query Performance with Sort Keys에서 해당 내용 확인하실 수 있는데, Aws에서 권장하는 내용으로 분석한 내용을 확인하실 수 있습니다.
Sort Key와 함께 쿼리를 향상시킬 수 있으며,
리더 노드가 아닌 컴퓨팅 노드들의 CPU가 평균 35%인 것을 확인하였습니다.
문제 시점 실행중인 쿼리는 없었음에도 Compute instance의 35% 전후 cpu 사용률을 보였습니다.
또한, 해당 시간 워크로드 실행 분석 차트에서도 plan / wait / comit / execution이 실행 중인 상태가 아니었습니다.
해당 내용의 경우, 부적절한 배포 키 또는 배포 스타일이 해당 문제의 원인이 아닐까 생각되었습니다.
왜냐하면, 부적절한 배포 키 혹은 배포 스타일은 노드 전체에서 분포 왜곡을 유발할 수 있기 때문입니다.
Cluster Performance > Recommendation > Improve Query Performance with Sort Keys에서 해당 내용 확인하실 수 있는데, Aws에서 권장하는 내용으로 분석한 내용을 확인하실 수 있습니다.
Sort Key와 함께 쿼리를 향상시킬 수 있으며,
Interleaved sort key 대신 복합 정렬키를 사용하시길 권장하고 있습니다.
복합 정렬 키가 있는 테이블은 VACUUM REINDEX 작업이 필요하지 않기 때문에 성능 향상 외에도 유지 관리 오버헤드를 크게 줄일 수 있습니다.
하지만, 테이블이 작을 경우에는 정렬 키가 없는 것이 더 효율적입니다.
이러한 경우 정렬 키를 사용하면 이점 없이 스토리지 오버헤드가 발생합니다.
INTERLEAVED 정렬 키를 COMPOUND 정렬 키로 변경하거나 정렬 키를 제거하시려면 다음 쿼리를 실행하시기 바랍니다.
하지만, 테이블이 작을 경우에는 정렬 키가 없는 것이 더 효율적입니다.
이러한 경우 정렬 키를 사용하면 이점 없이 스토리지 오버헤드가 발생합니다.
INTERLEAVED 정렬 키를 COMPOUND 정렬 키로 변경하거나 정렬 키를 제거하시려면 다음 쿼리를 실행하시기 바랍니다.
-- Database: "gip"ALTER TABLE /*iskru-20465d70-5745-4bb8-89e4-e09d6a3ce8eb-g0-0*/ "gipdw"."bd_sup_sub_sup_m" ALTER SORTKEY ("sub_sup_cd", "upper_sup_cd");ALTER TABLE /*iskru-20465d70-5745-4bb8-89e4-e09d6a3ce8eb-g0-1*/ "gipdw"."bd_sect_sect_m" ALTER SORTKEY NONE;
하기 쿼리는 장기 실행되는 쿼리가 무엇인지 확인하실 수 있는 쿼리입니다.
Select query, cpu_time / 1000000 as cpu_seconds
from stl_query_metrics where segment = -1 and cpu_time > 1000000000
order by cpu_time;
참조 링크 : https://aws.amazon.com/ko/premiumsupport/knowledge-center/redshift-high-cpu-usage/
https://aws.amazon.com/ko/blogs/big-data/amazon-redshift-engineerings-advanced-table-design-playbook-preamble-prerequisites-and-prioritization/
https://aws.amazon.com/ko/blogs/big-data/amazon-redshift-engineerings-advanced-table-design-playbook-distribution-styles-and-distribution-keys/
이외에 도움이 되실만한 쿼리는 다음과 같습니다.
- 현재 실행 중인 쿼리를 확인하시려면 :
select user_name, db_name, pid, query
from stv_recents
where status = 'Running';
2. 클러스터에서 현재 실행 중인 쿼리를 확인하실 경우 :
select * from STV_INFLIGHT;
3. Vacuum 확인 쿼리 :
select * from svv_vacuum_progress;
4. Analyze 확인 쿼리 :
select * from stl_analyze;
5. mv 상태 확인 쿼리 :
select * from stv_mv_info;
또한, Redshift 콘솔의 'Query and loads' 탭을 통해 데이터베이스에서
실행 중인 모든 쿼리가 확인 가능합니다.
Amazon Redshift 콘솔은 데이터베이스에서 실행되는 쿼리 및 로드에 대한 정보를 제공합니다.
이 정보를 사용하여 처리하는 데 시간이 오래 걸리고 병목 현상이 발생하여 다른 쿼리가 효율적으로
처리되지 못하는 쿼리를 식별하고 문제를 해결할 수 있습니다.
감사합니다.
728x90
반응형
'IT > AWS' 카테고리의 다른 글
서버리스 애플리케이션을 위한 CI/CD 워크플로우 만들기 #1 (0) | 2023.01.11 |
---|---|
AWS EBS 스토리지 비용이 많이 발생하는 경우 팁 (0) | 2022.12.28 |
S3 보안 모범 사례 (0) | 2022.08.17 |
AWS 보안 그룹 인바운드룰 sdk / awscli를 통해 추가하기 (0) | 2022.07.15 |
EC2 CPU Steal (0) | 2022.02.25 |