MySQL 12

converter를 만들지 않고 jpa mysql에서 json 사용하기

배경 컬럼에 json을 넣을일이 많지는 않지만 가끔 생길수도 있다. 근데 jpa에서 쓰려면 Jacson + 직렬화가 필요하다. 제네릭 converter를 사용해서 직렬화 / 역직렬화 하는 converter을 사용해도 되지만 더 간단한 방법이 있다. 일단 이거를 추가해줍니다. // json -> jpa implementation("com.vladmihalcea:hibernate-types-52:2.16.2") 엔티티 @Entity @AllArgsConstructor @NoArgsConstructor @Builder @Getter @TypeDef(name = "json", typeClass = JsonType.class). -> 이거를 추가해주고 public class Member extends BaseEn..

12장 쿼리 종류별 잠금(2)

InnoDB에서 Deadlock 만들기 InnoDB는 다른 DBMS와는 다르게 레코그 간의 간격을 잠그는 gap lock 이나 next key lock이 있다.순수한 레코드 레벨의 잠금만 사용하는 DBMS보다는 잠금의 범위가 넓은 편이라 데드락이 더 자주 발생하는 편이다. 패턴 1. 상호 거래 관련 A 사용자가 B사용자에게 10 포인트 전달, 그와 동시에 B 사용자도 A사용자에게 10 포인트 전달 하는 시나리오 일반적으로 차감 → 증가 순으로 개발 테이블의 프라이머리키인 user_id 값을 기준으로 처리 1번 트랜잭션: a - update 진행 2번 트랜잭션: a - update 진행 1번 트랜잭션: b - update 진행 2번 트랜잭션: b - update 진행 패턴 2. 유니크 인덱스 관련 트랜잭션..

책/real mysql 2022.01.24

12장 쿼리 종류별 잠금(1)

용어 정리 배타적 잠금 - 내가 쓰기를 하는 동안 남들이 쓰지 못하게 하는 것이다. 공유 잠금 - 내가 읽는 동안 남들이 내가 읽고 있는 데이터를 변경하거나 삭제하지 못하게 하는 것이다. 트랜잭션이란 논리적인 작업셋의 완전성을 보장하기 위한 기능이고, 잠금이란 동시성을 제어하기 위한 기능 InnoDB의 기본 잠금 방식 InnoDB에서는 각 쿼리의 패턴별로 사용하는 잠금이 다르다. https://balldev.tistory.com/58 트랜잭션 격리 수준 이전글에 연장입니다.~ https://balldev.tistory.com/57 트랜잭션과 잠금 트랜잭션이란? 트랜잭션은 작업의 완전성을 보장해 주는 것이다. 즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나 또는 처리하 balldev.tistory.com..

책/real mysql 2022.01.23

10장 파티션

파티션을 사용하는 이유 한 테이블이 너무 커서 인덱스의 크기가 물리적인 메모리보다 훨씬 크거나, 데이터 특성상 주기적인 삭제 작업이 필요한 경우 등이 파티션이 필요한 대표적인 예이다. 단일 INSERT와 단일 또는 범위 SELECT의 빠른 처리 update, delete 처리를 위해 대상 레코드를 검색하려면 인덱스는 필수적 인덱스의 워킹 셋이 실질적인 물리 메모리보다 크다면 쿼리 처리가 느려짐 파티셔닝을 안하면 인덱스가 커지고 물리적인 메모리 공간도 많이 필요해짐 → 효율적 관리를 위해 필요 데이터의 물리적인 저장소를 분리 파티션을 통해 파일의 크기를 조절하거나 각 파티션별 파일들이 저장될 위치나 디스크를 구분해서 지정해서 해결 가능 하지만 mysql에서는 인덱스를 순차적으로 생성하는 방법은 아직 허용되..

책/real mysql 2022.01.23

확장 기능

전문검색 - MySQL 의 Full Text Search(이하 FTS) LIKE같은 패턴 검색은 인덱스를 사용하지 못함 또한 LIKE를 여러 필드 (예를 들어, title과 keyword 등)에 동시에 적용하면서 여러 단어를 검색어로 전달하면 쿼리가 복잡해지기도 한다. 정규표현식도 마찬가지로 인덱스를 거치지 않고 풀 스캔(Full Scan)이 일어나기 때문에 느리다. 이런 전문 검색은 일부만 검색하는 경우에도 전용 인덱스를 사용하기 때문에 빠른 검색이 가능 FULLTEXT 검색 방식 **자연어 검색(natural search)**검색 문자열을 단어 단위로 분리한 후, 해당 단어 중 하나라도 포함되는 행을 찾는다. **불린 모드 검색(boolean mode search)**검색 문자열을 단어 단위로 분리한..

