다음을 통해 공유


Azure Database for PostgreSQL - 유연한 서버에서 인덱스 튜닝으로 생성된 인덱스 권장 사항 사용

인덱스 튜닝은 azure_sys 데이터베이스의 intelligentperformance 스키마 아래에 있는 테이블 집합에 권장 사항을 유지합니다.

현재 이러한 목적을 위해 Azure Portal 페이지 빌드를 사용하거나, 쿼리를 실행하여 azure_sys 데이터베이스의 intelligent performance 내에서 사용할 수 있는 두 개의 뷰에서 데이터를 검색하는 방식으로 해당 정보를 읽을 수 있습니다.

Azure Portal을 통해 인덱스 권장 사항 사용

  1. Azure Portal에 로그인하고 Azure Database for PostgreSQL 유연한 서버 인스턴스를 선택합니다.

  2. 메뉴의 지능형 성능 섹션에서 인덱스 튜닝 을 선택합니다.

    • 기능을 사용하도록 설정했지만 권장 사항이 아직 생성되지 않은 경우 화면은 다음과 같습니다.

      기능을 사용하도록 설정했지만 권장 사항이 없는 경우 '인덱스 튜닝' 페이지의 측면을 보여 주는 스크린샷.

    • 이 기능이 현재 사용하지 않도록 설정되어 있고 이전에 권장 사항을 생성하지 않은 경우 화면은 다음과 같습니다.

      기능이 비활성화되고 권장 사항이 없는 경우 '인덱스 튜닝' 페이지의 측면을 보여 주는 스크린샷.

    • 기능이 사용하도록 설정되어 있고 권장 사항이 아직 생성되지 않은 경우 화면은 다음과 같습니다.

      기능이 활성화되어 있고 권장 사항이 없는 경우 '인덱스 튜닝' 페이지의 측면을 보여 주는 스크린샷.

    • 기능이 사용하지 않도록 설정되어 있지만 권장 사항이 생성된 적이 있는 경우 화면은 다음과 같습니다.

      기능이 비활성화되고 권장 사항이 있을 때 '인덱스 튜닝' 페이지의 측면을 보여 주는 스크린샷.

  3. 사용 가능한 권장 사항이 있는 경우 인덱스 권장 사항 보기 요약을 선택하여 전체 목록에 액세스합니다.

    권장 사항이 있을 때 '인덱스 튜닝' 페이지의 측면과 전체 목록을 가져오는 방법을 보여 주는 스크린샷.

  4. 목록에는 사용 가능한 모든 권장 사항이 표시되며 각 권장 사항에 대한 몇 가지 세부 정보가 표시됩니다. 기본적으로 목록은 마지막 권장 순서를 기준으로 내림차순으로 정렬되며 맨 위에 가장 최근의 권장 사항이 표시됩니다. 그러나 다른 열을 기준으로 정렬할 수 있으며 필터링 상자를 사용하여 데이터베이스, 스키마 또는 테이블 이름에 제공된 텍스트가 포함된 항목에 표시되는 항목 목록을 줄일 수 있습니다.

    몇 가지 권장 사항이 있는 '인덱스 권장 사항' 페이지의 모습을 보여 주는 스크린샷.

  5. 특정 권장 사항에 대한 추가 정보를 보려면 해당 권장 사항의 이름을 선택하고 인덱스 권장 사항 세부 정보 창이 화면 오른쪽에 열리면 권장 사항에 대한 사용 가능한 모든 세부 정보가 표시됩니다.

    특정 권장 사항 하나에 대한 '인덱스 권장 사항 세부 정보' 창의 모습을 보여 주는 스크린샷.

azure_sys 데이터베이스에서 사용할 수 있는 뷰를 통해 인덱스 권장 사항 사용

  1. 인스턴스에 연결할 수 있는 권한이 있는 역할을 사용하여 서버에서 사용할 수 있는 azure_sys 데이터베이스에 연결합니다. public 역할의 구성원은 이러한 보기에서 읽을 수 있습니다.
  2. 뷰에서 쿼리를 sessions 실행하여 권장 사항 세션에 대한 세부 정보를 검색합니다.
  3. 뷰에서 쿼리를 recommendations 실행하여 CREATE INDEX 및 DROP INDEX에 대한 인덱스 튜닝으로 생성된 권장 사항을 검색합니다.

