Skip to content

데이터베이스 용어집 ​

문서에서 점선 밑줄이 있는 용어를 누르면 이곳의 해당 항목으로 온다. 다 읽었으면 아래 읽던 문서로 버튼으로 돌아간다.

용어 272개

ㄱ

가상 칼럼virtual column

다른 칼럼으로 계산한 값을 담는 생성 칼럼 중, 값을 저장하지 않고 읽을 때 계산하는 종류.

갭 락gap lock

인덱스 레코드 사이의 빈 구간에 거는 잠금. 그 사이에 새 행이 끼어드는 것을 막는다.

갱신 손실lost update

두 트랜잭션이 같은 행을 고칠 때 한쪽의 변경이 다른 쪽에 덮여 사라지는 현상.

갱신 이상update anomaly

여러 행에 중복된 값 중 일부만 고쳐져 데이터가 서로 어긋나는 문제.

격리 수준isolation level

동시에 실행되는 트랜잭션끼리 서로의 변경을 얼마나 볼 수 있게 할지 정하는 단계.

결과 집합result set

SELECT가 돌려주는 행들의 묶음. 표처럼 여러 행과 칼럼으로 되어 있다.

결정자determinant

함수 종속 X → Y에서 값을 정하는 쪽인 X.

고아 객체orphan object

DEFINER로 지정된 계정이 없어진 저장 객체. DEFINER 권한으로 실행하는 객체는 실행이 실패한다.

고아 행orphan row

참조하던 부모 행이 없어진 자식 행.

고정 소수점fixed point

10진 자릿수를 그대로 저장해 오차가 없는 방식(DECIMAL). 금액에 쓴다.

공유 락shared lock

읽기용 잠금(S 락). 여럿이 동시에 걸 수 있지만, 걸려 있는 동안 다른 쪽이 그 대상(행이나 테이블)을 고칠 수 없다.

권한privilege

사용자가 어떤 대상에 어떤 작업(SELECT·INSERT 등)을 할 수 있는지 정한 허가.

그래프 DBgraph database

노드와 간선을 저장해 여러 단계 관계를 따라가는 질의에 강한 NoSQL.

그룹 복제Group Replication

서버 여러 대가 합의해서 트랜잭션 순서를 정하고, 장애 난 멤버를 스스로 빼는 MySQL 복제 방식.

글로벌 락global lock

서버 전체의 변경을 막는 잠금. FLUSH TABLES WITH READ LOCK으로 건다.

ㄴ

낙관적 잠금optimistic locking

충돌이 드물다고 보고 잠금 없이 진행한 뒤, 쓸 때 충돌을 검사하는 방식. 흔히 행에 버전 번호 칼럼을 두고 읽었던 버전 그대로일 때만 고치며, 충돌하면 다시 시도한다.

내부 조인inner join

조인 조건에 맞는 짝이 양쪽에 모두 있는 행만 남기는 조인.

네임드 락named lock

GET_LOCK으로 임의 문자열 이름에 거는 잠금. 같은 이름을 요청하는 쪽끼리만 기다리는 권고 잠금이다.

네트워크 분할network partition

분산 시스템에서 노드 사이 통신이 끊겨 서로 메시지를 주고받지 못하는 상태.

넥스트키 락next-key lock

레코드 락과 그 앞 갭 락을 합친 잠금. REPEATABLE READ에서 범위 조회 결과에 새 행이 끼어드는 팬텀을 막는 기본 수단이다.

논리 백업logical backup

데이터를 SQL 문(INSERT 등) 형태로 뽑아 내는 백업. 데이터 파일을 통째로 복사하는 물리 백업과 구분한다.

논리 삭제soft delete

행을 실제로 지우지 않고 삭제 표시만 하는 방식.

ㄷ

다이제스트digest

쿼리의 상수를 지우고 모양만 남긴 문장. 같은 모양의 쿼리를 한 줄로 모아 집계할 때 쓴다.

다치 종속multivalued dependency

X 값 하나에 Y 값 여러 개가 다른 칼럼과 상관없이 정해지는 관계(X →→ Y). 서로 관계없는 두 목록이 한 테이블에 함께 들면 조합 수만큼 행이 불어나며, 제4정규형이 이를 없앤다.

단편화fragmentation

빈 공간이 여기저기 잘게 흩어진 상태. 인덱스에서는 페이지 분할이 반복되며 페이지마다 빈 공간이 생겨, 같은 데이터를 담는 데 페이지가 더 필요해진다.

대기 그래프wait-for graph

트랜잭션끼리 누가 누구의 잠금을 기다리는지 그린 그래프. 사이클이 생기면 데드락이다.

대리 키surrogate key

업무 의미가 없는 일련번호 키. 보통 AUTO_INCREMENT로 만든다.

대체 키alternate key

기본 키로 고르지 않은 나머지 후보 키. MySQL에서는 보통 UNIQUE와 NOT NULL로 지킨다.

더블라이트 버퍼doublewrite buffer

페이지를 제자리에 쓰기 전에 다른 곳에 먼저 한 벌 써 두는 영역. 쓰는 도중 전원이 나가 페이지가 반쯤 깨져도 이 사본으로 복구한다.

더티 리드dirty read

다른 트랜잭션이 아직 커밋하지 않은 변경을 읽는 현상. 그 트랜잭션이 롤백하면 없던 값을 읽은 셈이 된다.

더티 페이지dirty page

메모리에서 바뀌었지만 아직 디스크에 쓰이지 않은 페이지.

데드락deadlock

둘 이상의 트랜잭션이 서로 상대가 잡은 잠금을 기다리느라 아무도 스스로는 진행하지 못하는 상태.

데이터 디렉터리data directory

MySQL이 테이블 데이터·로그 같은 파일을 두는 서버의 폴더. 경로는 datadir 변수로 정한다.

데이터 딕셔너리data dictionary

테이블·칼럼·인덱스 정의 같은 메타데이터를 담는 저장소. 8.0부터 InnoDB 안의 시스템 테이블에 모아 둔다.

드라이빙 테이블driving table

조인에서 먼저 읽어 나머지 테이블을 찾는 기준이 되는 바깥쪽 테이블. 뒤따라 읽히는 쪽은 드리븐 테이블(driven table)이다.

