본문 바로가기
728x90

DB4

[Spring] Querydsl Select 성능 개선 1. 테스트 테이블 관계 생성 @Entity public class Shop { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long shopNo; private String name; @OneToOne(mappedBy = "shop") private License license; } @Entity public class License { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long licenseNo; private String name; @OneToOne @JoinColumn(name = "sho.. 2022. 11. 22.
[MySQL] INDEX 최적화 - 2 (feat. 커버링, 컨디션 푸시다운) [MySQL] INDEX 최적화 - 1 글에 이어 두 번째 정리를 해야겠다. 커버링 인덱스 처음 글에 정리했던 것처럼 인덱스는 데이터를 효율적으로 탐색해서 디스크 I/O를 줄이는 게 하는 방법이라고 했다. 커버링 인덱스는 쿼리를 충족하는데 필요한 모든 데이터를 갖는 인덱스를 말한다. WHERE절에 대한 쿼리에 인덱스 컬럼을 걸어 사용하는 것 이외에 SELECT / GROUP BY / ORDER BY 등에 활용되는 모든 컬럼의 인덱스의 구성 요소를 뜻한다. 인덱스를 사용하여 처리하는 부분 중에 가장 큰 부하를 차치하는 부분은 인덱스 검색에서 일치하는 키 값의 레코드를 읽는 것이다. 위의 그림처럼 인덱스 탐색에서 일치하는 키 값의 데이터를 조회하기 위해서 추가적인 디스크 I/O가 발생하게 된다. N번의 인덱.. 2022. 11. 17.
[MySQL] INDEX 최적화 - 1 인덱스를 왜 써야 할까? 데이터베이스의 성능은 디스크 I/O 영향이 크다 디스크와 메모리 I/O의 속도 차이는 10만 ~ 15만 배 정도로 차이가 크다. 요즘은 성능이 좋은 SSD도 보편화되었지만 그래도 메모리에 비해 많이 느리다. 즉, 성능 개선은 디스크 I/O를 줄이는 게 핵심이다. 인덱스를 사용하면 조회는 빨라지지만 데이터 생성, 수정, 삭제는 느려지는데 그럼에도 불구하고 우리는 왜 인덱스를 써야 할까? 웹 서비스에서 CUD와 R의 비율은 9:1 또는 8:2 정도라고 한다. GET 요청이 압도적으로 발생하기 때문에 전체적인 성능 이점을 취하기 위해 조회 성능 개선에 중점을 둔다. player table create index idx_game_nickname on player (game, nickna.. 2022. 11. 16.
[MySQL] Replication 동기화 시간 문제 문제 발생 프런트 클라이언트로부터 데이터 업데이트 요청을 받았고 DB에 업데이트를 정상적으로 처리했다. DB 업데이트 완료 이벤트를 다른 서버가 인지하고 업데이트 데이터를 조회했더니 간혈적으로 업데이트 이전 데이터가 조회는 현상이 있었다. 이 현상으로 인하여 데이터 무결성에 대한 문제를 인식하게 되었다. 클라이언트는 A서버에게 value를 20으로 업데이트 요청을 했고 A서버는 db에 데이터를 정상적으로 commit 했다. A서버는 B서버에게 데이터가 업데이트 완료된 상태를 알렸고 B서버는 value 값을 조회했는데 업데이트 이전 value값 10이 조회되었다. 원인 파악 DB 서버는 Master와 Slave로 되어 있고 Insert, Update, Delete는 Master(Write) 서버로 요청을 .. 2022. 11. 8.
300x250