azure_sys 데이터베이스의 뷰를 활용하면 인덱스 튜닝으로 생성된 인덱스 권장 사항에 편리하게 액세스하고 이러한 항목을 검색할 수 있습니다. 특히, createindexrecommendationsdropindexrecommendations 뷰에는 각각 CREATE INDEX 및 DROP INDEX 권장 사항에 대한 자세한 정보가 포함되어 있습니다. 이러한 뷰에는 세션 ID, 데이터베이스 이름, 관리자 유형, 튜닝 세션의 시작 및 중지 시간, 권장 사항 ID, 권장 사항 유형, 권장 사항 이유 및 기타 관련 세부 정보와 같은 데이터가 표시됩니다. 사용자는 이러한 뷰를 쿼리하여 인덱스 튜닝으로 생성된 인덱스 권장 사항에 쉽게 액세스하고 분석할 수 있습니다.

intelligentperformance.sessions

뷰는 sessions 모든 인덱스 튜닝 세션에 대한 모든 세부 정보를 노출합니다.

열 이름 데이터 형식 설명
session_id uuid 시작된 모든 새 튜닝 세션에 할당된 전역 고유 식별자입니다.
database_name varchar(64) 인덱스 튜닝 세션이 실행된 컨텍스트의 데이터베이스 이름입니다.
session_type intelligentperformance.recommendation_type 이 인덱스 튜닝 세션에서 생성할 수 있는 권장 사항 유형을 나타냅니다. 가능한 값은 다음과 CreateIndexDropIndex같습니다. 형식 세션은 형식의 CreateIndex CreateIndex 권장 사항을 생성할 수 있습니다. 형식 세션 DropIndex 은 권장 사항 또는 ReIndex 형식을 DropIndex 생성할 수 있습니다.
run_type intelligentperformance.recommendation_run_type 이 세션이 시작된 방법을 나타냅니다. 가능한 값은 Scheduled입니다. 값 index_tuning.analysis_interval에 따라 자동으로 실행되는 세션에는 실행 형식 Scheduled이 할당됩니다.
state intelligentperformance.recommendation_state 세션의 현재 상태를 나타냅니다. 가능한 값은 Error, Success, InProgress입니다. 실행이 실패한 세션은 .로 Error설정됩니다. 권장 사항을 생성했는지 여부에 관계없이 실행을 올바르게 완료한 세션은 다음과 같이 Success설정됩니다. 여전히 실행 중인 세션은 .로 InProgress설정됩니다.
start_time 표준 시간대가 없는 타임스탬프 이 권장 사항을 생성한 튜닝 세션이 시작된 타임스탬프입니다.
stop_time 표준 시간대가 없는 타임스탬프 이 권장 사항을 생성한 튜닝 세션이 시작된 타임스탬프입니다. 세션이 진행 중이거나 일부 오류로 인해 중단된 경우 NULL입니다.
recommendations_count 정수 이 세션에서 생성된 총 권장 사항 수입니다.

intelligentperformance.recommendations

뷰는 recommendations 기본 테이블에서 데이터를 계속 사용할 수 있는 튜닝 세션에서 생성된 모든 권장 사항에 대한 모든 세부 정보를 표시합니다.

열 이름 데이터 형식 설명
recommendation_id 정수 전체 서버에서 권장 사항을 고유하게 식별하는 숫자입니다.
last_known_session_id uuid 모든 인덱스 튜닝 세션에는 전역 고유 식별자가 할당됩니다. 이 열의 값은 가장 최근에 이 권장 사항을 생성한 세션의 값을 나타냅니다.
database_name varchar(64) 컨텍스트에서 권장 사항을 생성한 데이터베이스의 이름입니다.
recommendation_type intelligentperformance.recommendation_type 생성된 권장 사항의 유형을 나타냅니다. 가능한 값은 CreateIndex, DropIndex, ReIndex입니다.
initial_recommended_time 표준 시간대가 없는 타임스탬프 이 권장 사항을 생성한 튜닝 세션이 시작된 타임스탬프입니다.
last_recommended_time 표준 시간대가 없는 타임스탬프 이 권장 사항을 생성한 튜닝 세션이 시작된 타임스탬프입니다.
times_recommended 정수 이 권장 사항을 생성한 튜닝 세션이 시작된 타임스탬프입니다.
reason text 이 권장 사항이 생성된 이유를 정당화하는 이유입니다.
recommendation_context json 권장 사항의 영향을 받는 쿼리에 대한 쿼리 식별자 목록, 권장되는 인덱스 유형, 스키마 이름 및 인덱스가 권장되는 테이블의 이름, 인덱스 열, 인덱스 이름 및 권장 인덱스의 예상 크기(바이트)를 포함합니다.
인덱스 권장 사항을 만드는 이유

인덱스 튜닝에서 인덱스 생성을 권장하는 경우 다음 이유 중 하나 이상을 추가합니다.

