| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- It
- backend
- 웹프론트
- Si
- java
- 프로젝트관리
- 비전공개발자
- redmine
- Database
- spring
- AOP
- PreparedStatement
- 인덱스
- 레드마인
- 검색
- 일감관리
- 엘라스틱서치
- spring aop
- 백엔드
- 자바
- 이슈관리
- kibana
- 오라클
- 스프링
- PM
- 개발자
- 데이터베이스
- db
- frontend
- elasticsearch
- Today
- Total
목록db (15)
리타의 저장소
들어가며트랜잭션 동시성은 단순히 “락을 건다”로 끝나지 않는다.DB마다 읽기 일관성(snapshot)을 구현하는 방식이 다르고, 그 결과 데이터가 메모리와 디스크 사이를 흐르는 구조도 다르다.Oracle은 버퍼 캐시, redo log buffer, undo, background process를 함께 사용해 읽기/쓰기 동시성을 처리한다.PostgreSQL은 테이블 내부의 tuple version을 쌓고 vacuum으로 정리하며,InnoDB는 undo log와 read view를 이용해 과거 버전을 보여준다.OracleOracle 아키텍처를 동시성 관점으로 봐보자Oracle 인스턴스에서 이 발표에 가장 중요한 구성요소는 네 가지이다.Shared Pool: SQL 파싱 결과, 실행 계획, 데이터 딕셔너리 정보..
트랜잭션의 특징원자성 - 분해 불가능한 업무 최소 단위일관성격리성영속성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"} }} 확..
Elasticsearch의 기본 용어vs MySQL Elasitcsearch도 데이터베이스다.고로, Elasticsearch에 데이터를 저장/조회/수정/삭제할 수 있다.데이터를 저장하기 위해 가장 먼저 인덱스(index)를 만든다. (여기서 인덱스는 마치 DB에서의 테이블 같은거라고 생각하면 편하다)인덱스를 만들 때 어떤 유형의 데이터를 넣을 지 매핑(mapping)을 정의한다.테이블의 필드(field)에 맞게 데이터를 저장한다. MySQLElasticsearch테이블(table)인덱스(index)컬럼(column)필드(field)레코드(record), 로우(row)도큐먼트(document)스키마(schema)매핑(mapping)주의)우리가 흔히 사용하는 Oracle, MySQL에서 말하는 Index와 ..
인덱스 설계는 데이터베이스 성능 최적화의 핵심인덱스 종류B-Tree 인덱스 Unbalanced Index B-Tree의 "B"는 Balanced를 의미함. Index Skew 현상 대량 삭제 후 발생하는 현상 인덱스 스캔 효율 저하 (다시 채워지기 전까지 성능 문제 발생) 비트맵 인덱스Distinct 개수가 적을 때 유용대용량 테이블에서 여러 개의 인덱스가 필요할 때 적합DW (Data Warehouse) 테이블에서 주로 사용단독 사용보다는 여러 개를 묶어서 활용함수 기반 인덱스 활용 사례 암호화 솔루션 리버스 키 인덱스부하 분산에 유리Equal = 조회만 가능범위 검색(Between, Like 등)에는 사용 불가클러스터 인덱스클러스터형 인..
인덱스 스캔 효율 정리(1) 인덱스 매칭도= , IN 조건이 아닌 조건 이후는 무조건 체크 조건드라이빙 조건을 만들어 줘야 한다.조회 조건이 = 이 아닌 컬럼은 가급적 인덱스 뒤쪽으로 배치결합 인덱스 우선순위 결정자주(항상) 사용되는가?= 조건Cardinality (분포도)소트 연산 대체 가능 여부인덱스 row 7 vs 결과 row 3 → 인덱스가 더 많을 경우 비효율 발생일부 컬럼에만 인덱스가 존재할 경우(2) 비교 연산자 종류와 컬럼 순서에 따른 인덱스 레코드의 군집성 (인덱스 매칭도)(3) 인덱스 선행 컬럼이 등치 (=) 조건이 아닐 때 발생하는 비효율 (인덱스 매칭도)Sequential 액세스 효율은 선택도에 의해 결정 → 얼마나 적은 레코드를 읽는가?인덱스 컬럼이 조건절에 모두 = 조건일 때 가..