느린 쿼리에 대한 인덱스 제안

  • 릴리스 버전: Yokohama
  • 업데이트 날짜 2025년 01월 30일
  • 읽기4분
  • ISE(Index Suggestion Engine)는 선택한 느린 쿼리에 대한 인덱스 제안을 생성할 수 있습니다. 느린 쿼리에 대한 인덱스 제안을 요청하면 ISE는 쿼리를 분석하고 쿼리 실행 시간을 개선할 수 있는 인덱스를 권장합니다.

    인덱스 제안을 사용하고 인덱스를 생성하도록 선택하는 경우 ISE는 14일 평가 기간 동안 해당 인덱스의 효과를 계속 검토합니다. ISE는 인덱스 관리를 위한 권장 사항을 포함하여 평가 중에 인덱스에 대한 세부 정보를 제공합니다.

    관리자는 ISE를 사용하여 다음을 수행합니다.
    • 느린 쿼리에 대한 인덱스 제안을 생성합니다.
    • 인스턴스에서 느린 쿼리에 대한 인덱스 제안을 검토합니다.
    • 평가 및 테스트를 위해 인덱스 제안을 비프로덕션 인스턴스로 익스포트합니다.
    • 만들 인덱스를 예약합니다.
    • 인덱스 평가 기간 동안 인덱스의 효과를 모니터링합니다.
    • 인덱스 성능을 테스트합니다(이 테스트는 인덱스의 즉각적인 성능 평가입니다).
    • ISE에서 권장하는 대로 쿼리 성능을 최적화하지 않는 인덱스를 삭제합니다.
    새 인스턴스와 업그레이드된 인스턴스에서는 인덱스 제안 엔진 플러그인(com.glide.index_suggestion)이 기본적으로 활성화됩니다.
    주:
    ISE는 MySQL 데이터베이스만 지원합니다.

    인덱스 제안의 작동 방식

    선택한 느린 쿼리에 대한 인덱스 제안을 요청하여 인덱스 제안 프로세스를 시작합니다. ISE는 느린 쿼리의 테이블에서 열 통계를 수집하는 일일 작업을 실행하여 카디널리티(테이블의 고유 열) 및 null/null이 아닌 개수와 같은 데이터를 수집합니다.

    그런 다음 ISE는 수집된 정보를 집계 및 분석하고, 느린 쿼리에 가중치 열 순위 지정 알고리즘을 적용하고, 쿼리에 대한 인덱스 제안을 생성합니다.

    인덱스 제안이 생성되면 제안을 검토하고 느린 쿼리에 대한 인덱스를 생성할지 여부를 결정합니다. 인덱스를 만들 때 ISE는 수명 주기를 통해 이동하는 인덱스에 대한 정보를 제공합니다. 다음 세 가지 주요 처리 단계를 통해 인덱스 제안을 추적할 수 있습니다.

    검토할 인덱스 제안
    이 초기 단계에서는 ISE가 느린 쿼리에 대해 생성한 인덱스 제안을 검토할 수 있습니다. 제안을 무시하거나, 추가 테스트를 위해 인덱스 제안을 비프로덕션 인스턴스로 익스포트하거나, 인덱스 생성을 예약할 수 있습니다. ISE가 인덱스 제안을 성공적으로 생성하고 인덱스 생성을 예약하도록 선택하면 인덱스 제안이 다음 처리 단계로 이동합니다. 그러나 데이터베이스에서 제안을 사용할 수 없거나 제안이 쿼리 성능을 저하시키는 경우 ISE는 인덱스 제안을 삭제하는 것이 좋습니다.
    인덱스 진행 중
    이 단계에서 ISE는 인덱스를 생성하고 14일 평가 기간이 시작됩니다. ISE는 인덱스가 쿼리 실행 시간을 개선하거나 저하시키는지 확인하기 위해 시간별 평가를 수행합니다. ISE는 수행할 수 있는 권장 작업을 포함하여 인덱스 상태를 업데이트합니다. 예를 들어, 인덱스가 느린 쿼리의 성능을 향상시키지 않는 경우 ISE는 인덱스를 삭제하도록 권고합니다. 그런 다음 데이터베이스에서 인덱스가 삭제되도록 예약할 수 있습니다. 이 단계에서는 ISE에서 삭제를 권장하는 경우에도 인덱스 성능을 테스트하거나 인덱스를 수락하도록 선택할 수도 있습니다.
    인덱스 완료
    마지막 처리 단계에서 ISE는 인덱스 및 관련 처리 작업의 최종 상태를 설명합니다. 인덱스가 느린 쿼리 시간을 개선하면 ISE는 인덱스 상태를 생성됨으로 변경하고 데이터베이스는 인덱스를 계속 사용합니다. 인덱스가 쿼리 시간을 개선하지 않고 인덱스를 삭제하도록 선택한 경우 ISE는 데이터베이스에서 인덱스를 삭제하고 인덱스 상태를 Dropped(삭제됨)로 변경합니다.
    그림 1. 인덱스 제안 수명주기
    인덱스 제안 수명주기의 처리 스테이지를 보여주는 흐름도

    인덱스 제안에 대한 처리 상태

    인덱스 제안 [sys_index_suggestion] 테이블은 인덱스가 세 가지 주요 처리 단계를 통과할 때 인덱스에 대한 상태 정보를 제공합니다.
    • 인덱스 제안 > 검토 대상
    • 인덱스 제안 > 진행 중
    • 인덱스 제안 > 완료

    ISE는 다음 상태를 사용하여 인덱스에 대한 처리 작업을 설명합니다.

    표 1. 인덱스 제안 상태
    상태 설명
    검토할 인덱스 그룹
    추천됨 ISE는 느린 쿼리에 대한 인덱스 제안을 생성했습니다.
    삭제 제안됨—사용되지 않음 데이터베이스가 느린 쿼리에 인덱스를 사용하지 않으므로 인덱스를 삭제하는 것이 좋습니다.
    삭제 제안됨—성능 저하 ISE에서는 인덱스가 쿼리 시간을 개선하거나 성능을 저하시키지 않았으므로 인덱스를 삭제할 것을 권장합니다.
    인덱스 진행 중
    작성 예약됨 인덱스 작성을 예약했습니다.
    작성 진행 중 ISE가 인덱스를 생성하고 있습니다.
    작성 실패 ISE에서 인덱스를 생성할 수 없습니다.
    효율성 평가 ISE는 인덱스를 생성했으며 14일 인덱스 평가 기간 동안 인덱스 성능을 평가하고 있습니다.
    삭제 제안됨—사용되지 않음 ISE에서는 데이터베이스가 느린 쿼리에 인덱스를 사용하지 않으므로 인덱스가 생성된 테이블에서 인덱스를 삭제하는 것이 좋습니다.
    삭제 제안됨—성능 저하 인덱스가 쿼리 시간을 개선하지 않았으므로 인덱스를 삭제하는 것이 좋습니다.
    삭제 예약됨 데이터베이스에서 인덱스를 삭제하도록 예약했습니다.
    P로그레스에 드롭 ISE가 데이터베이스에서 인덱스를 삭제하고 있습니다.
    삭제 실패

    ISE는 인덱스를 삭제할 수 없습니다. 지원이 필요한 경우 문의하십시오 고객 서비스 및 지원 .

    인덱스 완료
    작성됨 14일의 평가 기간 후 ISE는 인덱스가 쿼리 성능을 개선한 것으로 확인했습니다. 데이터베이스가 인덱스를 계속 사용함을 나타냅니다.
    무시됨 인덱스 제안을 무시하기로 선택했습니다.
    삭제됨 ISE가 인덱스를 성공적으로 삭제했습니다.
    수용됨 ISE에서 삭제를 권장했음에도 불구하고 인덱스를 유지하기로 선택했습니다.
    대체됨 최근 인덱스 제안이 동일한 테이블과 느린 쿼리에 대한 인덱스를 대체했습니다.