본문 바로가기

mysql

(2) Mysql 실행 계획 분석 및 쿼리 튜닝 1. 서론2. 쿼리 응답 속도3. 부하 테스트4. 실행 계획 분석5. 쿼리 튜닝6. Spring에서 쿼리 힌트7. 결과8. 결론과 마무리 1. 서론지난 글에서 QueryDsl을 사용하여 DTO 조회로 극한의 성능 최적화를 진행했었습니다. 그때 결과적으로 약 6배 이상의 성능이 개선되었는데,데이터를 가져오는 양과 트랜잭션 범위의 차이에 의한 것이라고 생각했었습니다. 하지만 김영한님의 강의에서 요즘은 네트워크 성능이 좋아졌기 때문에 성능상 크게 차이가 나지 않을 것이라 하였고, 그렇다면 트랜잭션의 범위 차이와 user_roles 쿼리 한번의 추가로 6배나 차이가 생길까? 하는 의문이 계속 들었습니다. 그래서 테스트 했던 것을 다시 회고하는 중에, 엔티티로 모두 조회하는 쿼리에 포함되어 있던 distinct가.. 더보기
DB Replication / Master-Slave 이중화 with Spring 목차 1. Master-Slave 구조란 ? 2. DB Replication으로 Master-Slave 구조를 사용할 때 장점과 단점 3. 스프링에서 설정하기 1. Master-Slave 구조란 ? DB 시스템에서 사용되는 복제(Replication) 형태이다. Master DB에서는 주로 쓰기 작업을 처리하고, Slave DB에서 읽기 작업들을 처리하여 부하를 분산하고 가용성을 높일 수 있다. 하지만 이렇게 작업을 나누면 DB들 간의 데이터 정합성 문제가 생길 수 있다. 데이터를 동기화 시키기 위해 MySQL에서는 기본적으로 비동기 복제 방식을 사용하고 있다. Master DB에서 쓰기, 삭제, 수정 작업이 일어나서 변경이 생기면, 이를 비동기적으로 Binary Log에 기록하고 Master Threa.. 더보기
auto_increment index 꼭 필요한가 ? 의문점프로젝트를 진행하면서 게시글에는 해시태그를 넣을 수 있다.인스타그램처럼 내가 원하는 해시태그를 마음대로 넣을 수 있는 건 아니고 정해진 해시태그들을 선택할 수 있도록 했는데, 여기서 데이터베이스의 인덱스에 의문점을 가지게 됐다. 해시태그는 다음과 같이 사용된다.해시 태그를 이용해서 게시글을 검색(조회)할 때어떤 게시글에 달린 해시 태그를 조회할 때 (어떤 게시글을 조회하면, 그 게시글에 달린 해시 태그들도 같이 가져와야 함)게시글을 작성할 때 (게시글에 해시 태그를 넣음) 내가 궁금했던 것은 테이블의 클러스터 인덱스인 board_hashtag_id가 필요할까? 였다. 해시태그가 사용될 때의 쿼리는 다음과 같다.where hashtag_name = ?where board_id = ?insert ,,,.. 더보기