드리븐 테이블driven table

조인에서 드라이빙 테이블의 행마다 짝을 찾으려고 뒤따라 읽히는 안쪽 테이블.

ㄹ

래치latch

메모리 속 페이지 같은 내부 구조를 아주 짧게 보호하는 잠금. 트랜잭션 잠금과 달리 끝날 때까지 들고 있지 않는다.

랜덤 I/Orandom I/O

디스크 곳곳에 흩어진 페이지를 건너뛰며 읽는 것.

레코드 락record lock

인덱스 레코드 하나에 거는 잠금.

레플리카replica

원본 서버(소스)의 변경을 받아 똑같이 따라 적용하는 복제 서버.

로그 버퍼log buffer

변경 기록을 디스크의 로그 파일에 쓰기 전에 잠시 모아 두는 메모리 영역.

롤백rollback

트랜잭션의 변경을 모두 취소하고 시작 전 상태로 되돌리는 것. 실패한 문장 하나의 변경만 되돌리는 문장 단위 롤백도 있다.

리두 로그redo log

데이터 페이지에 반영하기 전에 '무엇을 바꿨는지'를 먼저 적어 두는 기록. 장애 후 재시작할 때 이걸 다시 적용해 커밋된 변경을 살린다.

리시버 스레드receiver thread

레플리카에서 소스의 변경을 받아 릴레이 로그에 적는 스레드. 매뉴얼의 다른 이름은 I/O 스레드다.

리프 노드leaf node

트리의 맨 아래 단계 노드. B+Tree에서는 실제 데이터(또는 PK 값)가 여기에만 있고, 위쪽 노드에는 길을 안내하는 키만 있다.

릴레이 로그relay log

레플리카가 소스에서 받은 변경을 적용하기 전에 자기 디스크에 먼저 적어 두는 로그.

링크드 리스트linked list

각 항목이 다음(양방향이면 앞·뒤) 항목의 위치를 들고 있어서 차례로 따라갈 수 있는 목록 구조.

ㅁ

마스터 키master key

테이블스페이스 키를 다시 암호화하는 최상위 키. 키링에 보관하고 주기적으로 교체한다.

멀티 밸류 인덱스multi-valued index

JSON 배열의 원소 하나하나를 인덱스 항목으로 만드는 인덱스.

멀티 소스 복제multi-source replication

레플리카 한 대가 여러 소스에서 채널별로 동시에 변경을 받는 복제 구성.

멀티 스레드 복제multithreaded replication

레플리카가 서로 무관한 트랜잭션을 여러 스레드로 동시에 적용하는 방식. MySQL 8.4는 기본으로 작업 스레드 4개를 쓴다.

멀티 프라이머리 모드multi-primary mode

그룹 복제의 모든 멤버가 쓰기를 받는 모드. 같은 행을 동시에 고치면 한쪽이 롤백된다.

메타데이터 락metadata lock

테이블 구조를 보호하는 잠금. DML·DDL을 실행할 때 서버가 자동으로 걸어, 누가 테이블을 쓰는 동안 ALTER 같은 구조 변경이 끼어들지 못하게 한다(줄여서 MDL).

무손실 분해lossless decomposition

나눈 테이블을 다시 조인하면 행이 빠지지도, 없던 행이 생기지도 않고 원래대로 돌아오는 분해.

문서 DBdocument database

JSON 같은 문서를 저장하고, 문서 안 필드로 찾을 수 있는 NoSQL.

문자 집합character set

글자를 어떤 바이트로 바꿔 저장할지 정한 규칙. MySQL 8.0부터 기본은 한 글자를 1~4바이트로 저장하는 utf8mb4다.

문장 기반 복제statement-based replication

실행한 SQL 문장을 바이너리 로그에 그대로 적어 레플리카가 다시 실행하게 하는 방식.

뮤텍스mutex

한 번에 하나만 특정 자원을 쓰게 하는 잠금 장치. 잠근 쪽이 풀어야 다음 차례가 들어오며, 서버 내부에서는 스레드가 아주 짧게 잡는다.

미리 읽기read-ahead

곧 필요할 것 같은 페이지를 요청이 오기 전에 미리 디스크에서 버퍼 풀로 올려 두는 동작.

ㅂ

바이너리 로그binary log

서버에서 커밋된 데이터 변경을 순서대로 남기는 MySQL 서버 층의 로그. 복제와 시점 복구에 쓴다.

바이너리 로그 이벤트binary log event

바이너리 로그에 적히는 변경 기록 한 건. 트랜잭션 하나가 시작·행 변경·커밋 같은 이벤트 여러 개로 기록되고, 레플리카는 이를 차례로 받아 적용한다.

반동기 복제semisynchronous replication

소스가 레플리카 한 대 이상이 변경을 받았다고 확인해 줄 때까지 커밋 응답을 늦추는 복제. 적용까지 기다리지는 않는다.

반복 불가능한 읽기non-repeatable read

같은 행을 두 번 읽었는데 그사이 다른 트랜잭션이 고치고 커밋해 값이 달라지는 현상.

반정규화denormalization

정규화한 설계에서 조회 성능을 위해 일부러 중복을 되살리는 것. 복사본을 원본과 맞출 책임이 생긴다.

배타 락exclusive lock

쓰기용 잠금(X 락). 한 번에 하나만 걸 수 있고, 다른 쪽이 같은 대상에 공유·배타 락을 거는 것을 모두 막는다.

버퍼 풀buffer pool

InnoDB가 디스크의 데이터·인덱스 페이지를 올려 두는 메모리 캐시. 대부분의 읽기·쓰기가 여기서 먼저 일어난다.

복제replication

한 서버의 변경을 다른 서버가 받아 똑같이 적용해 데이터 사본을 유지하는 기능. 읽기 분산과 장애 대비에 쓴다.

복제 지연replication lag

소스에서 커밋된 변경이 레플리카에 적용되기까지 걸리는 시간.

부동 소수점floating point

수를 2진 소수로 근사해 저장하는 방식(FLOAT·DOUBLE). 0.1 같은 값도 근삿값으로 남아 같음 비교가 어긋날 수 있다.

부분 함수 종속partial dependency

