Open jjy0918 opened 2 years ago
플러그인은 단점
MySQL 8.0부터 컴포넌트 도입!
프로시저, 함수, 테이블 트리거, 이벤트를 포함하는 용어
프로시저 - 여러 쿼리를 묶어놓은 집합 (여러 동작 일괄 처리) 함수 - Return 값을 반환하므로, 다른 SQL문장에 넣어 사용할 수 있음 테이블 트리거 - 테이블의 레코드가 저장되거나 변경될 때, 미리 정의된 작업을 자동으로 실행 이벤트 - 유저가 정의한 스케줄에 따라 실행되는 작업
MySQL 서버에서 사용되는 각 테이블의 메타 정보를 담고 있는 캐시
DAS, SAN, NAS, ...
뭐가 다른데
권한 관련 용어, MySQL에서 Stored Procedure의 수행 권한과 관련있다.
데이터베이스에 존재하는 일종의 가상 테이블
대신 보여주는
역할을 수행투영
한다고 이해하니 편했다.장점
단점
foreign_key_checks
시스템 변수를 OFF
로 설정하면, 외래 키 관련된 작업을 일시적으로 멈출 수 있다.
ON DELETE CASCADE
, ON UPDATE CASADE
와 같은 옵션도 동작하지 않는다.GLOBAL
과 SESSION
모두 설정이 가능하기 때문에 주의가 필요하다.Undo log
를 이용하여 MVCC 기능을 제공한다.Undo log
에 저장되어 있고, 변경 결과는 InnoDB 버퍼 풀에 저장된다.
SERIALIZABLE
이 아니라면(READ_COMMITED, READ_UNCOMMITED, REPEATABLE_READ) INSERT와 연결되지 않은 순수한 읽기는 바로 실행된다.
innodb_table_locks
를 활성화하면 MySQL엔진에서 관리하는 테이블 잠금까지 감지할 수 있다.innodb_deadlock_detect
시스템 변수를 OFF
로 설정하면, 데드락 감지 스레드는 동작하지 않는다.innodb_lock_wait_timeout
설정 시 데드락이 발생 상황에서 일정 시간 지난 후 자동으로 요청이 실패하도록 할 수 있다.innodb_force_recovery
시스템 변수를 설정하면, 자동 복구나 파일 손상 여부 검사를 선별적으로 설정할 수 있다.
innodb_buffer_pool_size
시스템 변수를 통해 설정할 수 있다.innodb_buffer_pool_instances
시스템 변수를 통해 버퍼 풀을 여러 개로 분리할 수 있다.innodb_page_cleaners
, innodb_max_dirty_pages_pct_lwm
, innodb_io_capacity
등 다양한 옵션을 통해 관련 설정이 가능하다.워밍업(Warming Up)
의 경우 성능이 좋다.information_schema
데이터베이스의 innodb_buffer_page
테이블을 이용하여 버퍼 풀에 적재된 페이지를 확인할 수 있다.
information_schema
데이터베이스의 innodb_cached_indexes
테이블이 추가되어 인덱스 별로 데이터 페이지가 얼마나 적재돼 있는 확인할 수 있다.inndb_doublewrite
시스템 변수로 사용 여부를 결정할 수 있다.메인메모리 I/O 속도 >>> 디스크 I/O 속도
InnoDB 스토리지 엔진
은 테이블을 Primary key
에 따라 클러스터링한다.
Q.
어댑티브 해시 인덱스 = B-Tree 인덱스를 위한 보조 인덱스
라고 보면 되는거지?
테이블 구조를 변경(=스키마 변경)을 실행하는 도중에도, INSERT나 UPDATE와 같은 DML을 실행할 수 있게 하는 기능 InnoDB는 3가지 알고리즘 지원
간단하게, 데이터가 저장되는 공간
언두 테이블스페이스(Undo Tablespace)
라고 한다.CREATE UNDO TABLESPACE
나 DROP TABLESPACE
로 새로운 언두 테이블스페이스를 동적으로 생성, 삭제할 수 있다.Undo tablespace truncate
기능을 제공한다.인덱스 키 값
과 해당 인덱스 키 값이 저장된 데이터 페이지 주소
의 쌍으로 관리된다.log_output
옵션을 이용해 슬로우 쿼리 로그를 파일로 기록할지 테이블로 기록할지 선택할 수 있다.
4.1 MySQL 엔진 아키텍처
4.1.1 MySQL의 전체 구조
MySQL 엔진
과스토리지 엔진
으로 구분할 수 있다.4.1.1.1 MySQL 엔진
4.1.1.2 스토리지 엔진
CREATE TABLE test_table (fd1 INT, fd2 INT) ENGINE=INNODB;
4.1.1.3 핸들러 API
SHOW GLOBAL STATUS LIKE 'Handler%';
4.1.2 MySQL 스레딩 구조
performance_schema
데이터베이스의thread
테이블을 통해 확인할 수 있다.SELECT thread_id, name, type, processlist_user, processlist_host FROM performance_schema.threads
;4.1.2.1 포어그라운드 스레드(클라이언트 스레드)
thread_cache_size
시스템 변수에서 설정한다.데이터
를데이터 버퍼
나캐시
로부터 가져온다.직접 디스크의 데이터나 인덱스 파일
로부터 읽어온다.4.1.2.2 백그라운드 스레드
innodb_write_io_threads
,innodb_read_io_threads
시스템 변수로 설정한다.4.1.3 메모리 할당 및 사용 구조
글로벌 메모리 영역
과로컬 메모리 영역
으로 구분할 수 있다.글로벌 메모리 영역
은 MySQL 서버가 시작되면 운영체제로부터 할당된다.4.1.3.1 글로벌 메모리 영역
4.1.3.2 로컬 메모리 영역
4.1.4 플러그인 스토리지 엔진 모델
MySQL에는 여러 가지 엔진을 플러그인 형태로 개발하여 사용할 수 있다.
SHOW ENGINES;
명령어를 통해 MySQL 서버(mysqld)에서 지원되는 스토리지 엔진을 확인할 수 있다.Support 컬럼의 값을 통해 스토리지 엔진 여부를 확인할 수 있다.
MySQL 서버에 포함되지 않은 스토리지 엔진을 사용하려면 MySQL 서버를 다시 빌드(컴파일)해야 한다.
플러그인 형태로 빌드된 스토리지 엔진 라이브리러를 다운로드 받아 넣으면, 사용할 수 있다.
SHOW PLUGINS
명령을 통해 스토리지 엔진뿐 아니라 인증 및 전문 검색용 파서와 같은 플러그인도 확인할 수 있다.스토리지 엔진 뿐 아니라 다양한 기능을 플러그인 형태로 지원한다.
4.1.5 컴포넌트
4.1.6 쿼리 실행 구조
4.1.6.1 쿼리 파서
4.1.6.2 전처리기
4.1.6.3 옵티마이저
4.1.6.4 실행 엔진
4.1.6.5 핸들러(스토리지 엔진)
4.1.7 복제
4.1.8 쿼리 캐시(Query Cache)
4.1.9 스레드 풀
4.1.10 트랜잭션 지원 메타데이터
FRM
파일에 저장하고, 일부 스토어드 프로그램 파일(TRN, TRG, PAR 등) 기반으로 관리했다.mysql DB
에 저장하고mysql.ibd
라는 이름의 테이블스페이스에 저장된다.*.sdi
파일 형태로 저장되며, 기존의*.FRM
파일과 동일한 역할을 한다.