본문 바로가기

Computer Science/DB

(6)
Real MySQL 8.0 읽기 - 아키텍처 본 포스팅은 Real MySQL 8.0 개정판을 읽고 정리한 내용입니다. 잘못된 내용이 있다면 편하게 댓글로 지적 부탁드립니다. 감사합니다. 아키텍처 MySQL 아키텍처 구조 MySQL 아키텍처 구조는 크게 MySQL 엔진과 스토리지 엔진으로 구분된다. MySQL 엔진 커넥션 핸들러, SQL 파서 및 전처리기, 옵티마이저 스토리지 엔진 실제 데이터를 스토리지에 저장, 스토리지로부터 데이터를 읽어온다. InnoDB와 MyISAM 스토리지 엔진이 존재하는데, 8.0 이후로부터 MyISAM 엔진은 거의 장점이 없어졌다. 따라서 앞으로는 InnoDB에 대해서만 언급한다. MySQL에서는 요청을 어떻게 처리할까? 가장 먼저 MySQL과 사용자가 커넥션을 맺는다. SQL문을 처리하고, SQL을 최적화한 후 스토리지..
MySQL 쿼리 최적화 - Covering Index https://porolog.tistory.com/54 슬로우 쿼리 모니터링 - AWS CloudWatch https://porolog.tistory.com/53 DB Bulk Insert, Jmeter 부하테스트 안녕하세요, 오늘은 Issue Tracker 프로젝트를 진행하면서 10만건 이상의 데이터에서 비정상적으로 느린 API 응답을 어떻게 개선했는지 기록을 porolog.tistory.com 슬로우 쿼리 개선하기 이전 포스팅에서 슬로우 쿼리를 AWS CloudWatch를 통해서 로깅하도록 설정해보았습니다. 이번에는 로그된 슬로우 쿼리를 확인하고 개선해보겠습니다. 저번 포스팅의 로깅을 통해서 슬로우 쿼리를 찾았습니다. 놀랐던 점은 저는 당연히 아래 쿼리의 페이지네이션, 필터로 이슈 목록을 조회하는 쿼..
슬로우 쿼리 모니터링 - AWS CloudWatch https://porolog.tistory.com/53 DB Bulk Insert, Jmeter 부하테스트 안녕하세요, 오늘은 Issue Tracker 프로젝트를 진행하면서 10만건 이상의 데이터에서 비정상적으로 느린 API 응답을 어떻게 개선했는지 기록을 공유하고자 포스팅을 작성합니다. Spring Data JDBC로 Bulk I porolog.tistory.com 저번 포스팅에서 메인 페이지의 GET 요청을 보냈을 때 200회의 요청을 보내면 평균적으로 36초의 시간이 걸리는 것을 확인했습니다. JDBC Connection Timeout이 발생하여, DB에서의 슬로우 쿼리 발생을 원인으로 추정하였는데요. 이번 포스팅에서는 AWS CloudWatch로 슬로우 쿼리를 찾아보고 개선하는 과정을 기록해보겠습..
DB Bulk Insert, Jmeter 부하테스트 안녕하세요, 오늘은 Issue Tracker 프로젝트를 진행하면서 10만건 이상의 데이터에서 비정상적으로 느린 API 응답을 어떻게 개선했는지 기록을 공유하고자 포스팅을 작성합니다. Spring Data JDBC로 Bulk Insert하기 우선 부하 상황을 만들기 위해서 Spring Data JDBC로 Dummy Data를 Insert했습니다. 이 때, Spring Data JDBC의 saveAll 메서드는 기본적으로 객체 하나마다 개별적인 INSERT 쿼리를 실행합니다. 이는 saveAll 메서드가 객체 컬렉션의 각 요소를 개별적으로 처리하고 영속화하기 때문입니다. 각 객체는 개별적으로 삽입되며, 객체의 상태에 따라 개별적인 INSERT 쿼리가 생성됩니다. 객체마다 I/O가 실행되면 속도가 굉장히 느려..
Lock을 이용한 동시성 제어 및 2PL(two phase locking) 안녕하세요. 오늘은 데이터베이스에서의 Lock에 대해 이야기하려 합니다. 여기서는 Lock의 종류, 호환성, 그리고 두 번째로도 Lock을 사용하면서 발생할 수 있는 이상현상에 대해 알아보겠습니다. 또한, 이러한 문제를 해결하기 위한 방법 중 하나인 2PL Lock에 대해서도 자세히 알아보겠습니다. Lock의 종류 데이터베이스에서 Lock은 데이터의 동시 접근을 관리하고, 데이터의 일관성을 유지하기 위해 사용됩니다. 다음은 데이터베이스에서 사용하는 Lock의 주요한 두 가지 종류입니다. Shared Lock (S-Lock, 혹은 Read Lock): 이 Lock은 데이터를 읽는 작업(read)에 사용됩니다. Shared Lock을 설정한 트랜잭션은 데이터를 읽을 수 있지만, 변경할 수는 없습니다. 변경을..
mySQL 컨테이너로 JDBC 프로그래밍 (Java) 오늘은 저번에 Docker에서 띄운 mySQL 컨테이너에 연결해서 DB에 데이터를 저장하고 가져오는 간단한 JDBC 프로그래밍을 해보았습니다. JDBC 프로그래밍은 DB에 접근할 수 있도록 해주는 JDBC API를 이용하여 데이터의 추가, 삭제, 수정, 검색 등을 할 수 있는 자바 응용프로그램을 작성하는 것인데요, 한 마디로 mySQL 등의 DB를 사용하는 응용 어플리케이션을 작성하는 것입니다. JDBC에 대해 알아보기 앞서, 데이터베이스와 SQL에 대해서 간단하게 살펴보겠습니다. 데이터베이스 데이터베이스(Database)는 데이터를 저장하고 관리하기 위한 체계적인 방법을 제공하는 시스템입니다. 데이터베이스는 일반적으로 테이블(Table)이라는 구조를 사용하여 데이터를 저장하고, SQL(Structure..