여러 칼럼으로 된 키의 일부에만 종속하는 것. 제2정규형이 없앤다.

불용어stopword

너무 흔해서 검색어로 쓸모가 없어 색인에서 빼는 단어.

뷰view

SELECT 문에 이름을 붙여 테이블처럼 쓰게 한 것. 실행할 때 원래 SELECT로 펼쳐진다.

비동기 복제asynchronous replication

소스가 레플리카가 받았는지 기다리지 않고 커밋을 끝내는 MySQL 기본 복제 방식. 빠르지만 소스 장애 때 전달 안 된 변경을 잃을 수 있다.

비주 속성non-prime attribute

어떤 후보 키에도 들어 있지 않은 칼럼. 제2·제3정규형은 비주 속성의 종속을 검사한다.

ㅅ

삭제 이상deletion anomaly

행을 지울 때 지우려던 것이 아닌 다른 사실까지 함께 사라지는 문제.

삽입 이상insertion anomaly

다른 사실이 없으면 어떤 사실을 넣지 못하는 문제. 수강생 없는 새 과목을 등록할 수 없는 경우가 예다.

상관 서브쿼리correlated subquery

바깥 쿼리의 칼럼을 참조하는 서브쿼리. 뜻으로는 바깥 행마다 다시 계산된다.

생성 칼럼generated column

다른 칼럼으로 계산한 값을 담는 칼럼. 저장하는 STORED와 읽을 때 계산하는 VIRTUAL이 있다.

샤딩sharding

데이터를 여러 DB 서버에 나눠 담는 방식.

서브쿼리subquery

다른 SQL 문 안에 괄호로 넣은 SELECT. 바깥 쿼리가 그 결과를 값이나 테이블처럼 쓴다.

서브파티션subpartition

파티션 하나를 한 번 더 나눈 조각. RANGE·LIST 파티션을 HASH·KEY로 다시 나눌 때 생긴다.

선택도selectivity

조건을 만족하는 행의 비율. 적은 행만 남길수록 '선택도가 좋다'고 하며, 남는 행이 많으면 인덱스보다 풀 테이블 스캔이 싸질 수 있다.

세미 조인semi-join

IN (서브쿼리)처럼 상대 테이블에 짝이 '있는지'만 확인하는 조인. 짝이 여러 개여도 바깥 행은 한 번만 나온다.

세이브포인트savepoint

트랜잭션 중간에 찍어 두는 지점. 그 지점 이후의 변경만 부분 취소할 수 있다.

세컨더리 인덱스secondary index

PK가 아닌 칼럼으로 만든 보조 인덱스. InnoDB에서는 리프에 행 위치 대신 PK 값을 들고 있어, 행을 읽으려면 클러스터링 인덱스를 한 번 더 찾아가야 한다.

셀프 조인self join

같은 테이블에 별칭 두 개를 붙여 자기 자신과 잇는 조인. 직원과 상사를 한 행에 놓을 때 쓴다.

수평 확장scale-out

서버 수를 늘려 처리량과 용량을 키우는 방식. 서버 한 대를 키우는 수직 확장(scale-up)과 대비된다.

순차 I/Osequential I/O

디스크의 연속된 영역을 차례로 읽는 것. 흩어진 곳을 건너뛰며 읽는 랜덤 I/O보다 빠르다.

슈퍼 키super key

행을 하나로 구분할 수 있는 칼럼 묶음. 불필요한 칼럼이 섞여 있어도 된다.

스냅샷snapshot

특정 시점의 데이터 모습. InnoDB 트랜잭션은 이 시점 기준으로 보이는 버전만 읽는다. 백업에서는 디스크나 데이터를 한 시점 상태 그대로 떠 둔 사본을 말한다.

스냅샷 격리snapshot isolation

트랜잭션이 한 시점의 스냅샷만 보게 하는 격리 방식. 두 트랜잭션이 같은 행을 동시에 고치면 한쪽을 실패시켜 덮어쓰기를 막는다.

스레드 풀thread pool

일하는 스레드 수를 고정하고 넘치는 요청은 큐에 줄 세우는 방식.

스칼라 서브쿼리scalar subquery

값 하나(1행 1열)만 돌려주는 서브쿼리. 2행 이상이면 에러가 난다.

스키마리스schemaless

DB가 쓸 때 구조를 검사하지 않고, 읽는 코드가 구조를 해석하는 방식(schema-on-read).

스킵 스캔skip scan

복합 인덱스의 첫 칼럼 조건이 없어도, 첫 칼럼의 값마다 나눠 두 번째 칼럼 조건으로 찾는 방식. 첫 칼럼 값 종류가 적을 때만 효과가 있다.

스토리지 엔진storage engine

데이터를 실제로 디스크에 저장하고 읽어 오는 MySQL의 하위 모듈. InnoDB·MyISAM 등을 테이블마다 골라 쓸 수 있다.

스토어드 프로그램stored program

SQL에 변수·조건문·반복문을 붙여 DB 서버 안에 저장해 두고 실행하는 코드. 프로시저·함수·트리거·이벤트가 있다.

스토어드 프로시저stored procedure

CALL로 호출하는 저장 코드. 여러 SQL을 묶어 실행하고 OUT 매개변수로 값을 돌려줄 수 있다.

스토어드 함수stored function

SQL 식 안에서 불러 값 하나를 돌려주는 저장 코드.

스파스 파일sparse file

중간에 실제로 디스크를 차지하지 않는 빈 구간을 가질 수 있는 파일.

스플릿 브레인split brain

네트워크가 끊겨 두 서버가 서로를 죽었다고 보고 동시에 쓰기를 받아, 데이터가 두 갈래로 갈라지는 상황.

슬로우 쿼리 로그slow query log

정해 둔 기준 시간보다 오래 걸린 쿼리를 기록하는 로그.

시스템 변수system variable

버퍼 크기·타임아웃 등 서버 동작을 정하는 설정값. 서버 전체(GLOBAL)나 접속 하나(SESSION) 범위로 바꾼다.

시점 복구point-in-time recovery

백업을 복원한 뒤 그 이후의 변경 기록을 원하는 시각까지 다시 적용해, 특정 시점의 상태로 되돌리는 복구 방법.