원인
Column <column> appear in Join On clause(s) in query <queryId>
Column <column> appear in Equal Predicate clause(s) in query <queryId>
Column <column> appear in Non-Equal Predicate clause(s) in query <queryId>
Column <column> appear in Group By clause(s) in query <queryId>
Column <column> appear in Order By clause(s) in query <queryId>
인덱스 권장 사항을 삭제하는 이유

인덱스 튜닝이 잘못된 것으로 표시된 인덱스를 식별하면 다음과 같은 이유로 인덱스를 삭제할 것을 제안합니다.

The index is invalid and the recommended recovery method is to reindex.

인덱스가 잘못된 것으로 표시되는 이유와 시기에 대한 자세한 내용은 PostgreSQL의 REINDEX 공식 설명서를 참조하세요.

인덱스 권장 사항을 삭제하는 이유

인덱스 튜닝이 적어도 설정된 index_tuning.unused_min_period일 수에 대해 사용되지 않는 인덱스를 검색하면 다음과 같은 이유로 인덱스를 삭제할 것을 제안합니다.

The index is unused in the past <days_unused> days.

인덱스 튜닝이 중복 인덱스를 검색하면 중복 항목 중 하나가 유지되고 나머지 인덱스를 삭제할 것을 제안합니다. 제공된 이유에는 항상 다음과 같은 시작 텍스트가 있습니다.

Duplicate of <surviving_duplicate>.

각 중복 항목을 삭제하기 위해 선택한 이유를 설명하는 다른 텍스트가 뒤에 잇습니다.

원인
The equivalent index "<surviving_duplicate>" is a Primary key, while "<droppable_duplicate>" is not.
The equivalent index "<surviving_duplicate>" is a unique index, while "<droppable_duplicate>" is not.
The equivalent index "<surviving_duplicate>" is a constraint, while "<droppable_duplicate>" is not.
The equivalent index "<surviving_duplicate>" is a valid index, while "<droppable_duplicate>" is not.
The equivalent index "<surviving_duplicate>" has been chosen as replica identity, while "<droppable_duplicate>" is not.
The equivalent index "<surviving_duplicate>" was used to cluster the table, while "<droppable_duplicate>" was not.
The equivalent index "<surviving_duplicate>" has a smaller estimated size compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has more tuples compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has more index scans compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has been fetched more times compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has been read more times compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has a shorter length compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has a smaller oid compared to "<droppable_duplicate>".

인덱스가 중복으로 인해 이동식일 뿐만 아니라 적어도 설정된 일 수에 index_tuning.unused_min_period대해 사용되지 않는 경우 다음 텍스트가 그 이유에 추가됩니다.

Also, the index is unused in the past <days_unused> days.

인덱스 권장 사항 적용

인덱스 권장 사항에는 권장 사항을 구현하기 위해 실행할 수 있는 SQL 문이 포함되어 있습니다.

다음 섹션에서는 특정 권장 사항에 대해 이 문을 가져오는 방법을 보여 줍니다.

문이 있으면 원하는 PostgreSQL 클라이언트를 사용하여 서버에 연결하고 권장 사항을 적용할 수 있습니다.

Azure Portal에서 인덱스 튜닝 페이지를 통해 SQL 문 가져오기

  1. Azure Portal에 로그인하고 Azure Database for PostgreSQL 유연한 서버 인스턴스를 선택합니다.

  2. 메뉴의 지능형 성능 섹션에서 인덱스 튜닝 을 선택합니다.

  3. 인덱스 튜닝이 이미 권장 사항을 생성했다고 가정하고 인덱스 권장 사항 보기 요약을 선택하여 사용 가능한 권장 사항 목록에 액세스합니다.

    권장 사항이 있을 때 '인덱스 튜닝' 페이지의 측면과 전체 목록을 가져오는 방법을 보여 주는 스크린샷.

  4. 권장 사항 목록에서 다음 중 하나를 수행합니다.

    • SQL 문을 가져올 권장 사항의 오른쪽에 있는 줄임표를 선택하고 SQL 스크립트 복사를 선택합니다.

      '인덱스 권장 사항' 페이지에서 SQL 문을 복사하는 방법을 보여 주는 스크린샷.

    • 또는 권장 사항의 이름을 선택하여 인덱스 권장 사항 세부 정보를 표시하고 SQL 스크립트 텍스트 상자에서 클립보드로 복사 아이콘을 선택하여 SQL 문을 복사합니다.

      '인덱스 권장 사항 세부 정보' 페이지에서 SQL 문을 복사하는 방법을 보여 주는 스크린샷.