성능 스키마를 사용하여 AWS RDS MySQL 5.7+에서 장기 실행 ALTERS를 모니터링하는 방법

5458 단어 mysqlqueriesawsrds
하나/다수의 대용량 테이블이 있고 ALTER를 실행할 때마다 몇 시간, 심지어 며칠이 걸리는 MySQL RDS 데이터베이스가 있기 때문에 이 페이지를 방문했을 것입니다. 불행히도 MySQL은 이를 모니터링하는 쉬운 방법을 제공하지 않으며 RDS 모니터링이나 AWS의 RDS 성능 개선 도우미도 제공하지 않습니다.

다행스럽게도 MySQL 5.7부터 진행 정보에 대한 지원이 있었고 이는 스테이지 이벤트를 사용하여 성능 스키마로 구현되었습니다. 자세한 설명(및 MySQL 8에서 아래 작업을 수행하는 더 좋은 방법)을 보려면 이 우수한 문서article를 읽어 보시기 바랍니다. 이 기사에서는 MySQL 5.7에 중점을 둘 것입니다.

그렇다면 RDS에서는 어떻게 할까요?
  • 데이터베이스의 매개변수 그룹에서 performance_schema 매개변수를 1로 설정합니다(⚠매개변수를 적용하려면 인스턴스를 재부팅해야 함).


  • 일단 매개변수가 적용되었습니다. 다음 쿼리 실행

    -- Enable events_stages_current to monitor threads
    UPDATE performance_schema.setup_consumers 
    SET ENABLED = 'YES' 
    WHERE NAME = 'events_stages_current';
    
    -- Check results of below to see that ENABLED 
    -- and EnabledWithHierarchy are both "YES"
    SELECT 
        NAME, 
        ENABLED, 
        sys.ps_is_consumer_enabled(NAME) AS EnabledWithHierarchy 
    FROM performance_schema.setup_consumers 
    WHERE NAME = 'events_stages_current';
    


  • 위의 작업이 수행되면 잘 진행됩니다. 이제 변경을 시작하고 이 쿼리를 실행하여 진행 상황을 확인할 수 있습니다.

    SELECT 
        stmt.THREAD_ID, 
        stmt.SQL_TEXT, 
        stage.EVENT_NAME AS State,
            stage.WORK_COMPLETED, 
        stage.WORK_ESTIMATED,
      ROUND(100*stage.WORK_COMPLETED/stage.WORK_ESTIMATED, 2) AS CompletedPct
    FROM performance_schema.events_statements_current stmt
    INNER JOIN performance_schema.events_stages_current stage
    ON stage.THREAD_ID = stmt.THREAD_ID
    AND stage.NESTING_EVENT_ID = stmt.EVENT_ID
    
    -- ALTERNATIVELY
    ----------------
    -- SELECT 
    --  thd_id, 
    --     conn_id, 
    --     db, 
    --     command, 
    --     state, 
    --     current_statement,
    --     statement_latency, 
    --     progress, 
    --     current_memory, 
    --     program_name
    -- FROM sys.session
    -- WHERE progress IS NOT NULL;
    

  • 다음과 같이 표시되어야 합니다(여기서 WORK_COMPLETED는 변경된 행 수이고 WORK_ESTIMATED는 변경해야 할 행 수이며 CompletedPct는 완료율입니다.) 업데이트된 값을 확인해야 할 때마다 이 쿼리를 실행합니다.

  • 그게 다입니다. 이제 RDS 데이터베이스에서 장기 실행 쿼리를 모니터링할 수 있기를 바랍니다!


    안녕하세요 Emmanuel입니다! 저는 소프트웨어, AWS 및 DevOps에 대해 글을 씁니다.

    이 기사가 마음에 들었고 더 보고 싶다면 저를 추가하거나 저를 팔로우하세요.

    좋은 웹페이지 즐겨찾기