실행 계획execution plan

옵티마이저가 정한 쿼리 처리 순서와 방법. 어떤 테이블을 먼저, 어떤 인덱스로, 어떤 조인으로 읽을지 담는다.

싱글 프라이머리 모드single-primary mode

그룹 복제에서 한 멤버만 쓰기를 받고 나머지는 읽기 전용인 기본 모드. 프라이머리가 떠나면 자동으로 새로 뽑는다.

쓰기 집합writeset

트랜잭션이 바꾼 행의 키를 해시 값으로 모은 것. 두 트랜잭션이 같은 행을 건드렸는지 빠르게 비교하는 데 쓴다.

ㅇ

안티 조인anti-join

상대 테이블에 짝이 없는 행만 남기는 조인. NOT EXISTS나 LEFT JOIN 뒤 IS NULL로 쓴다.

암시적 커밋implicit commit

사용자가 COMMIT을 쓰지 않았는데 DDL 등을 실행하면서 서버가 알아서 커밋하는 것.

어플라이어 스레드applier thread

레플리카에서 릴레이 로그를 읽어 변경을 실제로 적용하는 스레드. 매뉴얼의 다른 이름은 SQL 스레드다.

언두 로그undo log

행을 바꾸기 전의 옛 값을 적어 두는 기록. 롤백할 때와 다른 트랜잭션이 옛 버전을 읽을 때 쓴다.

엄격 모드strict mode

칼럼에 맞지 않는 값을 넣으면 고쳐 넣지 않고 오류로 문장을 중단하는 SQL 모드. MySQL 8.4 기본값에 포함된다.

업무 키natural key

이메일·상품 코드처럼 업무에서 원래 쓰는 값으로 만든 키.

업서트upsert

없으면 삽입하고 있으면 갱신하는 작업. MySQL은 INSERT ... ON DUPLICATE KEY UPDATE로 한다.

역할role

권한 묶음에 붙인 이름. 사용자에게 역할을 주면 묶인 권한을 한꺼번에 받는다.

영속 통계persistent statistics

통계를 디스크에 저장해 재시작해도 유지하는 방식. innodb_stats_persistent로 켜며 기본값이다.

오프 페이지off-page

긴 칼럼 값을 행이 든 페이지 밖의 별도 페이지에 두고, 행에는 위치를 가리키는 포인터만 남기는 저장 방식.

온라인 DDLonline DDL

테이블 구조를 바꾸는 동안에도 조회와 쓰기를 계속 받게 하는 InnoDB의 ALTER 방식.

옵션 파일option file

MySQL이 시작할 때 읽는 설정 파일. my.cnf가 대표적이다.

옵티마이저optimizer

같은 결과를 내는 여러 실행 방법 중 가장 싸 보이는 것을 골라 실행 계획을 만드는 MySQL의 부품.

옵티마이저 힌트optimizer hint

/*+ ... */ 주석 안에 쓰는 지시. 조인 순서·방식·변수 값까지 문장 단위로 지정한다.

와이드 칼럼 저장소wide-column store

행 키로 데이터를 여러 서버에 나누고, 행마다 칼럼을 자유롭게 두는 NoSQL.

외래 키foreign key

다른 테이블의 키를 참조하는 칼럼. 없는 부모를 가리키는 자식 행이 생기지 않게 DB가 막아 준다. 줄여서 FK라고 쓴다.

외부 조인outer join

짝이 없어도 한쪽 테이블의 행을 모두 남기고, 없는 쪽 칼럼은 NULL로 채우는 조인. LEFT JOIN·RIGHT JOIN이 있다.

원자값atomic value

더 나눠 쓸 수 없는 하나의 값. 제1정규형은 칸마다 원자값 하나만 두라고 요구한다.

원자성atomicity

트랜잭션 안의 작업이 전부 반영되거나 전부 취소돼야 한다는 성질. 일부만 반영된 상태가 남으면 깨진 것이다.

윈도우 함수window function

행을 합치지 않고 각 행 옆에 순위·누적합 같은 계산 결과를 붙이는 함수. ROW_NUMBER() OVER (...) 같은 형태다.

유니크 인덱스unique index

같은 값이 두 번 들어가지 못하게 막는 인덱스. MySQL에서는 NULL이 여러 개 허용된다.

이벤트 스케줄러event scheduler

MySQL 이벤트를 제때 실행하는 서버 안의 스레드. 8.4에서 기본으로 켜져 있다.

이상 현상anomaly

트랜잭션이 혼자 실행될 때는 생기지 않는데, 여럿이 섞여 실행되면서 생기는 잘못된 읽기·쓰기 결과. 더티 리드·팬텀 리드 등이 있다.

이중 비밀번호dual password

비밀번호를 바꿀 때 새 비밀번호와 옛 비밀번호를 잠시 함께 유효하게 두는 기능. 무중단 교체에 쓴다.

이행 함수 종속transitive dependency

X → Y, Y → Z여서 Z가 Y를 거쳐 X에 종속하는 것. 제3정규형이 없앤다.

인덱스 레인지 스캔index range scan

인덱스에서 조건 범위의 시작점을 찾은 뒤 끝날 때까지 리프를 따라 옆으로 읽는 방식.

인덱스 힌트index hint

테이블 이름 뒤에 USE·FORCE·IGNORE INDEX로 붙여 쓸 인덱스를 알려 주는 구문.

인비저블 인덱스invisible index

옵티마이저가 쓰지 않도록 숨긴 인덱스. 쓰기 때는 계속 갱신되므로 바로 되돌릴 수 있다.

인스트루먼트instrument

Performance 스키마가 시간이나 횟수를 재려고 서버 코드 안에 심어 둔 측정 지점.

인증 플러그인authentication plugin

접속한 사람이 맞는 사용자인지 확인하는 방법을 담은 부품. 클라이언트도 같은 방식을 지원해야 접속된다.

인텐션 락intention lock

'이 테이블의 어떤 행을 잠그려 한다'는 표시로 테이블에 거는 잠금. 테이블 전체 잠금과 행 잠금이 충돌하는지 빨리 판단하게 해 준다.

일관된 읽기consistent read

잠금 없이 스냅샷 기준의 버전을 읽는 InnoDB의 기본 SELECT 방식.

