[MySQL] Architecture

https://lalitvc.wordpress.com/2016/11/03/mysql-architecture-and-components/

 

블로그 게시물은 새로운 MySQL 5.7 물리적, 논리적 아키텍처 구성 요소에 대한 것입니다. 블로그 게시물에서는 다이어그램을 사용하여 MySQL 데이터 처리 SQL 실행을 포함한 흐름에 대해 설명하려고합니다.

 

다른 데이터베이스와 달리 MySQL 매우 유연하며 다양한 종류의 스토리지 엔진을 다양한 종류의 요구에 대한 플러그인으로 제공합니다. 때문에 스토리지 엔진의 사용에 따라 MySQL 아키텍처 동작도 변경됩니다 ( : 트랜잭션 [InnoDB] 트랜잭션 [MyISAM] 엔진) 데이터 스토리지 SQL 실행 방법이 다르며 서버 내에서 엔진을 사용합니다 유형 스토리지 엔진에 따라 메모리 버퍼와 같은 특정 구성 요소가 SQL 조작에 사용됩니다.

MySQL 기본 기본 스토리지 엔진이므로 많은 InnoDB 대해 논의합니다.

 

■ MySQL Physical Architecture:

+ 환경파일 : 

auto.cnf :  Contains server_uuid

my.cnf :     MySQL Configuration file.

 

+ 기타 파일:

–basedir=dir_name

MySQL 바이너리 설치 디렉토리의 경로.

–datadir=dir_name

MySQL 데이터 디렉토리의 경로에는 데이터, 상태 로그 파일이 포함됩니다.

–pid-file=file_name

서버가 프로세스 ID 작성해야하는 파일의 경로 이름.

–socket=file_name, -S file_name

유닉스에서는 이름 지정된 파이프를 사용하여 로컬 서버에 연결하는 사용할 유닉스 소켓 파일의 이름입니다.

–log-error=file_name

파일에 오류 시작 메시지를 기록합니다.

 

■ MySQL Logical Architecture:

+ Client :

MySQL 서버를 연결하는 유틸리티.

 

+ Server :

실제 데이터가 저장되고 데이터 처리가 이루어지는 MySQL 인스턴스.

 

+ mysqld :

백그라운드에서 실행되며 클라이언트의 데이터베이스 관련 수신 발신 요청을 관리하는 MySQL 서버 데몬 프로그램. mysqld 다중 세션 프로세스로, 여러 세션에 연결하면 모든 연결을 수신하고 MySQL 인스턴스를 관리 ​​있습니다.

 

+ MySQL 메모리 할당 :

Main MySQL memory is dynamic, examples innodb_buffer_pool_size (from 5.7.5), key_buffer_size etc.Working on shared nothing principal which means, every session has unique execution plan and we can share data sets only for the same session.

주요 MySQL 메모리는 동적이며, : innodb_buffer_pool_size (5.7.5), key_buffer_size 공유 없음 원칙에 대한 작업은 모든 세션에 고유 실행 계획이 있으며 동일한 세션에 대해서만 데이터 세트를 공유 있음을 의미합니다.

 

- GLOBAL :

1. 할당

2. 서버 프로세스 해당 스레드에서 공유

 

- SESSION :

1. MySQL 클라이언트 세션에 할당

2. 동적 할당 할당 해제

3. 쿼리 결과 처리에 사용

4. 세션 버퍼 크기

 

+ 연결 / 스레드 처리 :

클라이언트 연결 / 세션을 관리합니다. [mysql 스레드]

 

+ Parser :

SQL 쿼리의 모든 문자를 확인하여 SQL 구문을 확인하고 SQL 쿼리에 대해 SQL_ID 생성하십시오.

 

+ Optimizer :

스토리지 엔진에 따라 효율적인 쿼리 실행 계획을 생성합니다. 쿼리를 다시 작성합니다. : InnoDB에는 공유 버퍼가 있으므로 옵티마이 저는 미리 캐시 데이터를 가져옵니다. 테이블 통계 최적화 프로그램을 사용하면 SQL 쿼리에 대한 실행 계획이 생성됩니다.

 

단계에서 권한 부여 확인 (사용자 액세스 권한) 수행됩니다.

 

+ Metadata cache :

객체 메타 데이터 정보 통계를위한 캐시.

 

+ Query cache :

메모리에서 동일한 쿼리 공유-클라이언트의 동일한 쿼리가 쿼리 캐시에 있으면 MySQL 서버는 해당 쿼리를 구문 분석하고 다시 실행하지 않고 쿼리 캐시에서 결과를 검색합니다. 세션에 대한 공유 캐시이므로 클라이언트가 생성 결과 세트를 다른 클라이언트가 발행 동일한 쿼리에 응답하여 보낼 있습니다. SQL_ID.SELECT 데이터를 기반으로하는 쿼리 캐시는 쿼리 캐시를 사용하는 프리 캐시 데이터의 가장 좋은 예입니다.

 

+ key cache :

Cache table indexes.In MySQL keys are indexes(In oracle keys are constraints) if index size is small then it will cache index structure and data leaf.If an index is large then it will only cache index structure.Used by MyISAM storage engine.

