자동 WLM을 사용하여 Amazon Redshift에서 워크로드를 관리하려면 어떻게 해야 합니까?

6분 분량
0

여러 워크로드가 있고 자동 워크로드 관리(WLM)를 사용하여 별도의 대기열을 만들려고 합니다. Amazon Redshift 자동 WLM을 사용하여 워크로드를 관리하고 우선 순위를 정하려면 어떻게 해야 합니까?

간략한 설명

Amazon Redshift 자동 WLM은 메모리와 동시성을 동적으로 관리하므로 혼합 워크로드에 대한 쿼리의 우선 순위를 지정할 수 있습니다. Amazon Redshift는 자동 WLM을 사용하여 다음 조건에 따라 리소스 할당을 관리합니다.

  • 쿼리가 Amazon Redshift에 제출되면 쿼리 우선 순위에 따라 리소스가 할당됩니다.
  • 경쟁 워크로드가 없는 경우 우선 순위가 낮은 쿼리는 모든 시스템 리소스에 액세스할 수 있습니다.
  • 동시 워크로드의 경우 우선 순위가 높은 쿼리가 선택됩니다. 우선 순위가 높은 쿼리에는 우선 순위가 낮은 쿼리보다 더 많은 리소스가 할당됩니다.
  • 우선 순위가 높은 워크로드에 대한 예측 가능한 성능은 우선 순위가 낮은 다른 워크로드를 희생하여 수행됩니다.
    참고: 우선 순위가 낮은 쿼리는 느린 속도로 진행될 수 있습니다. 그러나 Amazon Redshift는 우선 순위가 낮은 쿼리에 성능 부족 현상이 발생하지 않도록 합니다.
  • 우선 순위가 낮은 워크로드는 우선 순위 상태 또는 적은 리소스로 인해 더 오래 실행될 수 있습니다.

Amazon Redshift 자동 WLM을 효과적으로 사용하려면 다음을 고려하십시오.

  • 대기열에 우선 순위를 할당합니다.
  • 쿼리 우선 순위를 변경합니다.
  • 쿼리 우선 순위를 모니터링합니다.
  • 쿼리가 지정된 우선 순위에 따라 실행 중인지 확인합니다.

해결 방법

대기열에 우선 순위 할당

자동 WLM을 사용하여 워크로드를 관리하려면 다음 단계를 수행하십시오.

1.    워크로드를 정의하고 범주로 분리합니다(예: ETL, 대시보드 및 분석).

2.    개별 사용자를 식별하고 워크로드에 따라 그룹화합니다.

3.    특정 사용자 또는 쿼리 그룹에 따라 대기열을 만들고 할당합니다. 자세한 내용은 대기열에 쿼리 할당을 참조하십시오.

4.    Amazon Redshift에서 필요할 때 자동으로 클러스터 용량을 추가할 수 있도록 대기열에 대한 동시성 확장을 켭니다. 예를 들어 트래픽이 폭발하는 경향이 있는 경우 대기열에서 동시성 확장을 사용하도록 켤 수 있습니다. 자세한 내용은 동시성 조정 대기열 구성을 참조하세요.

다음은 자동 WLM에 대한 JSON 구성의 예입니다.

[ {
  "query_group" : [ ],
  "query_group_wild_card" : 0,
  "user_group" : [ "ETL_users" ],
  "user_group_wild_card" : 1,
  "priority" : "highest",
  "queue_type" : "auto",
  "auto_wlm" : true    
}, {
  "query_group" : [ ],
  "query_group_wild_card" : 0,
  "user_group" : [ "Dashboard_users" ],
  "user_group_wild_card" : 0,
  "priority" : "high",
  "queue_type" : "auto",
  "auto_wlm" : true
}, {
  "query_group" : [ "Adhoc_query" ],
  "query_group_wild_card" : 1,
  "user_group" : [ "Analytics_users" ],
  "user_group_wild_card" : 1,
  "priority" : "normal",
  "queue_type" : "auto",
  "auto_wlm" : true
}, {
  "query_group" : [ ],
  "query_group_wild_card" : 0,
  "user_group" : [ ],
  "user_group_wild_card" : 0,
  "priority" : "low",
  "queue_type" : "auto",
  "auto_wlm" : true
}, {
  "short_query_queue" : true
} ]

참고: 쿼리 우선 순위를 설정하지 않으면 모든 대기열이 자동으로 “정상” 우선 순위 상태로 설정됩니다.

쿼리 우선 순위 변경

Amazon Redshift에서는 WLM 쿼리 모니터링 규칙(QMR) 또는 기본 제공 함수를 사용하여 대기열 우선 순위를 변경할 수 있습니다.

방법 1: WLM 쿼리 모니터링 규칙

성능 한도 기반 지표에 따라 워크로드를 관리하려는 경우 WLM 쿼리 모니터링 규칙을 사용합니다. WLM 쿼리 모니터링 규칙을 설정할 때 쿼리 우선 순위 지표 및 쿼리 우선 순위 작업을 지정합니다. 예를 들면 다음과 같습니다.

{
  "query_group" : [ ],
  "query_group_wild_card" : 0,
  "user_group" : [ ],
  "user_group_wild_card" : 0,
  "rules" : [ {
    "rule_name" : "long_running_queries",
    "predicate" : [ {
      "metric_name" : "query_execution_time",
      "operator" : ">",
      "value" : 3600
    } ],
    "action" : "change_query_priority",
    "value" : "high"
  } ],
  "priority" : "low",
  "queue_type" : "auto",
  "auto_wlm" : true
}, {
  "short_query_queue" : true
} ]

방법 2: 기본 제공 함수