읽기 뷰read view

트랜잭션이 '어느 트랜잭션의 변경까지 보여야 하는지'를 적어 둔 목록. 이걸로 행의 여러 버전 중 하나를 고른다.

임시 테이블temporary table

잠깐 쓰고 버리는 테이블. 사용자가 CREATE TEMPORARY TABLE로 만들어 그 세션에서만 쓰는 것과, GROUP BY·DISTINCT·UNION 등을 처리하려고 MySQL이 쿼리 도중 스스로 만드는 내부 임시 테이블이 있다.

ㅈ

자동 커밋autocommit

문장 하나를 실행할 때마다 자동으로 커밋하는 모드. MySQL 기본은 켜짐(ON)이다.

작업 집합working set

일정 기간 자주 쓰이는 페이지 묶음. 버퍼 풀에 다 들어가면 캐시 효율이 좋다.

잠금 읽기locking read

FOR UPDATE·FOR SHARE처럼 읽으면서 그 행에 잠금까지 거는 SELECT.

장애 조치failover

소스 서버가 죽었을 때 다른 서버를 새 소스로 올려 쓰기를 넘겨받게 하는 일.

재귀 CTErecursive CTE

자기 자신을 참조하는 CTE. 시작 행에서 출발해 새 행이 안 나올 때까지 반복하며 계층 구조를 펼친다.

전문 검색full-text search

문서 안의 단어로 검색하는 방식. MySQL은 FULLTEXT 인덱스와 MATCH ... AGAINST를 쓴다.

접두어 인덱스prefix index

긴 문자열 칼럼의 앞부분만 잘라 인덱싱하는 인덱스.

정규형normal form

정규화 단계마다 테이블이 갖춰야 할 조건. 제1정규형부터 차례로 엄격해진다.

정규화normalization

테이블 하나에 한 주제의 사실만 남도록 나눠 중복을 없애는 설계 과정. 중복 때문에 생기는 삽입·갱신·삭제 이상을 막는다.

정렬 버퍼sort buffer

파일소트가 정렬에 쓰는 메모리 영역. 넘치면 디스크를 쓴다.

정족수quorum

그룹이 결정을 내리는 데 필요한 과반수 멤버. 이를 잃은 쪽은 쓰기를 멈춘다.

제약 조건constraint

기본 키·UNIQUE·NOT NULL·CHECK·외래 키처럼 테이블에 들어갈 값을 제한하는 규칙. 어기는 변경은 DB가 거부한다.

종속 보존dependency preservation

나누기 전의 함수 종속을 나눈 테이블 각각의 키·제약 조건만으로 계속 지킬 수 있는 성질.

좌측 접두어 규칙leftmost prefix rule

복합 인덱스는 맨 왼쪽 칼럼부터 차례로 조건이 있어야 탐색에 쓸 수 있다는 규칙.

주 속성prime attribute

후보 키 중 하나에라도 들어 있는 칼럼. 정규형 정의에서 비주 속성과 구분한다.

지연된 복제delayed replication

레플리카가 일부러 정한 시간만큼 늦게 적용하게 하는 설정. 실수로 지운 데이터를 되살리는 데 쓴다.

ㅊ

참조 무결성referential integrity

자식 테이블이 부모 테이블에 없는 값을 참조하지 않도록 지키는 규칙.

체인지 버퍼change buffer

메모리에 없는 세컨더리 인덱스 페이지의 변경을 잠시 모아 뒀다가 나중에 한꺼번에 반영하는 영역. MySQL 8.4 기본은 사용 안 함(none).

체크포인트checkpoint

어느 지점까지의 변경이 데이터 파일에 반영됐는지 표시하는 기준점. 그 이전 리두 로그는 재사용할 수 있다.

최소 권한 원칙principle of least privilege

꼭 필요한 권한만 주는 원칙.

최종 일관성eventual consistency

새 쓰기가 멈추면 결국 모든 읽기가 마지막 값을 돌려준다는 약속. 그 전에는 노드나 멤버마다 다른 값이 보일 수 있다.

충돌 검사certification

그룹 복제에서 동시에 실행된 트랜잭션이 같은 행을 고쳤는지 비교해, 순서가 앞선 쪽만 커밋시키는 단계. 매뉴얼 용어는 인증.

ㅋ

카디널리티cardinality

칼럼에 들어 있는 서로 다른 값의 개수. 클수록 값이 다양해 인덱스로 거르기 좋다.

카티전 곱Cartesian product

두 테이블 행의 모든 조합. 조인 조건을 빠뜨리면 행 수가 곱으로 불어난다.

캐시 미스cache miss

필요한 페이지가 메모리 캐시에 없어서 디스크에서 읽어 와야 하는 상황. 잦을수록 느려진다.

커넥션 풀connection pool

DB 연결을 미리 여러 개 만들어 두고, 요청마다 빌려 쓰고 돌려받는 장치. 동시 연결 수도 정해진 개수로 묶인다.

커밋commit

트랜잭션의 변경을 확정하는 것. 이후에는 장애가 나도 변경이 남아야 한다.

커버링 인덱스covering index

쿼리에 필요한 칼럼이 모두 인덱스에 들어 있어서 테이블 행을 따로 읽지 않아도 되는 경우.

컨슈머consumer

Performance 스키마에서 인스트루먼트가 잰 값을 어느 테이블에 저장할지 정하는 스위치. 켜진 컨슈머의 테이블에만 기록된다.

컨텍스트 스위칭context switching

CPU가 실행하던 스레드를 멈추고 다른 스레드로 갈아타는 일. 스레드가 너무 많으면 갈아타는 데 드는 시간이 실제 일보다 커진다.

코스트 모델cost model

실행 방법의 비용을 I/O·CPU 단가로 어림하는 옵티마이저의 계산 규칙.

콜레이션collation

문자열을 비교·정렬하는 규칙. 대소문자나 악센트를 같은 글자로 볼지 등을 정한다.

쿼리 블록query block

SELECT 하나 단위의 쿼리 조각. EXPLAIN의 id가 이 번호다.

쿼리 캐시query cache

같은 쿼리의 결과를 저장해 뒀다가 그대로 돌려주던 기능. 8.0에서 삭제됐다.

