데이터베이스 성능 권장 사항 (Azure PSQL)

안녕하세요,

저희는 Azure에서 “Azure Database for PostgreSQL” 인스턴스를 사용하여 Discourse 기반 포럼을 운영하고 있습니다. 이 서비스의 장점 중 하나는 "데이터베이스 특성"과 사용량에 기반한 성능 권장 사항입니다.
Azure로 마이그레이션한 이후, 누락된 인덱스와 아마도 중복된 인덱스에 대한 몇 가지 힌트를 받게 되었는데, 이를 여러분과 공유하고 싶습니다.
누락된 인덱스를 생성한 후 전반적인 성능이 약간(크진 않지만) 향상된 것을 확인했지만, DROP INDEX 권장 사항은 적용할 수 없었습니다. 이는 향후 업데이트/DB 마이그레이션을 잠재적으로 깨뜨릴 수 있기 때문입니다. 어쨌든, 이러한 인덱스를 삭제해도 안전한지, 아니면 성능에 부정적인 영향을 미칠지 판단하기 어렵습니다.

다음은 Azure가 생성하도록 권장한 인덱스입니다(영향도 “낮음” 및 “중간”):
create-indexes.csv (1.5 KB)

다음은 “이미 커버된” 인덱스에 대한 권장 사항입니다:

요약

public.optimized_images 테이블에서 index_optimized_images_on_upload_id 인덱스를 삭제하세요.
이유: 인덱스가 index_optimized_images_on_upload_id_and_width_and_height에 의해 커버됩니다.

public.post_revisions 테이블에서 index_post_revisions_on_post_id 인덱스를 삭제하세요.
이유: 인덱스가 index_post_revisions_on_post_id_and_number에 의해 커버됩니다.

public.post_timings 테이블에서 post_timings_summary 인덱스를 삭제하세요.
이유: 인덱스가 post_timings_unique에 의해 커버됩니다.

public.topic_links 테이블에서 index_topic_links_on_topic_id 인덱스를 삭제하세요.
이유: 인덱스가 unique_post_links에 의해 커버됩니다.

public.post_uploads 테이블에서 index_post_uploads_on_post_id 인덱스를 삭제하세요.
이유: 인덱스가 idx_unique_post_uploads에 의해 커버됩니다.

이러한 “DROP” 권장 사항은 신중하게 대해야 한다고 생각합니다. 성능을 향상시키기보다는 전체 DB 크기에만 영향을 미칠 것 같기 때문입니다. 예를 들어, 저희 전체 DB는 약 120GB를 사용하며, 이 모든 권장 사항을 적용해도 422MB만 해제됩니다. Azure 자체도 영향을 "낮음"으로 정의하고 있습니다. 따라서 이는 단순한 정리 작업에 불과한 것으로 보입니다.

위에서 언급했듯이, 이는 성능을 약간 조정하는 데 도움이 될 수 있으므로 여러분과 공유하고자 합니다. 이러한 인덱스 외에도 Azure 서비스를 사용한 기간 동안 Azure가 제공한 다른 권장 사항은 없었습니다.

감사합니다.
Sascha

공유해 주셔서 감사합니다. 몇 가지 권장 사항이 좀 이상하네요…

CREATE INDEX index_topics_on_category_id ON public.topics USING btree (category_id)
CREATE INDEX index_topics_on_category_id_and_id ON public.topics USING btree (category_id, id)
CREATE INDEX index_topics_on_id_and_category_id ON public.topics USING btree (category_id, id)

제안된 이 3중 중복 인덱스는 선택성이 매우 낮습니다. 이러한 유형의 인덱스의 문제는 플랜너가 올바르게 인식하여 이를 무시하는 경향이 있다는 점입니다. 서로 다른 값이 10개뿐이라면 topic_id 같은 다른 컬럼과 조합해야 합니다.

잘 활용되지 않는 인덱스에 대해서는, 약 6개월 전 인프라에서 접근하지 않은 인덱스를 찾기 위해 데이터베이스 통계를 실행한 적이 있습니다. 몇 개를 정리했지만, 이번 주제는 이 과정을 다시 실행해 보라는 좋은提醒입니다.

이 내용을 올려 주셔서 감사합니다.

답변해 주시고 이 3개의 인덱스를 알려주셔서 감사합니다. 추천 사항들이 한꺼번에 들어오지 않고 몇 주에 걸쳐 하나씩 적용해 왔기 때문에 이 3중 중복을 눈치채지 못했습니다.
DROP 추천 사항에 포함되지 않은 것도 다소 이상합니다. 아직 Azure 쪽에서 해결해야 할 일이 남아 있는 것 같습니다 :smiley: (그래서 저는 추천 사항들을 두 번씩 확인해야 합니다).

감사합니다