EDB Tutorial: EDB Query Advisor를 최대한 활용하는 방법
Dilip Kumar August 07, 2023
엔터프라이즈급 데이터베이스와 DBA의 역할
엔터프라이즈급 데이터베이스는 쿼리 성능을 극대화하는 역할을 담당하는 DBA(Database Administrator)가 필수적입니다. 특히, 대규모 데이터베이스를 운영할 때 DBA의 작업을 최소화하는 것이 중요합니다. 성능을 개선하는 주요 과제 중 하나는 적절한 인덱스를 선택하는 것입니다. 이를 효과적으로 수행하려면 DBA는 데이터베이스 워크로드의 광범위한 부분을 분석한 뒤, 정기적으로 나타나고 워크로드에서 큰 비중을 차지하는 쿼리 계획을 분석해야 합니다. 이후 DBA는 어떤 인덱스가 도움이 될지 평가할 수 있습니다. 하지만, 경우에 따라 이러한 분석이 잘못될 수도 있고, 특정 인덱스를 추가하면 성능이 오히려 저하될 수도 있습니다.자동 인덱스 선택 도구의 필요성
자동 인덱스 선택 도구는 실제 인덱스를 생성하지 않고도 워크로드 전반에 유용한 인덱스를 식별하는 데 도움을 줄 수 있습니다. EDB Query Advisor는 이러한 자동 인덱스 추천 도구 중 하나로, 실시간 워크로드 통계를 지속적으로 수집하여 그에 기반한 인덱스를 추천합니다. 이 도구는 실제 워크로드에 대해 가상(hypothetical) 인덱스를 실험하여 유용하지 않을 가능성이 있는 인덱스는 추천하지 않도록 설계되었습니다. 또한, 추천된 각 인덱스의 예상 크기와 비용 절감률을 제공하므로, 사용자는 이를 토대로 해당 인덱스를 생성할지 판단할 수 있습니다.EDB Query Advisor의 차별점
일부 데이터베이스의 인덱스 추천 도구와 달리, EDB Query Advisor는 다중 열로 구성된 복합 인덱스뿐만 아니라 워크로드 분석에 기반한 다양한 유형의 인덱스를 추천할 수 있는 기능을 제공합니다. 또한, 이 도구는 최소한의 부하로 설계되어 있어 운영 중인 프로덕션 시스템에서도 성능에 대한 우려 없이 사용할 수 있습니다.작동 원리
- 워크로드 데이터 수집
쿼리가 실행될 때, Query Advisor는 쿼리의 조건(predicate)과 워크로드 정보를 수집합니다. 이를 위해
pg_qualstats
코드를 수정한 버전을 사용하며, 수집된 데이터는 해시(hash) 형태로 저장됩니다. - 인덱스 추천 프로세스 사용자가 인덱스 추천을 요청하면, 수집된 통계를 바탕으로 인덱스 후보를 생성합니다. 이후, HypoPG 도구를 사용하여 가상(hypothetical) 인덱스를 생성하고 이를 기반으로 최적의 인덱스를 추천합니다.
- 최적화된 인덱스 선정 프로세스의 각 단계에서 수집된 워크로드에 가장 큰 이점을 제공하면서 부하를 최소화하는 인덱스를 선택합니다.
EDB Query Advisor는 DBA의 업무를 효율적으로 지원하면서 데이터베이스 성능을 최적화할 수 있는 강력한 도구로 자리 잡을 것입니다.
Query Advisor 사용 방법
EDB Query Advisor 구성
postgresql.conf
파일에서shared_preload_libraries
파라미터에query_advisor
를 추가하세요:
- Postgres를 재시작하세요.
- 데이터베이스에서 EDB Query Advisor 확장을 생성하세요:
Query Advisor 구성 파라미터
다음의 사용자 정의 GUC 파라미터는 EDB Query Advisor 확장의 동작을 제어합니다. 이 파라미터를 수정한 후, 변경 사항을 적용하려면 Postgres를 재로드하세요:query_advisor.enabled
- Query Advisor를 활성화할지 여부를 지정합니다. Boolean 값을 가지며, 기본값은
true
입니다.
- Query Advisor를 활성화할지 여부를 지정합니다. Boolean 값을 가지며, 기본값은
query_advisor.sample_rate
- 샘플링할 쿼리 비율을 설정합니다. Double 값을 가지며, 예를 들어
0.1
은 10개의 쿼리 중 1개를 샘플링한다는 의미입니다. - 기본값은
-1
이며, 이는 자동으로 설정되며1 / max_connections
값을 사용합니다.
- 샘플링할 쿼리 비율을 설정합니다. Double 값을 가지며, 예를 들어
query_advisor.max_qual_entries
- 추적할 최대 조건(predicate) 수를 설정합니다.
query_advisor.max_workload_entries
- 추적할 최대 워크로드 쿼리 수를 설정합니다.
query_advisor.max_workload_query_size
- 워크로드 쿼리의 최대 크기를 설정합니다.
인덱스 추천 생성
- 인덱스 추천을 생성하려면
query_advisor_index_recommendation()
함수를 호출하세요. - 이 함수는 추천된 인덱스를 생성하는 정확한 SQL 문을 제공합니다.
- 인덱스 문과 함께 워크로드에 대한 예상 크기와 예상 비용 절감 비율(%)도 제공합니다.
- 따라서 크기와 비용 절감 비율에 따라 DBA는 해당 인덱스를 생성할 가치가 있는지 결정할 수 있습니다.
EDB 영업 기술 문의: 02-501-5113
이메일: salesinquiry@enterprisedb.com
홈페이지 문의: https://www.enterprisedb.com/contact_kr