쿼리 힌트query hint

옵티마이저가 고른 실행 방법을 사람이 덮어쓰는 지시문.

크래시 복구crash recovery

서버가 비정상 종료된 뒤 다시 켜질 때 InnoDB가 스스로 하는 복구. 커밋된 변경은 살리고 끝나지 않은 변경은 되돌린다.

크래시 세이프 복제crash-safe replication

레플리카가 비정상 종료된 뒤 다시 켜져도 어디까지 적용했는지 잃지 않고 이어서 복제하도록 한 설정.

클러스터링 인덱스clustered index

행 데이터 자체를 PK 순서로 정렬해 저장한 인덱스. InnoDB 테이블은 곧 PK 기준의 클러스터링 인덱스다.

클러스터링 키clustering key

행 데이터를 정렬해 저장하는 기준 키. InnoDB에서는 보통 PK이며, 세컨더리 인덱스는 이 값으로 실제 행을 찾아간다.

키-값 저장소key-value store

키로 값을 넣고 꺼내는 것이 전부인 NoSQL. DB는 값 안을 보지 않는다.

키링keyring

암호화에 쓰는 마스터 키를 보관·관리하는 MySQL 구성 요소. 8.4에서는 keyring_file 같은 옛 파일 키링 플러그인이 없어져 component_keyring_file 같은 컴포넌트를 쓴다.

ㅌ

테이블 락table lock

테이블 전체에 거는 잠금. 쓰기 하나가 테이블 전체를 막는다.

테이블 재구성table rebuild

테이블의 모든 행을 새 구조로 다시 쓰는 작업. 테이블이 클수록 오래 걸린다.

테이블스페이스tablespace

테이블과 인덱스 데이터를 담는 논리적 저장 공간. 보통 테이블마다 .ibd 파일 하나다.

테이블스페이스 키tablespace key

테이블스페이스마다 있는 데이터 암호화 키. 마스터 키로 암호화해 헤더에 저장한다.

트랜잭션transaction

한 덩어리로 처리해야 하는 작업 묶음. 전부 반영(커밋)되거나 전부 취소(롤백)된다.

트리거trigger

특정 테이블에 INSERT·UPDATE·DELETE가 일어날 때 자동으로 실행되도록 걸어 둔 SQL.

ㅍ

파생 테이블derived table

FROM 절 서브쿼리 결과로 만든 임시 결과 테이블. EXPLAIN에서 <derivedN>으로 보인다.

파서parser

SQL 문장을 읽어 문법을 검사하고 서버가 다룰 수 있는 트리 구조로 바꾸는 단계. 전문 검색에서는 글을 색인할 단어로 잘라 내는 부품(n-gram 파서 등)도 파서라 부른다.

파셜 라이트partial write

페이지를 쓰는 도중 장애가 나 페이지 일부만 새 값으로 바뀌어 깨지는 현상.

파스 트리parse tree

파서가 SQL 문장을 분석해 만든, 서버가 다룰 수 있는 트리 구조.

파일소트filesort

인덱스 순서를 쓸 수 없어 MySQL이 결과를 따로 정렬하는 작업. 이름과 달리 메모리 안에서 끝나는 경우도 많다.

파티셔닝partitioning

큰 테이블을 칼럼 값 기준으로 여러 조각(파티션)으로 나눠 저장하는 기능. 밖에서는 한 테이블로 보인다.

파티션partition

큰 테이블을 날짜 같은 기준으로 나눈 조각. 조건에 맞는 조각만 골라 읽을 수 있다.

파티션 키partition key

행이 어느 파티션에 들어갈지 정하는 칼럼이나 식.

파티션 프루닝partition pruning

조건에 맞는 값이 있을 수 없는 파티션을 건너뛰고 필요한 파티션만 읽는 최적화.

팬아웃fan-out

노드 하나가 가리키는 자식 수. 클수록 트리가 낮아져 적은 단계로 원하는 값에 닿는다.

팬텀 리드phantom read

같은 범위를 두 번 조회했는데 그사이 다른 트랜잭션이 넣은 행이 새로 나타나는 현상.

퍼지purge

더 이상 아무 트랜잭션도 볼 필요가 없는 옛 버전(언두 레코드)과 삭제 표시된 행을 백그라운드에서 치우는 작업.

펀치 홀hole punching

파일 중간의 빈 구간을 파일 시스템에 돌려주는 기능. 파일 크기는 그대로 보여도 실제 디스크 사용량이 준다.

페이지page

InnoDB가 디스크와 메모리 사이를 오가는 최소 단위 블록. 기본 16KB이고 행 여러 개가 한 페이지에 들어간다.

페이지 분할page split

페이지에 새 항목을 더 담을 수 없을 때 페이지를 둘로 나누고 일부 항목을 새 페이지로 옮기는 작업.

표시 폭display width

INT(11)의 괄호 숫자. 저장 범위와 무관한 표시용 힌트이며 8.0.17부터 폐기 예정이다.

풀 인덱스 스캔full index scan

인덱스 하나를 처음부터 끝까지 순서대로 읽는 방식. EXPLAIN type의 index다.

풀 테이블 스캔full table scan

인덱스를 쓰지 않고 테이블의 모든 행을 처음부터 끝까지 읽는 방식.

플러시flush

메모리에만 있던 변경을 디스크에 실제로 쓰는 것.

필터링된 복제filtered replication

복제 필터로 일부 데이터베이스·테이블만 골라 레플리카에 적용하는 복제.

ㅎ

함수 종속functional dependency

X 값이 정해지면 Y 값이 하나로 정해지는 관계(X → Y). 데이터가 우연히 그런 것이 아니라 업무 규칙이다.

함수 키 파트functional key part

칼럼 대신 표현식 결과로 인덱스를 만드는 8.0 기능. 예: INDEX ((LOWER(email))).

해시 조인hash join

한쪽 테이블로 메모리에 해시표를 만들고, 다른 쪽 행을 하나씩 대조하는 조인 방식. 인덱스 없는 동등 조인에 유리하다.

해시 테이블hash table

키를 해시 함수로 저장 위치에 바로 대응시켜, 같은 키를 한 번에 찾게 해 주는 자료구조.