중요: 기본 제공 함수에는 적절한 권한이 필요합니다. 기본 제공 함수를 사용하려면 superuser이거나 superuser가 함수 사용 권한을 부여해야 합니다.

Amazon Redshift에서 기본 제공 함수는 WLM 구성과 별개입니다. 표준 사용자에게 기본 제공 함수를 사용할 수 있는 권한을 부여하려면 SECURITY DEFINER를 지정하는 저장된 프로시저를 만듭니다. 그런 다음 표준 사용자에게 사용 권한을 부여합니다.

superuser는 다음과 같은 기본 제공 함수를 사용하여 쿼리 우선 순위를 변경할 수 있습니다.

참고: “중요” 우선 순위 상태는 기본 제공 기능을 통해서만 할당할 수 있습니다. 한 번에 하나의 중요한 쿼리만 시스템에서 허용됩니다.

쿼리 우선 순위 모니터링

대기열 또는 활성 쿼리에 대한 쿼리 우선 순위를 확인하려면 다음 쿼리를 실행합니다.

select query, service_class, query_priority, state from stv_wlm_query_state where service_class>=100;

완료된 쿼리의 쿼리 우선 순위를 확인하려면 다음 쿼리를 사용합니다.

select query, service_class, service_class_start_time as starttime, query_priority

from stl_wlm_query where query=<query_id>;

QMR 규칙 때문에 쿼리 우선 순위가 변경되었는지 확인하려면 다음 쿼리를 사용하십시오.

select * from stl_wlm_rule_action where query= <Query_ID> and action= ‘change_query_priority’;

출력에서 action_value 열을 확인하여 쿼리의 변경된 우선 순위를 확인합니다.

QMR 구성을 확인하려면 다음 쿼리를 실행합니다.

select * from stv_wlm_QMR_config where action= ‘change_query_priority’;

query_group 파라미터의 현재 값을 확인하려면 다음 쿼리를 실행합니다.

select current_setting(‘query_group’);

자동 WLM 대기열 구성을 확인하려면 다음 쿼리를 실행합니다.

select s.service_class,
rtrim(s.name) as name, s.num_query_tasks as slots, s.query_working_mem as mem, s.max_execution_time as max_time, s.user_group_wild_card as user_wildcard, s.query_group_wild_card as query_wildcard,
rtrim(c.condition) as condition, s.query_priority from stv_wlm_service_class_config s left join stv_wlm_classification_config c on s.service_class = c.action_service_class where s.service_class > 4 order by service_class;

참고: auto_wlm이 켜지고 ‘true’로 설정된 경우 서비스 클래스 ID는 100-107을 나타냅니다. num_query_tasksquery_working_mem 열은 -1의 값을 나타냅니다.

쿼리가 할당된 우선 순위에 따라 실행 중인지 확인

쿼리는 할당된 우선 순위, 쿼리 모니터링 규칙 및 사용자 그룹 및 쿼리 그룹에 대해 일치하는 와일드카드를 기반으로 대기열로 라우팅됩니다. 그런 다음 Amazon Redshift는 일치하는 첫 번째 대기열에 자동으로 쿼리를 할당합니다.

쿼리가 원하는 대기열에서 실행되지 않는 경우 다음 조건에 해당하는지 확인하세요.

  • 사용자 또는 query_group이 ‘superuser’로 설정된 경우: 사용자 또는 쿼리 그룹이 ‘superuser’로 설정된 경우 쿼리는 superuser 대기열(service_class = 5)에서 실행됩니다.
  • 사용자가 사용자 그룹의 구성원으로 나열되지만 특정 쿼리에 대해 다른 쿼리 그룹이 할당됩니다. 나열된 그룹 구성원과는 다른 쿼리 그룹에 쿼리가 할당되면 일치하는 첫 번째 대기열에서 실행됩니다. 기본적으로 Amazon Redshift의 쿼리는 대기열의 설정된 우선 순위에 따라 실행됩니다.
  • 기본 제공 함수 사용에 대한 부적절한 사용 권한: 기본 제공 함수(예: CHANGE_QUERY_PRIORITY, CHANGE_USER_PRIORITYCHANGE_QUERY_PRIORITY)를 사용하는 경우 superuser 권한이 있어야 합니다. 또는 기본 제공 함수를 사용할 수 있도록 superuser가 적절한 사용 권한을 부여해야 합니다.
  • 사용자가 여러 그룹의 구성원인 경우: 사용자가 여러 그룹의 구성원으로 나열되는 경우 쿼리는 일치하는 첫 번째 대기열에 할당됩니다. 대기열 일치는 WLM 쿼리 할당 규칙에 따라 수행됩니다.

쿼리 우선 순위가 성공적으로 변경되었는지 확인하려면 다음 쿼리를 실행합니다.

select query, service_class, query_priority, state from stv_wlm_query_state where query= <Query_ID>;

사용자가 여러 그룹의 구성원으로 나열되어 있는지 확인하려면 다음 쿼리를 실행합니다.

SELECT usename, groname
FROM pg_user, pg_group
WHERE pg_user.usesysid = ANY(pg_group.grolist)
AND pg_group.groname in (SELECT DISTINCT pg_group.groname from pg_group);

쿼리 그룹이 쿼리에 대해 설정되었는지 여부를 확인하려면 다음 쿼리를 실행합니다.

select q.userid, q.query, rtrim(q.label) as label, w.service_class, w.query_priority from stl_query q join stl_wlm_query w on q.query = w.query where q.query = <Query_ID>;

쿼리의 그룹 구성원을 확인하려면 출력의 label 열을 확인합니다. 쿼리에 일치하는 쿼리 또는 사용자 그룹이 없으면 쿼리는 기본 대기열에서 실행됩니다.


AWS 공식
AWS 공식업데이트됨 2년 전