Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Amazon Redshift WLM 메모리 할당을 사용 및 관리하려면 어떻게 해야 합니까?
대기열에 대한 동시성과 Amazon Redshift 워크로드 관리(WLM) 할당을 확인하려고 합니다.
간략한 설명
다음 방법 중 하나를 사용하여 WLM을 구성하고 리소스를 효율적으로 관리합니다.
- 자동 WLM: Amazon Redshift는 대기열의 동시성 수준과 발송된 각 쿼리의 메모리 할당을 관리합니다. 발송된 쿼리를 사용하면 각 쿼리 대기열에 대한 워크로드 또는 사용자의 쿼리 우선 순위를 정의할 수 있습니다.
- 수동 WLM: 대기열에 대한 동시성 수준 및 메모리 할당을 더욱 세밀하게 제어할 수 있습니다. 그에 따라 리소스 사용량이 높은 쿼리는 리소스를 더 많이 할당한 대기열에서 실행할 수 있습니다.
기계 학습을 사용하여 쿼리를 할당할 메모리의 양을 예측하기 때문에 자동 WLM을 사용하는 것이 좋습니다. 수동 WLM을 사용 중이고 자동 WLM으로 마이그레이션하려는 경우 수동 WLM에서 자동 WLM으로 마이그레이션을 참조하십시오.
참고: 지표 기반 성능 경계를 정의하려면 WLM 구성에서 쿼리 모니터링 규칙(QMR)을 사용하십시오.
해결 방법
대기열에 대한 동시성 수준 및 WLM 할당을 확인하려면 다음 작업을 수행합니다.
- Amazon Redshift 클러스터의 현재 WLM 구성을 확인합니다.
- 테스트 WLM 구성을 만들고, 쿼리 대기열의 분배 및 동시성 수준을 지정합니다.
- (선택 사항) 수동 WLM을 사용하는 경우 슬롯 수 간에 메모리가 분배되는 방식을 결정합니다.
현재 WLM 구성 및 메모리 사용량 확인
STV_WLM_SERVICE_CLASS_CONFIG 테이블을 사용하여 Amazon Redshift 클러스터의 현재 WLM 구성을 확인할 수 있습니다.
WLM 구성 예시:
[ { "query_concurrency": 2, "memory_percent_to_use": 30, "query_group": [], "query_group_wild_card": 0, "user_group": [ "user_group1" ], "user_group_wild_card": 0, "rules": [ { "rule_name": "BlockstoDiskSpill", "predicate": [ { "metric_name": "query_temp_blocks_to_disk", "operator": ">", "value": 50 } ], "action": "abort" } ] }, { "query_concurrency": 5, "memory_percent_to_use": 40, "query_group": [], "query_group_wild_card": 0, "user_group": [ "user_group2" ], "user_group_wild_card": 0 }, { "query_concurrency": 5, "memory_percent_to_use": 10, "query_group": [], "query_group_wild_card": 0, "user_group": [], "user_group_wild_card": 0, "rules": [ { "rule_name": "abort_query", "predicate": [ { "metric_name": "scan_row_count", "operator": ">", "value": 1000 } ], "action": "abort" } ] }, { "query_group": [], "query_group_wild_card": 0, "user_group": [], "user_group_wild_card": 0, "auto_wlm": false }, { "short_query_queue": false } ]
참고: 위의 WLM 구성 예시는 JSON 형식으로 QMR, 대기열 1을 사용합니다. 이 예시에서 memory_percent_to_use는 서비스 클래스에 할당된 작업 메모리의 실제 양입니다.
Amazon Redshift는 클러스터의 공유 리소스 풀에서 메모리를 할당합니다. 대기열 1에는 30%의 메모리가 할당되는데, 동시성이 2로 설정되기 때문에 2개의 동일한 슬롯으로 나뉩니다. 각 슬롯은 현재 메모리 할당량의 15%를 동일하게 차지합니다.
대기열 2에는 40%의 메모리가 할당되는데, 동시성이 5로 설정되기 때문에 5개의 동일한 슬롯으로 나뉩니다. 각 슬롯은 메모리 할당량의 8%를 동일하게 차지합니다. 기본 대기열은 대기열 동시성 수준이 5인 가운데 메모리 할당량 10%를 사용합니다.
다음 쿼리를 사용하여 서비스 클래스 구성을 확인합니다.
select rtrim(name) as name, num_query_tasks as slots, query_working_mem as mem, max_execution_time as max_time, user_group_wild_card as user_wildcard, query_group_wild_card as query_wildcard from stv_wlm_service_class_config where service_class > 4;
출력 예시:
name | slots | mem | max_time | user_wildcard | query_wildcard ----------------------------------------------------+-------+-----+----------+---------------+---------------- Service class for super user | 1 | 297 | 0 | false | false Queue 1 | 2 | 522 | 0 | false | false Queue 2 | 5 | 278 | 0 | false | false Default queue | 5 | 69 | 0 | false | false Service class for vacuum/analyze | 0 | 0 | 0 | false | false
대기열 1의 슬롯 수는 2개이고 각 슬롯 또는 노드에 할당된 메모리는 522MB입니다. 서비스 클래스에 할당된 메모리는 각 노드의 슬롯당 현재 작업 메모리의 실제 양(MB)입니다.
참고: 쿼리 슬롯을 모두 사용하는 경우 Amazon Redshift는 할당되지 않은 메모리를 관리합니다. 대기열에서 추가 메모리를 요청하면 시스템은 일시적으로 할당되지 않은 메모리를 대기열에 제공합니다.
할당되지 않은 메모리 관리에 대한 자세한 내용은 사용할 WLM 메모리 백분율을 참조하십시오.
상위 수준 튜닝 파라미터 식별
SVL_QUERY_METRICS_SUMMARY 테이블을 사용하여 세부 실행을 확인하고 query_queue_time 열을 사용하여 대기열에 있는 쿼리를 볼 수 있습니다. query_queue_time 열은 쿼리가 실행할 WLM 슬롯의 대기열에 있음을 보여줍니다.
테이블 예시:
dev=# select userid, query, service_class, query_cpu_time, query_blocks_read, query_execution_time, query_cpu_usage_percent, query_temp_blocks_to_disk, query_queue_time from SVL_QUERY_METRICS_SUMMARY where query=29608; userid | query | service_class | query_cpu_time | query_blocks_read | query_execution_time | query_cpu_usage_percent | query_temp_blocks_to_disk | query_queue_time --------+-------+---------------+----------------+-------------------+----------------------+-------------------------+---------------------------+------------------ 100 | 29608 | 8 | 18 | 942 | 64 | 10.05 | | (1 row) ev=# select query, step, rows, workmem, label, is_diskbased from svl_query_summary where query = 29608 order by workmem desc; query | step | rows | workmem | label | is_diskbased -------+------+----------+----------+-----------------------------------------+-------------- 29608 | 3 | 49999 | 54263808 | hash tbl=714 | f 29608 | 2 | 49999 | 0 | project | f 29608 | 0 | 49999 | 0 | scan tbl=255079 name=part | f 29608 | 1 | 49999 | 0 | project | f 29608 | 6 | 1561938 | 0 | return | f 29608 | 4 | 1561938 | 0 | project | f 29608 | 5 | 1561938 | 0 | project | f 29608 | 2 | 29995220 | 0 | project | f 29608 | 1 | 1561938 | 0 | return | f 29608 | 1 | 29995220 | 0 | project | f 29608 | 0 | 1561938 | 0 | scan tbl=4893 name=Internal Worktable | f 29608 | 3 | 1561938 | 0 | hjoin tbl=714 | f 29608 | 0 | 29995220 | 0 | scan tbl=255087 name=lineorder | f (13 rows)
SVL_QUERY_SUMMARY 테이블을 사용하여 쿼리의 각 단계에서 리소스 할당을 확인합니다.
is_diskbased 및 workmem 열을 확인하여 리소스 사용량을 확인합니다. 자세한 내용은 쿼리 요약 분석을 참조하십시오.
WLM 동적 구성 속성으로 업데이트
WLM 동적 구성 속성을 사용하여 변화하는 워크로드에 맞춰 조정합니다. 클러스터를 재부팅하지 않고도 데이터베이스에 동적 속성을 적용할 수 있습니다. 하지만 자동 WLM과 수동 WLM 간의 변경은 정적이며 적용하려면 클러스터를 재부팅해야 합니다.
자세한 내용은 STV_WLM_SERVICE_CLASS_CONFIG를 참조하십시오.
다음은 2개의 대기열로 구성된 클러스터 예시입니다.
Queue Concurrency % Memory to Use 1 5 60% 2 5 40%
클러스터에 사용 가능한 메모리 200GB가 있는 경우 각 대기열 슬롯에 대한 현재 메모리 할당은 다음 예시와 비슷합니다.
Queue 1: (200 GB * 60% ) / 5 slots = 24 GB Queue 2: (200 GB * 40% ) / 5 slots = 16 GB
WLM 구성 속성을 동적으로 업데이트하려면 설정을 수정합니다. 다음 수정 예시를 참조하십시오.
Queue Concurrency % Memory to Use 1 3 75% 2 4 25%
WLM 구성을 수정한 후에는 변경된 워크로드에 맞춰 메모리 할당이 업데이트됩니다. 다음 예시를 참조하십시오.
Queue 1: (200 GB * 75% ) / 3 slots = 50 GB Queue 2: (200 GB * 25% ) / 4 slots = 12.5 GB
참고: 동적 구성 업데이트 중에 WLM 대기열에 쿼리가 있는 경우 Amazon Redshift는 쿼리가 완료될 때까지 대기합니다. 쿼리가 완료되면 Amazon Redshift는 업데이트된 설정으로 클러스터를 업데이트합니다.
동적 WLM 구성 속성으로 전환할 때 STV_WLM_SERVICE_CLASS_CONFIG 테이블을 사용합니다.
num_query_tasks와 target_num_query_tasks 값이 다른 경우 동적 WLM 전환이 진행 중입니다. 값이 -1이면 자동 WLM이 구성되었음을 나타냅니다.
쿼리에 할당된 메모리가 부족한지 여부 확인
SVL_QUERY_SUMMARY의 쿼리 실행 계획에서 is_diskbased 값이 true인 경우 쿼리에 메모리를 추가로 할당하십시오. 더 많은 메모리를 할당하려면 쿼리 슬롯 수를 늘리십시오.
자세한 내용은 wlm_query_slot_count를 참조하십시오.

관련 콘텐츠
- 질문됨 5달 전lg...
- 질문됨 10달 전lg...
- 질문됨 10달 전lg...