728x90
성능 개선
그동안 데이터가 적은 회사를 다녔기 때문에 DB 쿼리 성능에 대해 크게 신경을 쓰지 않았던 것 같다.
하지만 데이터가 많아짐에 따라 쿼리 성능 개선은 필수적이며, 서버 관리에 있어 가장 중요한 지식이 되는 것 같다.
예전에는 서비스 부하를 줄이는 방법에 대해 고민했지만, 실제로는 DB 부하를 줄이는 것이 서비스 성능을 눈에 띄게 개선하는 데 더 효과적이라는 것을 알게 되었다.
따라서 DB의 부하를 줄일수록 서비스 성능이 가장 빠르고 효과적으로 개선된다고 생각한다.
"데이터가 많을때를 경험해 본적없으니...." 앞으로 앞의 글이 많이 보일꺼다. 변명을 하는게 아니다 내가 놓치고 있던거에 대해 뇌에 각인 시키는 것이다. 그동안 "DB 부하는 Redis, Message Queue를 사용해서 부하를 줄인다." 라고만 생각 했던 나에게 다시 한번 주변을 둘러 보라 라고 말하는 것이다.
편견
- 인덱스 과신
- 인덱스가 모든 성능 문제를 해결할 것이라고 믿는 경향. 실제로는 인덱스가 적절하게 설계되어야 하고, 쿼리와 데이터의 특성에 따라 적절히 사용해야 효과적입니다.
- Index 과신을 안했다. 하지만 그렇다고 Index를 설정하지도 않았다 음..
정말 초보적인 실수 인거 같다.
그 동안 데이터가 적었어서 신경도 안쓴거 같다. Redis, Rabbitmq, AWS 이런게 우선이라고 생각 했다.
그래서 진짜를 놓치고 있었다.
- 복잡한 쿼리 무시
- 복잡한 JOIN, 서브쿼리, 하위 쿼리 등을 사용할 때 성능을 고려하지 않고, "잘 동작할 것"이라고 가정하는 경향. 복잡한 쿼리는 성능 문제를 일으킬 수 있으며, 최적화가 필요합니다.
- 이 부분에서 맹신 하고 있었던거 같다.
SubQuery는 무조건 안좋다고 생각 하여 SubQuery를 지양 하다 보니 Join으로만 해결 한거 같다.
하지만 알고는 있었다 SubQuery를 사용하면 새로운 임시 테이블같은게 생겨 Index가 사라져 성능저하가 온다.
그래서 인덱스가 필요 없는 그냥 단순 문구 조회 같은 경우 사용해도 성능에 크게 문제가 생기지 않는다.
잘 사용 안해 봤다고 안쓰지 말자
- 전체 테이블 스캔 과소평가
- WHERE 절에서 인덱스를 사용할 수 없을 때, 전체 테이블 스캔이 성능에 미치는 영향을 간과하는 경우. 전체 테이블 스캔은 대량의 데이터에서 성능 저하를 초래할 수 있습니다.
- 검색 기능을 넣다보면 어디까지 Index를 넣어야 하는지 헷깔린다. 제목 검색이 제목도 Index에 넣어야 하는가? 본문은? 날짜검색은 기본으로 있으니 무조건 넣어야 하는가? 이렇게 전부 넣다보면 인덱스 과신으로 DB에 과부하를 오히려 줄거 같다.
- 정규화의 맹신
- 데이터베이스 정규화가 성능을 항상 최적화한다고 생각하는 경향. 너무 높은 정규화 수준은 JOIN을 과도하게 사용하게 만들어 성능 저하를 초래할 수 있습니다.
- 다행이 이거에 대한 맹신은 없다.
오히려 개발을 하다보면 너무 많은 JOIN이 보이기 때문에 적절하게 섞는걸 선호한다.
주로 자주 변경되는 데이터 빼고는 적절히 섞는걸 선호 하는거 같다.
- 자체 최적화
- 개발자가 SQL 문을 작성할 때, 자신만의 성능 최적화 방법이나 편법에 의존할 수 있습니다. 이는 데이터베이스 시스템의 내부 최적화 기법과 충돌할 수 있습니다.
- 아직은 이거에 대한 나만의 성능 최적화 방법을 찾지 못한거 같다.
Explain도 참고를 하지만 자세히 적용하지 못한거 같다.
- 고정된 쿼리 작성 습관
- 특정 쿼리 작성 패턴이나 스타일에 익숙해져 있어, 다양한 상황에 맞는 최적의 쿼리 작성 방법을 고려하지 않는 경우.
- 이러한 습관 때문에 이 글을 작성하는 거 같다. 반성한다.
- 데이터 양 무시
- 테스트 환경의 데이터 양과 실제 운영 환경의 데이터 양이 다를 때, 작은 데이터 세트에서 잘 동작하는 쿼리가 큰 데이터 세트에서는 성능 문제를 일으킬 수 있습니다.
- 이런걸 경험해 본적이 없으니... 변명이라고 생각이 들겠지만 변명이 아닌 그동안의 실수를 되새김질 하는거라고 봐주시면 감사하겠다
728x90
'DB' 카테고리의 다른 글
[MySql] 성능 개선에 관하여_해결 해 보자_2_경험 (0) | 2024.08.22 |
---|---|
[MySql] 성능 개선에 관하여_해결 해 보자_1_explain (0) | 2024.08.06 |
[Redis] 성능과 가용성 (0) | 2024.03.26 |
[Redis] 확장성과 가용성을 위한 클러스터_뭔 말 인지 모르겠다. (0) | 2024.03.18 |
[Redis] Redis Cluster 데이터 분산과 Key 관리_뭔 말 인지 모르겠다. (0) | 2024.03.12 |