캐시 테이블 indexes.In 인덱스 크기가 인덱스 구조를 캐시합니다 다음 작은 데이터는 MySQL (오라클에서 제약 조건입니다) 인덱스이다 leaf.If 인덱스가 다음 큰이 전용 캐시 지수는 것이다 structure.Used MyISAM 의해 저장 엔진.

 

+ Storage engine :

MySQL component that manages physical data (file management) and locations. Storage engine responsible for SQL statement execution and fetching data from data files. Use as a plugin and can load/unload from running MySQL server.Few of them as following,

실제 데이터 (파일 관리) 위치를 관리하는 MySQL 구성 요소. SQL 실행 데이터 파일에서 데이터 페치를 담당하는 스토리지 엔진. 플러그인으로 사용하고 실행중인 MySQL 서버 에서로드 / 언로드 있습니다.

이중에서 몇몇은 다음과 같습니다.

 

- InnoDB :

* 완전 트랜잭션 ACID.

* 트랜잭션에 REDO UNDO 제공합니다.

* 테이블 스페이스의 데이터 스토리지 :

    다중 데이터 파일

  – InnoDB 데이터 로그 버퍼를 사용하는 논리 객체 구조.

* 수준 잠금.

 

- NDB (For MySQL Cluster) :

* 완전 트랜잭션 ACID 스토리지 엔진.

* 데이터 배포 여러 mysqld 사용.

* NDB NDB 엔진마다 자체 버퍼가있는 논리 데이터를 사용합니다.

* 트랜잭션에 REDO UNDO 제공합니다.

* 수준 잠금.

 

- MyISAM :

* Non-transactional 스토리지 엔진

* 읽기 속도

* 파일의 데이터 저장 , 메타 데이터 쿼리 캐시 사용

   테이블 구조의 FRM

   테이블 인덱스의 MYI

   테이블 데이터의 MYD

* 테이블 수준 잠금.

 

- MEMORY :

* 트랜잭션 스토리지 엔진

* 테이블 메타 데이터 구조 이외의 메모리에 저장된 모든 데이터

* 테이블 수준 잠금.

 

- ARCHIVE :

* 트랜잭션 스토리지 엔진

* 많은 양의 압축 인덱싱되지 않은 데이터를 저장합니다.

* INSERT, REPLACE SELECT 허용하지만 DELETE 또는 UPDATE SQL 조작은 허용하지 않습니다.

* 테이블 수준 잠금.

 

- CSV :

* 쉼표로 구분 형식을 사용하여 플랫 파일에 데이터를 저장합니다.

* MySQL 서버(.frm) 내에서 테이블 구조를 만들어야합니다.

 

■ SQL 실행

InnoDB, NDB 같은 다른 스토리지 엔진은 데이터에 대한 논리적 구조를 가지고 있으며 자체 데이터 버퍼를 가지고 있습니다. 버퍼는 스토리지 엔진 레벨에서 정의합니다.

 

■ MySQL 연결:

 

■ InnoDB 스토리지 엔진 정보 : 

* Fully transactional ACID.

* 수준 잠금.

* 트랜잭션에 REDO UNDO 제공합니다.

* 테이블 스페이스의 데이터 스토리지 :

   다중 데이터 파일

   – InnoDB 데이터 로그 버퍼를 사용하는 논리적 객체 구조

* 공유 파일을 사용하여 객체 저장

* InnoDB 데이터는 논리적 구조의 100 %이며 데이터는 물리적으로 저장됩니다.

* InnoDB 물리적 데이터 읽기 논리적 구조 구축 [블록 ]

* 논리 스토리지는 TABLESPACE라고합니다.

 

■ InnoDB storage engine architecture :

+ Tablespace :

InnoDB 스토리지는 테이블 스페이스로 나뉩니다. 테이블 스페이스는 여러 데이터 파일 (객체) 관련된 논리적 구조입니다. 테이블 스페이스에는 페이지 (블록), 익스텐트 세그먼트가 포함됩니다.

- Pages : 

InnoDB 가장 작은 데이터 조각 (블록이라고도 ). 기본 페이지 크기는 16kb이며 페이지는 크기에 따라 하나 이상의 행을 보유 있습니다.

 

사용 가능한 페이지 크기 : 4kb, 8kb,

16kb , 32kb, 64kb 변수 이름 : innodb_page_size

mysqld 서버를 초기화하기 전에 구성해야합니다.

 

- Extents :

페이지 그룹입니다 .I/O 처리량 향상을 위해 InnoDB 페이지 모음을 번에 범위 읽거나 씁니다.

기본 페이지 크기가 16kb 페이지 그룹의 경우 범위 크기는 최대 1mb입니다.

Doublewrite buffer 한번에 extent 읽기/ 쓰기 / 할당 또는 해재를 합니다.

 

- Segments:

InnoDB 테이블 스페이스의 파일들의 모음입니다. 세그먼트 에서 최대 4 개의 익스텐트를 사용합니다.

 

Designed by JB FACTORY