DATABASE 10

[REDIS] CLI 명령어 정리

REDIS CLI 명령어 정리 명령어 예시 설명 keys keys * 적재되어 있는 key 확인 SELECT SELECT1 DB 조회 (1~15까지 DB가 정해져있음 0이 default) exists keys key1 key가 존재하는지 확인 (존재하면 1 없으면 0) RANDOMKEY RANDOMKEY 랜덤으로 key를 조회 type type key1 key의 type을 조회함 (string이면 string으로 반환) set set key1 value1 key / value 형태로 데이터 저장하기 mset mset key1 value1 key2 value2 key / value 형태로 데이터를 여러개 저장하기 setex setex key1 10 value1 소멸시간 지정해서 저장하기 get get ke..

DATABASE 2022.07.03

[DB] MYSQL EXPLAIN(실행계획) 보는법

EXPLAIN (실행계획) DB가 데이터를 찾아가는 과정을 알아보기 쉽게 DB 결과 셋으로 보여주는 것 사용방법 : EXPLAN [EXTENDED] SELECT ... FROM ... WHERE ... EXPLAIN(실행계획) 정보 요약 실행계획 정보 설명 id select문에 대한 순차 식별자, id 순서대로 select문이 실행됨 select_type select문의 유형 table 참조되는 테이블을 말함 type 어떤식으로 테이블들을 조인하는지 나타내는 항목, 타입을 분석함으로써 어떤 인덱스가 사용되고 있는지 확인하고, 이를 통해 쿼리를 어떻게 튜닝해야되는지에 대한 insight를 제공함 possible_keys 테이블에서 row를 매핑시키기 위해 사용 가능한 키를 보여줌 key 실제적으로 쿼리 실..

DATABASE 2022.04.18

[DB] 쿼리문 함수 정리

기본 함수 유형 집계함수 문자열함수 날짜함수 기타 집계함수 FUNCTION 설명 MAX([컬럼명]) 명시된 컬럼 내 값들 중 최대값을 반환 MIN([컬럼명]) 명시된 컬럼 내 값들 중 최소값을 반환 COUNT([컬럼명]) 명시된 컬럼 내 값의 전체 행수를 반환 (NULL 제외) SUM([컬럼명]) 명시된 컬럼이 숫자인 경우, 데이터 합을 반환 (NULL 제외) AVG([컬럼명]) 명시된 컬럼이 숫자인 경우, 데이터 평균 반환 (NULL 제외) 문자열함수 FUNCTION 설명 SUBSTRING(string, int, int) 첫번째 명시한 문자열의 부분문자열 잘라오기 LTRIM(string) / RTRIM(string) LTRIM(string, string) / RTRIM(string,string) 공백제..

DATABASE 2021.12.15

[DB] CLUSTERING(클러스터링)

Clustering 여러 개의 DB를 수평적인 구조로 구축하여 DB들 간 데이터를 동기화처리 하는방식 Clustering 처리 방식 1개 DB에 쓰기 트랜잭션이 수행되고, COMMIT을 실행됨 실제 디스크에 내용을 쓰기 전에 다른 DB로 데이터의 복제를 요청 다른 DB에서 복제 요청을 수락했다는 신호(OK)를 보내고, 디스크에 쓰기를 시작 다른 DB로부터 신호(OK)를 받으면 실제 디스크에 데이터를 저장 Clustering 구현 방법 클러스터링 구현은 상황에 따라서 알맞은 구조를 선택하면됨 Active-Active : 클러스터를 항상 가동하여 가용 가능한 상태로 유지하는 방식 Active-Standby : 일부 클러스만 가동하고, 나머지 클러스터는 대기상태로 구성하는 방식 Clustering 특징 클러스..

DATABASE 2021.11.13

[DB] REPLICATION(리플리케이션)

Replication 두 개 이상의 DBMS 시스템을 Master / Slave로 나눠서 동일한 데이터를 저장하는 방식 Replication 처리방식 (MySQL) Master에서 트랜잭션이 수행되면, Master는 데이터를 저장하고 Binary Log에 처리내용을 기록함 Slave에서 IO Thread를 통하여 Master의 로그파일(Binary Log)를 Replay Log로 복사함 Slave의 SQL Thread는 Replay Log파일을 읽어서 Slave에 데이터를 저장함 Replication 특징 DB요청이 거의 Select요청이기 때문에 Replication만으로 성능을 높일 수 있음 비동기 방식으로 지연시간이 없음 Master가 다운되면 복구 및 대처가 까다로움 Master / Slave 간..

DATABASE 2021.11.13

[DB] 쿼리 처리 과정