핸들러 APIhandler API

MySQL 서버가 스토리지 엔진에게 '행 하나 읽어 와', '이 행 써' 같은 요청을 보내는 공통 인터페이스.

행 기반 복제row-based replication

바뀐 행의 전후 값을 바이너리 로그에 적어 레플리카가 그대로 반영하게 하는 방식. MySQL 8.4 기본값이다.

행 포맷row format

행을 페이지에 어떤 형식으로 저장할지 정하는 방식(DYNAMIC·COMPACT 등).

현재 읽기current read

스냅샷이 아니라 가장 최신 커밋 버전을 읽으면서 잠금까지 거는 읽기. FOR UPDATE·UPDATE·DELETE가 이렇게 읽는다.

후보 키candidate key

슈퍼 키 중 칼럼을 하나라도 빼면 행을 구분하지 못하는 최소 묶음. 이 중 하나를 기본 키로 고른다.

히스토그램histogram

칼럼 값이 어느 구간에 얼마나 몰려 있는지 나눠 센 통계. 인덱스가 없는 칼럼의 조건 선택도를 추정하는 데 쓴다.

A

ACIDAtomicity·Consistency·Isolation·Durability · 원자성·일관성·격리성·지속성

트랜잭션이 지켜야 할 네 가지 성질. 전부 되거나 전부 안 되고, 규칙이 깨지지 않고, 서로 간섭하지 않고, 커밋하면 사라지지 않는다.

AHIAdaptive Hash Index · 적응형 해시 인덱스

자주 찾는 B-Tree 페이지를 InnoDB가 메모리에 해시로 따로 만들어 두는 기능. MySQL 8.4부터 기본 OFF.

B

B-Tree

키를 정렬된 상태로 보관하는 균형 트리. 노드 하나에 키를 여러 개 담아 트리 높이를 낮게 유지하므로, 몇 번의 페이지 읽기로 원하는 키에 닿는다. MySQL 일반 인덱스의 구조다.

B+Tree

실제 데이터(또는 행 위치)가 맨 아래 리프 노드에만 있고 리프끼리 옆으로 이어진 B-Tree 변형. 범위 조회를 리프를 따라 차례로 읽으며 처리한다. InnoDB 인덱스가 이 모양이다.

BASEBasically Available, Soft state, Eventually consistent

가용성을 앞세운 분산 저장소의 성질. 늘 응답하되 사본끼리는 시간이 지나 결국 같아진다.

BCNFBoyce-Codd Normal Form · 보이스-코드 정규형

모든 결정자가 슈퍼 키여야 하는 정규형. 제3정규형보다 엄격하다.

BKABatched Key Access · 배치 키 접근

조인할 키를 한꺼번에 모아 MRR로 읽는 조인 방식. 한 행씩 인덱스를 찾는 것보다 디스크 접근이 순차적이 된다.

BLOBBinary Large Object · 대용량 바이너리 객체

이미지·파일처럼 큰 이진 데이터를 담는 칼럼 타입.

BNLBlock Nested Loop · 블록 중첩 루프

조인에 쓸 인덱스가 없을 때 바깥 테이블 행을 메모리 버퍼에 모아 안쪽 테이블을 훑으며 비교하던 옛 조인 방식. 8.0.20부터 해시 조인으로 대체됐다.

C

CAP 정리CAP theorem

분산 저장소는 네트워크가 끊겼을 때 일관성과 가용성 중 하나를 포기해야 한다는 정리.

CBOCost-Based Optimizer · 비용 기반 옵티마이저

통계로 각 실행 방법의 비용을 추정해 가장 싼 계획을 고르는 옵티마이저. MySQL이 쓰는 방식이다.

CTECommon Table Expression · 공통 테이블 식

WITH 절로 이름 붙인 임시 결과 집합. 한 쿼리 안에서 여러 번 참조하거나 재귀로 쓸 수 있다.

D

DBADatabase Administrator · 데이터베이스 관리자

데이터베이스 서버의 설치·설정·백업·성능·권한을 책임지고 운영하는 사람.

DBMSDatabase Management System · 데이터베이스 관리 시스템

데이터를 저장하고, 여러 사용자가 동시에 안전하게 읽고 쓰게 해 주는 소프트웨어. MySQL·PostgreSQL·Oracle 등이 있다.

DDLData Definition Language · 데이터 정의어

CREATE·ALTER·DROP처럼 테이블·인덱스 같은 구조를 만들고 바꾸는 SQL.

DMLData Manipulation Language · 데이터 조작어

SELECT·INSERT·UPDATE·DELETE처럼 행 데이터를 읽고 바꾸는 SQL.

G

GPLGNU General Public License

GPL 코드를 고치거나 포함해 배포하면 그 소스도 같은 조건으로 공개해야 하는 오픈소스 라이선스.

GTIDGlobal Transaction Identifier · 전역 트랜잭션 식별자

커밋된 트랜잭션마다 붙는, 복제 구성 전체에서 유일한 번호. 서버 UUID와 순번으로 되어 있어 어느 서버에서도 같은 트랜잭션을 가리킨다.

H

HAHigh Availability · 고가용성

서버 한 대가 죽어도 서비스가 멈추지 않고 이어지게 하는 성질.

I

I/OInput/Output · 입출력

디스크나 네트워크와 데이터를 주고받는 일. DB 성능에서는 주로 디스크 읽기·쓰기 횟수를 말한다.

ICPIndex Condition Pushdown · 인덱스 조건 푸시다운

WHERE 조건 중 인덱스 칼럼만으로 판단할 수 있는 것을 스토리지 엔진이 먼저 걸러, 테이블 행을 덜 읽게 하는 최적화. 실행 계획에는 Using index condition으로 나온다.

InnoDB

MySQL의 기본 스토리지 엔진. 트랜잭션·행 단위 잠금·장애 복구를 지원하며, 테이블 데이터를 PK 순서로 저장한다.

InnoDB 클러스터InnoDB Cluster

그룹 복제에 관리 도구 MySQL Shell과 연결 중계기 MySQL Router를 묶은 MySQL의 공식 고가용성 구성. 이름만 같을 뿐 스토리지 엔진 InnoDB와는 다른 것이다.

K

