DataBase
-
MySQL Explain 보는 법DataBase/MySQL 2022. 7. 31. 16:55
테이블 설계시 Index를 고민하면서 설계를 해야되며, 이를 이용해서 쿼리를 잘 작성해야 된다는 것을 알고 있었으나 근래 회사 프로젝트를 진행하면서 더욱 중요하다는 것을 알게 되었다. 좋은 쿼리를 만들 수 있는 방법이 실행계획을 보는 것을 알게 되었고 한번 정리를 해보고자 한다. explain 예시 아래의 쿼리 앞에 사용쿼리 앞에 explain을 붙이면 발생되는 화면이다. (DB 클라이언트는 DBeaver를 사용) 위의 실행계획을 보게 된다면 id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows를 볼 수 있는데 해당되는 컬럼의 타입은 아래와 같다. select_type id 해당 id 내에 있는 select문 에 ..
-
Real MySQL 인덱스DataBase/MySQL 2022. 5. 8. 16:21
디스크 읽기 방식 저장소 하드 디스크 드라이브(HDD)와 솔리드 스테이트 드라이브(SSD) SSD는 기존 하드 디스크 드라이브에서 데이터 저장용 플레터(원판)을 제거하고, 그 대신 플래시 메모리를 장착하고 있다. 그래서 디스크 원판을 기계적으로 회전시킬 필요가 없으므로 아주 빨리 데이터를 읽고 쓸 수 있다. 플레시 메모리는 전원이 공급되지 않아도 데이터가 삭제되지 않는다. 게다가 데이터 베이스 서버에서 순차 I/O 작업은 비중이 크지 않고, 보통 랜덤 I/O 작업을 통해 작은 데이터를 읽고 쓰는 작업이 대부분이기 때문에 DBMS용으로 SSD를 많이 사용하고 있다. 순차 I/O와 랜덤 I/O란 위 그림을 보게 된다면 순차 I/O는 디스크 헤더를 한번만 사용한 반면 랜덤 I/O은 헤더가 3번을 움직였다. 헤..
-
Real MySQL 격리수준(Isolation Level)DataBase/MySQL 2022. 5. 1. 15:38
과거 정리한 내역이다. 해당 내역은 기본적인 이론만 작성했고, 이번에는 기본적인 내용과 깊은 내역까지 정리할 것이다. 2021.03.09 - [DataBase/공통] - DB 트랜잭션 격리수준(Isolation Level) 트랜잭션 격리수준에 따른 발생되는 문제 격리수준(Isolation Level) 설명 READ UNCOMMITTED Shared Lock이 걸리지 않는 상태이다. 해당 그림을 보게 된다면 사용자 A는 Lara라는 데이터를 Insert를 했고, 아직 commit상태가 아닌경우지만 사용자 B는 Lara라는 데이터를 읽을 수가 있다. 즉 coomit 상태가 아닌경우에도 데이터를 읽읅 수 있다. 사용자 A가 처리도중 알 수 없는 오류로 롤백한다고 하더라고 사용자 B는 Lara가 정상적인 상태라..
-
Real MySQL 트랜잭션DataBase/MySQL 2022. 4. 30. 14:27
트랜잭션 트랜잭션이란? 트랜잭션의 정의 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어 주는 것 즉 트랜잭션은 데이터의 정합성을 보장하기 위한 기능 MySQL에서의 트랜잭션 하나의 논리적인 작업 셋에 하나의 쿼리가 있든 두 개 이상의 쿼리가 있든 관계없이 논리적인 작업 셋 자체가 100% 적용되거나(commit을 실행했을때) 아무것도 적용되지 않아야(RollBack 또는 트랜잭션을 RollBack시키는 오류가 발생했을 때)함을 보장해주는 것 잠금 잠금은 동시성을 제어하기 위한 기능 트랜잭션 수준과 잠금의 차이 잠금은 여러 커넥션에서 동시에 동일한 자원(레코드나 테이블)을 요청한 경우 순서대로 한 시점에는 하나의 커..
-
Real MySQL 아키텍처DataBase/MySQL 2022. 3. 12. 14:25
MySQL 엔진 아키텍처 각 부분에 대한 하는 역활 커넥션 핸들러 클라이언트로부터 접속 및 쿼리 요청을 처리 MySQL 엔진 SQL 문장을 분석하거나 최적화하는 등 DBMS의 두뇌에 해당되는 처리 수행 스토리지 엔진 디스크 스토리지에 저장하거나 디스크 스토리지부터 데이터를 읽어오는 부분 핸들러 API MySQL 엔진에서 데이터를 읽어나 쓰거나 할 때는 각 스토리지엔진에 쓰기 또는 읽기를 요청을 하는데 이러한 요청을 핸들러(handler)요청이라 한다. 여기서 사용되는 API를 핸들러 API MySQL 스레딩 구조 스레딩 구조 설명 MySQL 서버는 프로세스 기반이 아니라 스레드 기반으로 작동 포그라운드 스레드나 백그라운드 스레드로 구분 동일한 이름의 스레드가 2개 이상 보이는 것은 MySQL 서버의 설정..
-
레디스 사용법DataBase/Redis 2021. 6. 6. 18:23
레디스란? 2021.05.19 - [DataBase/Redis] - Redis란? 회사에서 레디스를 사용하게 되었다. 그래서 기본적인 사용법을 알고자 코드를 작성해 보았다. 전체적인 코드는 git에 올려다 두었다. 스프링에서 레디스를 사용하는 방법은 크게 2가지가 존한다. 1. StringRedisTemplate of RedisTemplate 2. CrudRepository 사용법 1. docker 실행 docker run -p 6379:6379 --name redis_boot -d redis 2. 레디스 접속 docker exec -i -t redis_boot redis-cli 3. 코드 작성 3-1. StringRedisTemplate springboot 2.0이상부터는 auto-configurati..
-
Redis란?DataBase/Redis 2021. 5. 19. 14:39
회사에서 레디스를 사용을 한다. 내가 레디스에 아는 내용은 '레디스는 캐시서버이다. 그래서 빠른 조회 성능을 가진다.' 이 두가지 밖에 없었다. 이렇게 된다면 실무에 빠르게 적응하기가 힘들다고 판단을 하였고, 주말에(어버이날 일정 끝낸다음) 공부를 진행중이다. 아무것도 아는 내용이 없었기 때문에 영상를 보면서 공부를 하였다. Redis란? In Memory Data Structure Store Open Sorce(BSD 3 License) 키-값 구조 관리 시스템 - 비 관계형이며, 키-값으로 구성되어있기 때문에 쿼리 없이도 데이터를 가져 올 수 있다. 키-값 구조뿐만 아니라 아래의 자료구조를 지원 한다. Strings, set, sorted-Set, hashes, list Strings - Key Va..
-
MySQL ReplicationDataBase/공통 2021. 4. 24. 16:35
공부한 이유최근 이직한 회사의 데이터를 확인을 해보니 DB가 Master-Slave 구조로 되어있었다. 처음에 이러한 구조를 몰랐을 때 DB들을 확인해보니 같은 테이블명을 가졌으며, 같은컬럼을 공유하는 것이 매우 많아서 당황했었다.(진심으로.. 이거때문에 반나절을 날렸던...) 그래서 앞으로 이렇게 당황하지 않기위해서 오늘 MySQL Replication을 공부를 할 것이다. MySQL Replication이란?리플리케이션(Replication)은 복제를 뜻하며 2대 이상의 DBMS를 나눠서 데이터를 저장하는 방식이며, 사용하기 위한 최소 구성은 Master / Slave 으로 되어있다.Master웹서버로 부터 데이터 등록/수정/삭제 요청시 바이너리로그(Binarylog)를 생성하여 Slave 서버로 ..