일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- kotlin
- kotlin spring
- 정보처리기사 실기
- PETERICA
- mysql 튜닝
- 정보처리기사 실기 기출문제
- MySQL
- 공부
- Kubernetes
- Elasticsearch
- AWS EKS
- minikube
- Spring
- AI
- 티스토리챌린지
- Java
- kotlin coroutine
- Linux
- CKA 기출문제
- 코틀린 코루틴의 정석
- CloudWatch
- aws
- IntelliJ
- 정보처리기사실기 기출문제
- 오블완
- 기록으로 실력을 쌓자
- Pinpoint
- CKA
- kotlin querydsl
- APM
- Today
- Total
목록Database (35)
피터의 개발이야기
ㅁ 들어가며ㅇ 지난 글, ProxySQL이란에서 ProxySQL의 쿼리 라우팅으로 읽기/쓰기 분리 방법을 알아보았다.ㅇ 이번 글에서는 Spring Data JPA와 ProxySQL에서의 읽기/쓰기 분리 방법을 비교해보았다. ㅁ Spring Data JPA의 읽기/쓰기 분리ㅇ 다중 데이터 소스 설정 읽기용과 쓰기용 데이터 소스를 별도로 구성한다. @Configuration 클래스에서 각각의 DataSource, EntityManagerFactory, TransactionManager를 설정한다. ㅇ @Transactional 어노테이션 활용 읽기 전용 메서드에 @Transactional(readOnly = true)를 적용 쓰기 작업이 필요한 메서드에는 @Transactional만 사용ㅇ Abstr..
ㅁ 들어가며ProxySQL은 효율적으로 커넥션을 관리하기 위한 미들웨어이다. 마이크로서비스 아키텍쳐로 인해 증가하는 어플리케이션에 대응하기 위해 MySQL서버를 여러대 구성해야하겠지만, ProxySQL을 통해 급증하는 커넥션을 감당하고 라우팅 하는 기능을 가지고 있다. 이번 글에서는 ProxySQL이 무엇인지 정리해 보았다. ㅁ ProxySQL이란?ProxySQL은 쿼리 라우팅 기능을 제공하는 MySQL 및 MySQL 포크(Percona, Mariadb)의 고성능, 고가용성 오픈소스 프록시이다. ㅁ 사용이유 서비스 운영시 MSA구조로 운영하다보면 어플리케이션의 수가 증가한다. 이렇게 증가할수록 MySQL가 감당해야하는 커넥션수가 증가하여 여러 MySQL서버를 구성해야하는 경우가 있다. 예를들어 MySQL..
ㅁ 들어가며ㅇ JPA를 사용 중인 프로젝트에서 중복체크 기능을 구현하면서 Exists와 Count의 성능차이를 고민하였다.ㅇ [QueryDSL] fetchFirst()와 fetchOne()의 차이을 정리하면서 Count vs Limit vs Exists 성능 차이에 대해서 정리하였다.ㅇ JPA exists 쿼리 성능 개선을 보고, 이해한 부분을 정리하였다. ㅁ성능 비교ㅇ 대량의 데이터(약 5600만 건)가 있는 테이블에서 COUNT와 EXISTS의 성능을 비교해보면 2배에 가까운 성능 차이가 나타났다.ㅇ 데이터가 1억 건 이상으로 늘어나면 이 차이는 더욱 벌어질 것이다.COUNT: 9.079초EXISTS: 5.278초 ㅁ 원인분석ㅇ 이러한 성능 차이의 원인은 각 쿼리의 동작 방식에 있다- EXISTS: ..
ㅁ 들어가며ㅇ DBA인 동료와 MySQL의 SSL 통신 방법에 대해서 이야기 나누면서 공부한 내용이다.ㅇ MySQL 문서와 AWS 문서를 보며 공부하였다. MySQL에서 TLS 연결은 어떻게 설명하는가?ㅁ MySQL 참조 문서 링크8.3 Using Encrypted Connections 8.3.1 Configuring MySQL to Use Encrypted Connections 8.3.2 Encrypted Connection TLS Protocols and Ciphers 8.3.3 Creating SSL and RSA Certificates and Keys 8.3.4 Connecting to MySQL Remotely from Windows with SSH 8.3.5 Reusing SSL Sessio..
ㅁ 들어가며 ㅇ 지난 글에서 MySQL과 PostgreSQL의 차이점에 대해서 알아보았다. ㅇ 이번 글은 PostgreSQL을 테스트 하기 위해 Docker 환경에 구축하는 과정을 정리하였다. ㅇ docker cli와 docker-compose 두가지 방법을 정리하였다. ㅁ docker run docker run -d \ -p 5432:5432 \ -e POSTGRES_USER=postgres \ -e POSTGRES_PASSWORD=strongpwd \ -e POSTGRES_DB=postgres \ -v /Volumes/500GB/data/postgres:/var/lib/postgresql/data \ --name postgres \ postgres:latest # 기동확인 $ docker logs p..
ㅁ 들어가며 PostgreSQL과 MySQL의 차이점을 알아보았다. 아래의 글들을 읽고 정리해보았다. ㅇ AWS - MySQL과 PostgreSQL의 차이점은 무엇인가요? ㅇ 우아한형제들 - Aurora MySQL vs Aurora PostgreSQL ㅁ DBMS 랭킹 PostresSQL의 인기는 날로 높아지고 있는 추세이다. ㅁ PostgreSQL VS MsSQL 비교 카테고리 MySQL PostgreSQL 데이터베이스 기술 순수 관계형 DBMS 객체 관계형 DBMS 기능 보기, 트리거 및 프로시저와 같은 DB 기능을 제한적으로 지원 구체화된 뷰, INSTEAD OF 트리거, 여러 언어의 저장 프로시저와 같은 최고급 데이터베이스 기능을 지원 데이터유형 숫자, 문자, 날짜 및 시간, 공간, JSON 기하..
ㅁ 들어가며 ㅇ Mysql 인덱스를 튜닝하기 위해 정리하는 중 이동욱님의 글, [mysql] 인덱스 정리 및 팁을 보고 요약해서 정리해 보았습니다. ㅁ 인덱스란? 인덱스 == 정렬 인덱스란 데이터의 저장(INSERT, UPDATE, DELETE) 의 성능을 희생하고 그 대신에 데이터의 읽기 속도를 높이는 테이블의 동작속도(조회)를 높여주는 자료구조입니다. 예를 들어, 책 뒷편의 '찾아보기'에서 알고리즘을 찾아봅시다. ㄱ~ㅎ 정렬에서 ㅇ을 찾고, 아~이 정렬에서 알을 찾습니다. 이후 알고리즘을 색인하고 페이지 정보를 얻을 수 있습니다. 사전도 마찬가지입니다. 영단어를 검색하려면, 일단 알파벳 순에서 해당 알파벳 페이지로 이동하여 단어를 찾아가는 것이 책 전체를 뒤지는 것보다 빠르게 찾을 수 있습니다. ㅁ ..
ㅁ 들어가며 정규화에 대해서 이론적 설명과 더불어 현실적인 이해를 돕기 위해 정리를 해 보았다. 정리하지 않으면, - 빠르게 찾을 수가 없다. - 수량을 확인하기 어렵다. - 비슷하거나 같은 옷을 또 살 수 있다. 빨래가 섞여있으면 자신의 옷을 쉽게 찾을 수 없기 마련이다. 빠르게 찾기 위해서는 자신의 옷은 자신의 서랍에 정리해야한다. ㅁ 비 정규화 데이터이름학생번호강좌동호회안유진101데이터베이스, 자료구조합창단, 방송댄스강호동102데이터베이스, 씨름먹방동호회유재석103사회학, 인문학토크동호회 ㅇ 아직 정리 되지 않은 옷이 있다고 가정해 보자.ㅇ 한 개인의 여러 정보들을 하나의 이름에 정리하면 비정규화된 데이터가 된다.ㅇ 이런 경우 정리가 되지 않아 데이터의 검색, 삽입, 수정, 삭제시에 ..
ㅁ DBeaver 필수 단축키 ㅇ Ctrl + Enter : 현재 SQL문 실행 ㅇ Crt + Shift + F : 선택된 SQL문 자동정리 ㅇ Alt + ↑/↓ : 이전 / 다음 쿼리로 이동 및 퀴러 일괄 선택 ㅇ Alt + X : 다중 쿼리 실행 ㅇ Ctrl + shift + / : 블럭 주석 ㅇ Ctrl + ↑/↓ : 위아래로 행 이동
ㅁ 장기 실행 트랜잭션 확인 및 종료 HLL 증가로 인해 DB에 병목 현상이 발생하였다면, 장기 실행 트랜잭션을 확인하고 종료해야합니다. information_schema.innodb_trx 쿼리를 통해 장기 실행 트랜잭션을 찾을 수 있습니다. 장기 실행 트랜잭션을 확인하는 방법은 SQL 클라이언트에서 다음 쿼리를 실행합니다. SELECT a.trx_id, a.trx_state, a.trx_started, TIMESTAMPDIFF( SECOND,a.trx_started, now()) as "Seconds Transaction Has Been Open", a.trx_rows_modified, b.USER, b.host, b.db, b.command, b.time, b.state FROM informatio..