책/real mysql 2022.01.23

슬로우 쿼리 로그 설정

SHOW VARIABLES LIKE 'slow_query_%'; → 아마도 설정이 OFF 파일 생성 및 권한 주기 mkdir /var/log/mysql -> 원래 있을 수도 있음 chown mysql:mysql /var/log/mysql 설정 적어줌 여기서 설정을 적어준다. vi /etc/my.cnf 또는 vi /etc/mysql/my.cnf [mysqld] general_log=on log_output='TABLE' slow_query_log = 1 slow_query_log_file = /var/log/mysql/mariadb-slow.log - 로그 위치 long_query_time = 5 - 쿼리 5초 이상인 쿼리 log_slow_rate_limit = 1 log_slow_verbosity = q..

데이터베이스 2022.01.13

5. 인덱스(2) - 그외 인덱스

이전글에서 이어진 글입니다 https://balldev.tistory.com/59 5장. 인덱스 디스크 읽기 방식 데이터베이스의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 관건인 것들이 상당함 저장 매체 DAS 컴퓨터의 본체와 달리 디스크만 있음 모두 SATA SAS와 같은 케이블로 연결되어 balldev.tistory.com 해시 인덱스 해시 인덱스는 동등 비교 검색에는 최적화 but 범위를 검색한다거나 정렬된 결과를 가져오는 목적으로는 사용할 수 없다. DBMS에서 메모리 기반의 테이블에 주로 구현 → 대용량 테이블용으로는 사용 X 구조 및 특성 실제 키 값과는 상관 없이 인덱스 크기가 작고 검색이 빠름 검색하고자 하는 값을 주면 해시함수를 거쳐서 키 값이 포함된 버켓을 알 수 있음. 그리고 하나..

책/real mysql 2021.12.30

5장. 인덱스

디스크 읽기 방식 데이터베이스의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 관건인 것들이 상당함 저장 매체 DAS 컴퓨터의 본체와 달리 디스크만 있음 모두 SATA SAS와 같은 케이블로 연결되어서 사용자에게는 같은 방식으로 사용됨 하지만 반드시 하나의 컴퓨터 본체에만 연결해서 사용 가능 → 컴퓨터가 동시에 공유하는 것이 불가능 NAS TCP/IP를 통해 연결됨 여러 컴퓨터에서 공유해서 사용할 수 있는 저장 매체지만 SATA/SAS 방식에 비해 속도가 느림 데이터 비용으로는 사용 X SAN 대용량의 스토리지 공간 여러 컴퓨터 사용 가능, 광케이블로 연결돼서 빠름 하지만 고가의 구축 비용 SSD 원판을 제거하고 메모리를 장착 → 기계적으로 회전 X 빠르게 데이터 읽고 쓰기 가능, 전원이 공급되지 않아도..

책/real mysql 2021.12.30

트랜잭션 격리 수준

이전글에 연장입니다.~ https://balldev.tistory.com/57 트랜잭션과 잠금 트랜잭션이란? 트랜잭션은 작업의 완전성을 보장해 주는 것이다. 즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우 원 상태로 복구해서 작업의 일부만 적용되는 현상 balldev.tistory.com 격리수준이란? 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것 Isolation level 종류 Read Uncommitted (level 0) SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리지 않는 계층 아직 Commit되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용 일관성을 유지하는 것이 불가능 Dirty read 발생 Read committed (l..

책/real mysql 2021.12.27

트랜잭션과 잠금

트랜잭션이란? 트랜잭션은 작업의 완전성을 보장해 주는 것이다. 즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 하는 기능!!! 잠금 vs 트랜잭션 잠금 - 동시성을 제어하기 위한 기능 트랜잭션 - 데이터의 정합성을 보장하기 위한 기능 트랜잭션 정의와 특징 db의 상태를 변화시키기 위해 수행하는 단위 그리고 하나의 트랜잭션은 commit 되거나 rollback 되거나 합니다. 트랜잭션의 특징(ACID) atomicity(원자성) - 트랜잭션 연산은 모두 반영되던가 전혀 반영이 되지 않아야한다. consistency(일관성) - 성공적으로 완료하면 일관성 있는 데이터 베이스 상태로 변환 isolation(격리성) - ..

책/real mysql 2021.12.27