| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 이슈관리
- It
- spring aop
- 자바
- 오라클
- Database
- 개발자
- java
- kibana
- spring
- 스프링
- Si
- 웹프론트
- backend
- 검색
- 엘라스틱서치
- frontend
- 프로젝트관리
- db
- 비전공개발자
- elasticsearch
- redmine
- 인덱스
- 일감관리
- PreparedStatement
- AOP
- PM
- 레드마인
- 데이터베이스
- 백엔드
- Today
- Total
목록Database (14)
리타의 저장소
각 DB 별로 자세히 살펴보기 ✅ MySQL에서의 MVCC (InnoDB 기준)?MySQL 구조[메모리]├── InnoDB 버퍼 풀│ ├── 데이터 페이지 (member 테이블 등)│ ├── 인덱스 페이지│ └── 기타 메타정보│├── Undo 로그 (버퍼 풀 밖, 메모리/디스크에서 따로 관리됨)│ └── 이전 버전 정보 (MVCC, ROLLBACK 용)[디스크]├── 실제 테이블 파일 (.ibd)├── Undo Tablespace└── Redo 로그 등 InnoDB의 경우 Undo 로그를 기반으로 MVCC를 수행한다.InnoDB의 경우 레코드에 항상 따라 붙는 정보가 있는데, trx_id, roll_pointer, delete_flag가 바로 그것이다. 필드 설명 trx_id..
MVCC란?다중 버전 동시성 제어하나의 데이터를 여러 트랜잭션이 동시에 읽고 쓸 수 있게 하되, 충돌 없이 일관성을 유지하도록 하는 기술동시성 제어데이터베이스에서 여러 트랜잭션이 동시에 실행될 때, 데이터의 일관성과 무결성을 보장하기 위한 제어 메커니즘요약동시성 제어는 트랜잭션 간의 충돌을 방지하고, 무결성을 지키기 위한 핵심 기술.비관적 제어(Pessimistic): 락 기반, 충돌 방지, 안전하지만 성능 손해낙관적 제어(Optimistic): 버전 기반, 충돌 허용 후 감지, 성능 좋지만 충돌 시 리스크공유락(S-Lock): 여러 트랜잭션이 읽기만 가능배타락(X-Lock): 하나의 트랜잭션만 읽기/쓰기 가능 다중 버전 동시성 제어가 무엇인지 확인해보기 이전에 우선 동시성 제어가 무엇인지 확인해보자. ..
들어가며트랜잭션 동시성은 단순히 “락을 건다”로 끝나지 않는다.DB마다 읽기 일관성(snapshot)을 구현하는 방식이 다르고, 그 결과 데이터가 메모리와 디스크 사이를 흐르는 구조도 다르다.Oracle은 버퍼 캐시, redo log buffer, undo, background process를 함께 사용해 읽기/쓰기 동시성을 처리한다.PostgreSQL은 테이블 내부의 tuple version을 쌓고 vacuum으로 정리하며,InnoDB는 undo log와 read view를 이용해 과거 버전을 보여준다.OracleOracle 아키텍처를 동시성 관점으로 봐보자Oracle 인스턴스에서 이 발표에 가장 중요한 구성요소는 네 가지이다.Shared Pool: SQL 파싱 결과, 실행 계획, 데이터 딕셔너리 정보..
JAVA 레이어에서 DB 레이어 까지 * 여기선 Spring JPA 기준으로 설명해본다.[Java Thread] ↓@Transactional ↓Persistence Context (1차 캐시, Dirty Checking) ↓flush → SQL 상태 반영 ↓JDBC SQL 전송 ↓Oracle Transaction / Undo / Row Lock / Commitsave()를 호출하면 DB에 반영되는 것인가?많은 사람들이 save() 했으니 DB에 반영되었다고 생각할 수 있으나, 실제로는 영속성 컨텍스트에만 반영된 상태일 수 있고, flush가 나가도 commit 전이면 다른 세션에까지 확정되지 않는다.JPA spec은 flush가 AUTO일 때 쿼리 실행 전이나 커밋 시점 등에 반영될 수..
트랜잭션의 특징원자성 - 분해 불가능한 업무 최소 단위일관성격리성영속성Dirty Read다른 트랜잭션에 의해 수정되었으나, 아직 커밋되지 않은 데이터를 읽는 것.변경 후 아직 커밋되지 않은 값을 읽었는데, 만약 변경을 가한 트랜잭션이 최종적으로 롤백된다면 그 값을 읽은 트랜잭션은 비일관된 상태에 놓이게 된다.Non-Repeatable Read한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이 다른 트랜잭션이 값을 수정/삭제 하는 바람에 두 쿼리 결과가 다르게 나타나는 현상을 말함Phantom Read한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫 번째 쿼리에서 없던 유형(phantom) 레코드가 두 번째 쿼리에서 나타나는 현상.트랜잭션 수준 읽기 일관성 ?문장수준 읽기 일관성(Statem..
Table Random Access 최소화 튜닝인덱스 컬럼 추가기존 인덱스에 컬럼 추가PK 인덱스에 컬럼 추가⇒ 인덱스에 컬럼 추가했을 때, 클러스터링 팩터가 나빠질 수 있다.→ 인덱스 내에서 키 값이 같은 레코드는 rowid 순으로 정렬됨. 근데, 여기서 변별력이 좋은 컬럼이 추가되면, 해당 컬럼 순으로 정렬되어 클러스터링 팩터를 나쁘게 만들 수 있음.변별력이 좋지 않은 컬럼 뒤에, 변별력이 좋은 컬럼을 추가 할때는 유의해야할 필요가 있음.IOT (Index Organized Table)테이블을 인덱스 구조로 생성. 테이블 인덱스 구조로 만드는 구문create table index_org_t (a number primary key, b varchar(10)) organization index; 힙 구조..
인덱스의 활용 인덱스Key + ValueB*tree 인덱스 구조 RowId (제한된 포맷)데이터파일 (4자리)블록 번호 (8자리)로우번호 (4자리)RowID (확장 포맷)데이터 오브젝트 번호 (6자리)데이터 파일 번호 (3자리)블록 번호 (6자리)로우 번호 (3자리) 인덱스의 탐색 수직적 탐색Root > Branch > Leaf시작점 검색Random Access ROOT : 최상위 노드 BRANCH : ROOT & LEAF 의 연결고리 LEAF : KEY + Rowid (블록주소) > leaf node는 정렬되어 있음수평적 스캔Leaf Block의 시작점 ~ 종료점 까지Sequential Access 테이블 Random Access데이터 블록을 읽는 케이스 인덱스의 손익 분..
스프링 프로젝트 생성하고 ES랑 연동하기spring starter io에서 우선 프로젝트를 생성한다. 생성할때, Spring Data Elasticsearch를 추가. 그외 Lombok, JPA, PostgreSQL 등 기타 프로젝트에 필요한 설정도 추가해줬다. 자 그럼 users Document를 셋팅 해줘보자. (Spring -- Elasticsearch 연동)* 주의 : 처음에는 그냥 실험하는 거니까 라는 마인드로 편의상 @Data 어노테이션을 사용한 코드를 업로드 했었으나, 다들 알다시피 실무에선 지양하는게 좋다. 그래서 그냥 바꿨다... UserDocument package com.salary.backend;import lombok.AllArgsConstructor;import lombok.D..
인덱스 만들기 #이런식으로 만든다.PUT /users # 확인 GET /users# DELETEDELETE /boards 만약 DELETE 문으로 인덱스를 삭제하게 된다면, not found exception이 뜬다. "index_not_found_exception", 인덱스에 매핑 정의하기 쉽게 얘기하면 users 라는 인덱스(테이블)에, name, age, is_active라는 컬럼을 정의해준거라고 생각하면 된다.PUT /users/_mappings{ "properties" : { "name" : {"type": "keyword"}, "age" : {"type": "integer"}, "is_active": {"type": "boolean"} }} 확..
인덱스 설계는 데이터베이스 성능 최적화의 핵심인덱스 종류B-Tree 인덱스 Unbalanced Index B-Tree의 "B"는 Balanced를 의미함. Index Skew 현상 대량 삭제 후 발생하는 현상 인덱스 스캔 효율 저하 (다시 채워지기 전까지 성능 문제 발생) 비트맵 인덱스Distinct 개수가 적을 때 유용대용량 테이블에서 여러 개의 인덱스가 필요할 때 적합DW (Data Warehouse) 테이블에서 주로 사용단독 사용보다는 여러 개를 묶어서 활용함수 기반 인덱스 활용 사례 암호화 솔루션 리버스 키 인덱스부하 분산에 유리Equal = 조회만 가능범위 검색(Between, Like 등)에는 사용 불가클러스터 인덱스클러스터형 인..