DB/MySQL

[MySQL 8.0] 중복된 인덱스 및 거의 사용되지 않는 인덱스 조회하기

검정비니 2024. 2. 7. 14:17
728x90
반응형

데이터베이스 성능 향상을 위해 모든 엔지니어가 가장 먼저 고려하는 것이 바로 인덱스의 적용이다.

적절한 인덱스를 추가하는 것만으로 왠만하면 성능이 개선되기 때문에 인덱스 추가는 DB 성능 관련해서는 빠질수가 없는 솔루션이다.

 

인덱스는 성능에 있어 필요하지만 때때로 엔지니어들은 너무 과도하게 인덱스를 사용하는 경우가 있다.

이러한 경우, 중복 인덱스가 발생해서 오히려 전체 성능이 크게 저하되기 마련이다.

 

인덱스가 많아지게 되면 각 인덱스에 필요한 용량이 늘어나기 때문에 역설적으로 각 인덱스가 사용할 수 있는 가용 메모리의 크기가 줄어들게 된다.

또한, INSERT 등의 write 요청에 대해 고려해야 하는 인덱스의 수가 늘어나게 되면 해당 쿼리의 성능이 점점 떨어지게 된다.

 

MySQL 5.x에서는 중복 인덱스 검출을 위해 pt-duplicate-key-checker와 같은 서드파티 툴을 사용해야만 했다.

그러나 MySQL 8.0에서는 sys 스키마를 활용하게 되면 중복 인덱스들을 손쉽게 조회할 수 있게 된다.

select * from sys.schema_redundant_indexes;

 

위의 쿼리를 사용하면 중복 인덱스들에 대해 자세한 정보를 얻을 수 있게 된다.

 

추가로, 아래의 쿼리를 사용하게 되면 잘 사용되지 않는 인덱스들의 목록을 확인할 수도 있다.

select * from sys.schema_unused_indexes where object_schema NOT IN ('performance_schema');

 

단, 중복 인덱스와는 달리, 자주 사용되지 않는 인덱스는 무조건 나쁜것은 아니다.

예를 들면, 아주 오랜 실행시간이 소요되는 무거운 쿼리가 매주 토요일 오전 5시에 실행되는데, 해당 쿼리를 위해 추가된 인덱스는 자주는 사용이 안되겠지만, 성능 향상을 위해서는 매우 중요한 인덱스이다.

 

각 성능 조회 쿼리를 통해 현재 상황을 파악하고, 각 인덱스들이 정말로 필요가 없는지를 고민해 본 뒤에 인덱스 삭제 여부를 결정하는 것이 맞을 것이다.

 

반응형

'DB > MySQL' 카테고리의 다른 글

MySQL where문에서 boolean 체크 관련 성능 튜닝  (2) 2024.01.17