데이터베이스
-
Index데이터베이스 2022. 9. 1. 15:10
Index 인덱스는 추가적인 저장 공간을 사용하여 테이블에 대한 검색 성능을 향상시키기 위해 사용되는 자료구조이다. 인덱스는 목차, 색인 또는 찾아보기라고도 부르며, 우리가 원하는 정보를 찾기 위해 책을 전부 훑어보지 않고 목차를 먼저 보는 것처럼, 데이터베이스에서도 인덱스를 생성해두면 모든 레코드를 탐색할 필요가 없다. 반대로 인덱스가 없다면 원하는 레코드를 찾기 위해 모든 레코드를 탐색해야 한다는 것을 해야한다. 즉, 인덱스는 레코드를 구별하는 최소한의 정보를 담고있고, 그것이 보통 Primary Key(PK)가 된다. Primary Key 기본 키라고도하며 특정 레코드를 구분할 수 있는 애트리뷰트이며 중복 및 Null 값을 가질 수 없다. 학생 테이블이라면 학번이 PK가 될 것이고, 이름, 나이, ..
-
4장 2.2 외래 키 지원데이터베이스/Real MySQL 8.0 2022. 8. 14. 22:35
키에 대한 설명을 먼저 읽고 오시면 좋습니다. [Real MySQL 8.0] - 4장 2.1 프라이머리 키에 의한 클러스터링 인덱스 외래 키(Foreign Key) 이전 글에서 여러 특별한 키가 있다고 말씀드렸습니다. 외래 키는 관계형 데이터베이스에서 매우 중요한 개념이기 때문에 자세하게 설명하고 넘어가겠습니다. 외래 키는 다른 테이블을 참조하기 위해 사용하는 키입니다. 예를 들어보겠습니다. 영화사에서 회원을 관리하기 위한 데이터베이스를 만들었습니다. 회원 테이블 사용자 ID(PK) 멤버십 등급 현재 포인트 총 관람 횟수 예매한 영화 제목 1 실버 10000 포인트 10번 토르 : 러브 앤 썬더 2 골드 30000 포인트 47번 범죄도시 2 척 보기에는 문제가 없어 보이는 데이터베이스입니다. 하지만 어떤..
-
4장 2.1 프라이머리 키에 의한 클러스터링 인덱스데이터베이스/Real MySQL 8.0 2022. 8. 14. 18:40
먼저 주요 개념들에 대해서 정리하고 넘어가겠습니다. 키(Key) 데이터베이스에서 조건을 만족하는 튜플을 찾거나 순서대로 정렬할 때 기준이 되는 속성입니다. 키는 같은 의미를 가진 여러 단어로 치환될 수 있습니다. 키 = 애트리뷰트(Attribute) = 속성 = 컬럼(Column) 쉽게 말하면 표의 열에 해당합니다. 키 애트리뷰트 속성 컬럼 레코드 튜플 참고로 레코드(Record) = 튜플(Tuple)은 행에 해당합니다. 키 중에서도 특별한 성질을 가진 키들이 있는데, 그중에서 프라이머리 키만 알아보도록 하겠습니다. 프라이머리 키(Primary Key) 기본 키(프라이머리 키)는 어떤 레코드를 고유한 레코드로 만들어주는 중복될 수 없는 값(식별자)입니다. 주민등록번호나 ID, 신용카드번호와 같은 예를 들..
-
4장 1.9 트랜잭션 지원 메타데이터데이터베이스/Real MySQL 8.0 2022. 8. 11. 22:13
데이터베이스 서버에서 테이블의 구조 정보와 스토어드 프로그램 등의 정보를 메타 데이터라고 합니다. MySQL 5.7 버전까지 메타 데이터를 다른 파일로 만들어 저장, 관리했으나, 메타 데이터 파일 생성과 변경 작업은 트랜잭션을 지원하지 않기 때문에 테이블의 생성/변경 중에 서버가 비정상적으로 종료되면 데이터가 오염되었습니다. MySQL 8.0 버전부터 문제 해결을 위해 모든 메타 데이터와 사용자의 인증과 권한에 관련된 시스템 테이블을 InnoDB를 통해 테이블로 저장합니다. 하지만 InnoDB를 제외한 다른 스토리지 엔진들은 여전히 파일을 따로 저장해야 하기 때문에 데이터를 직렬화하여 sdi라는 파일로 저장하게 됩니다.
-
4장 1.8 스레드 풀데이터베이스/Real MySQL 8.0 2022. 8. 11. 21:54
스레드 풀이란 요청이 들어오면 스레드를 생성/제거하는 것이 아닌 미리 정해진 개수만큼 스레드를 초기화해두고, 요청이 들어오면 사용자에게 할당/반환 하는 방식을 말합니다. 스레드 풀의 목적은 스레드가 과도하게 생성되는 것을 막아 자원 소모를 줄이는 것에 있습니다. 하지만 CPU 시간을 너무 짧게 설정하면 오히려 더 느려질 수 있어 신경써서 스케줄링 해야합니다. MySQL에서는 엔터프라이즈 에디션이 스레드 풀 기능을 지원하고 있는데, 커뮤니티 에디션은 Percona Server 엔진의 스레드 풀 플러그인을 설치하여 사용할 수 있습니다. Percona Server의 스레드 풀은 선순위 큐와 후순위 큐를 이용해 특정 트랜잭션이나 쿼리를 우선적으로 처리할 수 있는 기능을 제공합니다. 먼저 시작된 트랜잭션 내에 속..
-
4장 1.6-7 쿼리 실행 구조 및 쿼리 캐시데이터베이스/Real MySQL 8.0 2022. 8. 11. 21:00
쿼리 실행 구조 다음은 쿼리 실행 구조를 간략하게 표현한 것입니다. 쿼리 파서 파싱이란, 어떤 구문을 분석해서, 구성 요소들을 토큰으로 만드는 것을 말합니다. 쿼리 파서는 사용자로부터 쿼리 문장이 들어오면, 쿼리를 파싱하여 트리 형태의 구조로 재구성하는 역할을 합니다. 기본 문법 오류는 파싱 과정에서 발견되어, 사용자에게 오류 메시지를 전달합니다. 전처리기 파서가 처리한 파서 트리를 기반으로 문장에 구조적인 문제점이 있는지 확인합니다. 테이블, 컬럼 또는 내장 함수와 같은 객체들의 존재 여부와 접근 권한이 있는지 확인하는 과정을 수행합니다. 객체가 존재하지 않거나 접근 권한이 없다면 전처리기가 오류 메시지를 전달합니다. 옵티마이저 쿼리 문장을 어떻게 저렴한 비용으로 가장 빠르게 처리할지를 결정하는, 일종..
-
4장 1.4-5 플러그인 및 컴포넌트데이터베이스/Real MySQL 8.0 2022. 8. 10. 20:40
플러그인 MySQL에서는 파서나, 인증 방식, InnoDB의 스토리지 엔진 등 많은 것들이 플러그인 형태로 구현되어 있습니다. 개발자나 사용자의 요구에 따라 스토리지 엔진이나 그 밖에 부가 기능들을 직접 개발하여 사용할 수 있습니다. 엔진 GROUP BY, ORDER BY 같은 복잡한 처리가 MySQL 엔진의 '쿼리 실행기' 영역에서 처리되고 난 후, MySQL 엔진이 스토리지 엔진에게 핸들러 API를 통해 CRUD 명령을 내리게 됩니다. 하나의 쿼리 작업은 여러 하위 작업으로 나뉘는데, 각 하위 작업이 MySQL 엔진 영역에서 처리되는지, 스토리지 엔진 영역에서 처리되는지 구분할 수 있어야 합니다. 아래 쿼리를 입력하면 서버에서 지원되는 스토리지 엔진 목록이 나옵니다. SHOW ENGINES; Supp..
-
4장 1.3 메모리 할당 및 사용 구조데이터베이스/Real MySQL 8.0 2022. 8. 10. 20:04
MySQL에서 사용되는 메모리 공간은 크게 글로벌 메모리 영역과 로컬 메모리 영역으로 구분됩니다. 글로벌 메모리 영역 글로벌 메모리 영역의 모든 메모리 공간은 MySQL 서버의 시작과 동시에 운영체제로부터 기본적으로 하나의 메모리 공간만 할당받습니다. 모든 스레드가 공유하여 사용하는 영역입니다. 테이블 캐시 InnoDB 버퍼 풀 InnoDB 어댑티브 해시 인덱스 InnoDB 리두 로그 버퍼 로컬 메모리 영역 로컬 메모리 영역은 클라이언트 메모리 영역, 세션 메모리 영역이라고도 표현됩니다. 로컬 메모리 영역은 서버에 존재하는 클라이언트의 수만큼 생성되며, 클라이언트 스레드가 쿼리를 처리하는데 사용하는 영역입니다. 스레드별로 독립적으로 할당되며 절대 공유되어 사용되어서는 안 되는 영역입니다. 쿼리의 용도별로..