KMSKey Management Service · 키 관리 서비스

암호화 키를 안전하게 만들고 보관·교체해 주는 외부 서비스.

L

LAMPLinux·Apache·MySQL·PHP

2000년대 웹 서비스의 대표 오픈소스 조합.

LSNLog Sequence Number · 로그 순번

리두 로그에 쓰인 위치를 나타내는 계속 커지는 번호. 데이터 페이지가 어디까지 반영됐는지 비교하는 기준이 된다.

LTSLong-Term Support · 장기 지원

보안·버그 수정을 수년간 보장하는 안정 버전 트랙. 새 기능은 거의 넣지 않는다.

M

MBRMinimum Bounding Rectangle · 최소 경계 사각형

도형을 딱 감싸는 가장 작은 직사각형. R-Tree가 공간 데이터를 이 사각형 단위로 묶어 찾는다.

MRRMulti-Range Read · 다중 범위 읽기

인덱스로 찾은 행 위치를 모아 정렬한 뒤 디스크 순서대로 읽어 랜덤 I/O를 줄이는 최적화.

MVCCMulti-Version Concurrency Control · 다중 버전 동시성 제어

행을 고칠 때 옛 버전을 남겨 두고, 읽는 쪽은 자기에게 보여야 할 버전을 골라 읽는 방식. 읽기와 쓰기가 서로 기다리지 않는다.

MyISAM

MySQL의 옛 기본 스토리지 엔진. 트랜잭션과 행 단위 잠금을 지원하지 않아 테이블 단위로만 잠그고, 행을 정렬하지 않고 쌓아 둔다.

MySQL 이벤트event

정해 둔 시각이나 주기에 서버가 알아서 실행하는 SQL. 운영체제의 cron과 비슷하다.

MySQL Router

애플리케이션과 DB 사이의 연결 중계 프로그램. 쓰기는 프라이머리로, 읽기는 다른 멤버로 보낸다.

MySQL Shell

InnoDB 클러스터를 만들고 멤버를 넣고 빼는 관리용 명령줄 도구. AdminAPI를 제공한다.

N

NLNested Loop · 중첩 루프

바깥 테이블의 행마다 안쪽 테이블을 찾는 가장 기본적인 조인 방식.

NoSQLNot only SQL · 비관계형 데이터베이스

테이블·조인·고정 스키마 대신 키-값·문서·와이드 칼럼·그래프 모델을 쓰는 저장소를 묶어 부르는 이름.

O

OLAPOnline Analytical Processing · 온라인 분석 처리

대량 데이터를 집계·분석하는 무거운 조회 위주의 업무 형태.

OLTPOnline Transaction Processing · 온라인 트랜잭션 처리

주문·결제처럼 짧은 읽기·쓰기가 아주 많이 동시에 들어오는 업무 형태.

P

PACELCPartition·Availability·Consistency·Else·Latency·Consistency

네트워크 분할 때는 가용성과 일관성 중 하나를, 평소에는 지연과 일관성 중 하나를 고른다는 CAP의 확장.

Performance 스키마Performance Schema

서버 내부의 문장 실행·대기·메모리를 측정해 performance_schema 테이블로 보여 주는 기능. 메모리에만 있어 재시작하면 사라진다.

PKPrimary Key · 기본 키

테이블에서 행 하나를 유일하게 가리키는 키. NULL이 될 수 없고 테이블당 하나다.

R

RBORule-Based Optimizer · 규칙 기반 옵티마이저

데이터 분포를 보지 않고 미리 정한 우선순위 규칙으로 실행 방법을 고르는 옛 방식.

RDBMSRelational Database Management System · 관계형 데이터베이스 관리 시스템

데이터를 행과 칼럼으로 된 테이블에 담고, 테이블 사이 관계를 키로 잇는 DBMS. SQL로 다룬다.

READ COMMITTED커밋된 읽기

다른 트랜잭션이 커밋한 값만 읽되, 문장마다 가장 최근에 커밋된 값을 새로 보는 격리 수준. Oracle·PostgreSQL의 기본값이다.

REPEATABLE READ반복 가능한 읽기

InnoDB의 기본 격리 수준. 트랜잭션이 처음 읽은 시점의 스냅샷을 끝까지 보여 주어, 같은 행을 다시 읽어도 같은 값이 나온다.

RPORecovery Point Objective · 목표 복구 시점

장애 때 잃어도 되는 데이터의 양을 시간으로 나타낸 것. 0이면 커밋된 데이터를 하나도 잃으면 안 된다.

RTORecovery Time Objective · 목표 복구 시간

장애 뒤 서비스가 돌아오기까지 허용하는 최대 시간.

S

SQL 모드SQL mode

서버가 SQL 문법과 값을 얼마나 엄격하게 검사할지 정하는 설정(sql_mode).

SRIDSpatial Reference System Identifier · 공간 참조계 식별자

좌표가 어떤 기준(평면 좌표인지 위경도인지 등)으로 쓰였는지 나타내는 번호.

sys 스키마sys schema

Performance 스키마의 값을 목적별 뷰로 묶어 읽기 쉽게 보여 주는 내장 스키마.

T

TDETransparent Data Encryption · 투명한 데이터 암호화

디스크에 저장할 때 자동으로 암호화하고 읽을 때 풀어 주는 방식. 애플리케이션은 코드를 바꿀 필요가 없다.

U

UUIDUniversally Unique Identifier · 범용 고유 식별자

어디서 만들어도 겹치지 않도록 설계된 128비트 식별자. 무작위 값인 v4나, 시각의 낮은 자리부터 적는 MySQL UUID()(v1) 값은 만든 순서대로 정렬되지 않는다.

0-9

2단계 커밋two-phase commit

커밋을 '준비'와 '확정' 두 단계로 나눠, 관련된 모든 기록(MySQL에서는 리두 로그와 바이너리 로그)이 끝난 뒤에야 확정하는 방식. 중간에 장애가 나도 한쪽에만 반영된 트랜잭션이 남지 않는다.

3값 논리three-valued logic

SQL 조건 결과가 참·거짓 말고 '알 수 없음(NULL)'도 될 수 있다는 규칙. WHERE는 참인 행만 남긴다.

마지막 갱신: