[Database] DB Connection Pool (DBCP) 개념 및 설정 가이드
·
Database
DBCP란?DBCP를 쓰지 않을 경우 문제점TCP 기반으로 동작하다보니 매번 open / close connection에서 많은 비용 발생..서비스 성능에 좋지 않다DBCP 개념과 원리connection을 서버를 띄울 때 미리 여러개 생성해둔다.그리고 이러한 connection을 필요할 때마다 새로 생성하는 것이 아니라 기존에 맺어둔 connection을 가져와서 쓰는 방식이다.close connection을 하면 연결을 끊어버리는 것이 아니라 connection pool에 반환한다.이때의 connection pool을 DBCP라고 한다.⇒ 열고 닫는 시간 절약DBCP 설정 방법DB connection은 backend server와 DB 서버 사이의 연결을 의미하기 때문에 백엔드 서버와 DB 서버 각각에..
[Database] Index
·
Database
인덱스를 쓰는 이유조건을 만족하는 튜플(들)을 빠르게 조회하기 위해 -> WHERE 절, JOIN ON 절빠르게 정렬(ORDER BY)하거나 그룹핑(GROUP BY)하기 위해인덱스 유무에 따른 성능 차이없을 때: FULL SCAN -> O(N)있을 떄: B-tree Based Index인 경우, O(log N)인덱스 관련 명령어인덱스 거는 문법이미 사영되고 있는 테이블에 인덱스를 추가하고 싶을 때CREATE (UNIQUE) INDEX [인덱스명] ON [테이블명] (attribute, ..);테이블을 생성할 때 인덱스를 함께 걸고 싶을 때CREATE TABLE [테이블명] ( ... (UNIQUE) INDEX [인덱스명] ON [테이블명] (attribute, ..); );UNIQUE 키워드가 붙으면 중..
[Database] MVCC
·
Database
MVCC 등장 배경LOCK 기반 Concurrency Control은 다음과 같은 단점이 있었다.read - read 경우에는 허용하지만, 그 외의 경우에는 모두 허용하지 않아서 대기 시간이 오래 걸린다동시 처리량이 줄어들어 성능 이슈=> 이를 해결하기 위해 등장한 것이 MVCCMVCC를 사용하면 write-write의 경우를 제외하고는 모두 block 없이 동시 처리를 허용한다MVCC 개념데이터를 읽을 때 특정 시점 기준으로 가장 최근에 commit된 데이터를 읽는다.특정 시점 기준은 isolation level에 따라 다르다.이렇게 특정 시점 기준으로 commit된 데이터를 읽는 방식을 MySQL에서는 Consistent read라고 한다.데이터 변화(write) 이력을 관리한다따라서 추가적으로 저장..
[Database] Lock과 동시성 제어, 2PL
·
Database
🔒 Lockwrite 연산은 단순히 값 하나 바꾸는 것보다 더 복잡한 과정인덱스 처리, 실제 파일에 대한 처리 등이 포함될 수 있음동시에 같은 데이터에 또 다른 read / write가 있다면 예상치 못한 동작을 할 수 있다.=> LOCK을 통해 해결할 수 있다!Write-Lock(Exclusive Lock, 배타적 락)read / write(insert, modify, delete)할 때 사용한다write-lock이라고 해서 무조건 write 할 때만 사용하는 것이 아니라는 것에 주의!다른 tx가 같은 데이터를 read / write 하는 것을 허용하지 않는다.Read-Lock(Shared Lock, 공유 락)read 할 때 사용한다다른 tx가 같은 데이터를 read하는 것은 허용한다.Lock 호환성..
[Database] Transaction Isolation Level
·
Database
Transaction들이 동시 실행될 때 발생 가능한 이상 현상Dirty Read커밋되지 않은 변화를 읽는 현상Nonrepeatable Read(= Fuzzy Read)같은 데이터를 2번 읽었는데 값이 달라짐이는 트랜잭션의 Isolation 속성을 위반하는 현상Phantom Read없던 데이터가 갑자기 생기는 현상이 역시 Isolation 속성을 위반하는 현상이런 이상 현상들이 모두 발생하지 않도록 만들 수는 있지만, 그러면 제약사항이 많아져서 동시 처리 가능한 트랜잭션 수가 줄어들어 결국 DB의 전체 처리량(throughput)이 하락하게 된다..⇒ 일부 이상한 현상은 허용하는 몇 가지 level을 만들어서 사용자가 필요에 따라서 적절하게 선택할 수 있도록 하자!Isolation Level위에서 3가지..
[Database] Transaction, Concurrency Control
·
Database
트랜잭션개념단일한 논리적인 작업의 단위(a single logical unit of work)논리적인 이유로 여러 SQL문들을 단일 작업으로 묶어서 나눠질 수 업섹 만든 것DB에서 데이터를 다룰 때 장애가 일어난 경우, 데이터를 복구하는 작업의 단위가 됨DB에서 여러 작업이 동시에 같은 데이터를 다룰 때, 이 작업을 서로 분리하는 단위가 됨트랜잭션은 전체가 수행되거나 전혀 수행되지 않아야 한다(All or Nothing)START TRANSACTION;UPDATE account SET balance = balance - 200000 WHERE id = 'J';UPDATE account SET balance = balance + 200000 WHERE id = 'H';COMMIT; -- ROLLBACK;A..
[Database] 테이블 설계 / FD / DB 정규화(Normalization)
·
Database
잘못된 DB 테이블 설계 시 발생하는 문제이상현상(Anomaly)삽입 이상(Insertion Anomalies): 튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상저장 공간 낭비실수로 인한 데이터 불일치 가능성 존재null 값을 많이 쓰게 됨삭제 이상(Deletion Anomalies): 튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상수정 이상(Update Anomalies): 튜플 수정 시 중복된 데이터의 일부만 수정되어 일어나는 데이터 불일치 현상Spurious(가짜) Tuples잘못된 종속성을 갖게 테이블을 natrual join 시 가짜 정보가 발생NULL 값이 많아짐으로 인한 문제점들null 값이 있는 column으로 join 하는 경우 상황에 따라 ..
[Database] SQL Trigger
·
Database
SQL trigger 뜻데이터베이스에서 어떤 이벤트가 발생했을 때 자동적으로 실행되는 프로시저(procedure)데이터에 변경이 생겼을 때, 즉 DB에 insert, update, delete가 발생했을 때 이것이 계기가 되어 자동적으로 실행되는 프로시저를 의미간단한 예제들예제 1사용자의 닉네임 변경 이력을 저장하는 트리거delimiter $$CREATE TRIGGER log_user_nickname_trigger BEFORE UPDATE -- update 이전에 발생하도록 지정 ON users FOR EACH ROW -- 업데이트 되는 각 row에 대해 실행 BEGIN insert into users_log values(OLD.id, OLD.nickname, now()); END $$delimiter..
[Database] Stored Function & Stored Procedure
·
Database
stored function사용자가 정의한 함수DBMS에 저장되고 사용되는 함수SQL의 select, insert, update, delete statement에서 사용할 수 있다.예제 1임직원의 ID를 열자리 정수로 랜덤하게 발급하고 싶다.ID의 맨 앞자리는 1로 고정이다.delimiter $$CREATE FUNCTION id_generator()RETURNS intNO SQL -- 오직 MySQL에만 있는 부분BEGIN RETURN (1000000000 + floor(rand() * 1000000000));END$$delimiter;일반적으로 SQL에서의 delimiter는 세미콜론(;) 이다. 하지만, 함수 내부에서 세미콜론을 사용할 일이 있으므로 function을 작성하기 전에 미리 deli..
[Database] SQL 고급
·
Database
서브쿼리서브쿼리의 종류동작 방식에 따라: 비연관 서브쿼리, 연관 서브쿼리위치에 따라: 스칼라 서브쿼리, 인라인뷰, where 절 서브쿼리집합함수: UNION, UNION ALL, INTERSECT, MINUS그룹함수COUNT, AVG, SUM, MIN/MAX, VARIANCE, STDDEVGROUP BY FUNCTION: GROUPING SETS(), ROLLUP(), CUBE()윈도우함수그룹함수 형태(OVER 절 사용): SUM OVER, AVG OVER, MIN/MAX OVER, COUNT OVER순위 관련 함수 → ORDER BY 필수RANK(순위): RANK() WITHIN GROUP(), RANK() OVER(), DENSE_RANK(), ROW_NUMBER()LAG, LEADFiRST_VALU..