쿼리처리과정 구문분석 (Parsing) 표준화 (Standardization) 최적화 (Optimization) 컴파일 (Compile) 실행 (Execute) 구문분석 (Parsing) 요청하는 쿼리가 잘못됐는지 확인하는 과정 요청 쿼리를 SQL서버에서 이해할 수 있는 단위로 분해하는 과정이며, 쿼리 구문이 잘못된 경우 처리가 중단됨 표준화 (Standardization) 실제로 필요 없는 부분들이 제거되며, 표준화된 트리가 만들어지는 과정 최적화 (Optimization) 쿼리를 분석하고 통계정보를 바탕으로 실행계획을 만들어내는 과정이며, 쿼리 처리시 가장 중요한 단계임 쿼리분석 : 검색제한자인지 조인조건인지 판단함 인덱스 선택 : 분포 통계 정보를 이용하여 인덱스검색이나 테이블 스캔 중의 하나를 선..

DATABASE 2021.06.26

[DB] 인덱스 (INDEX)

인덱스 (INDEX) 추가적인 쓰기작업, 저장공간을 활용하여 테이블에 대한 동작 속도를 높여주는 자료구조 인덱스 장단점 테이블 조회속도와 성능을 향상시킬 수 있음 (검색에 최적화) 전반적인 시스템 부하를 줄임 인덱스 관리를 위한 추가 작업 필요, 인덱스를 관리하기 위해선 DB의 약 10% 해당하는 저장공간 필요 인덱스는 기본적으로 이진트리 검색을 사용하기 때문에 기본적으로 정렬이 되어있어서, 인덱스를 잘못 사용할 경우 오히려 성능 저하될 수 있음 (INSERT, DELETE, UPDATE가 자주 발생하는 테이블에 인덱스를 걸 경우 오히려 성능 저하) 인덱스 알고리즘 Hash Table과 B+ Tree이 있지만 일반적으로 B+ Tree를 사용 B+ Tree 정의 B-Tree 를 개선시킨 자료구조 키에 의해..

DATABASE 2021.06.24

[DB] 샤딩

정의 한 테이블의 row들을 여러 개의 서로 다른 테이블, 즉 파티션으로 분리하는 것 키를 분리하여 나눠서 저장함 수평분할(Horizontal Partitioning)이라고 볼 수 있음 (예시. 회원테이블을 성별로 나눔 남성테이블, 여성테이블) 샤딩하게 되면 기존에 하나로 구성될 스키마를 다수의 복제본으로 구성하고 각각의 샤드에 어떤 데이터가 저장될지를 샤드키를 기준으로 분리함 구현 주로 Application Level에서 이루어짐 (어떤 Shards에 읽기, 쓰기를 전송할지 정의) DBMS에 따라 샤딩이 내장되어 있는 경우, Database Level에서도 가능함 장단점 장점 수평적 확장(Scaling out)이 가능함 스캔 범위가 줄어서 쿼리 속도 향상됨 단점 운영적인 복잡도가 커짐, 잘못 사용할 경..

DATABASE 2021.06.02

[DB] 트랜잭션

정의 데이터베이스의 상태를 변화시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위, 한꺼번에 모두 수행되어야하는 일련의 연산 ACID라 하는 원자성, 일관성, 격리성, 지속성을 보장해야함 ACID 원자성(Atomicity) : 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공 or 모두 실패 해야함 일관성(Consistency) : 모든 트랙잭션은 일관성 있는 데이터베이스 상태를 유지해야함 (무결성 제약조건을 항상 만족해야함) 격리성(Isolation) : 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리 (동시에 같은 데이터를 수정하지 못하도록 함, 격리성은 동시성과 관련된 성능 이슈로 인해 격리수준을 선택할 수 있음) 지속성(Durability) : 트랜잭션을 성..

DATABASE 2021.05.16

[MySQL] 쿼리 튜닝 기초

쿼리 튜닝시 기본적으로 고려해야 할 사항 select * 을 사용하지 않고 필요한 데이터만 가져옴 order by 사용을 가급적 최소화 하고 어플리케이션에서 로직 수행 테이블 조인시 where을 이용하여 결과가 작은 테이블 부터 수행 rdbms에 따라서 쿼리힌트가 사용가능할 경우 사용 앞뒤 like 검색 사용 금지 통합 쿼리를 작성해서 쿼리를 날리는 횟수 최소화 대부분 index를 통해서 해결가능, index를 풀 수 없는 경우 index lock 때문에 성능 저하가 있는 부분은 다수의 테이블을 조인하는 경우라 반정규화가 필요

DATABASE 2020.12.15