온라인 DDL 기능은 전체 테이블 변경 및 동시 DML을 지원합니다. 이 기능의 장점은 다음과 같습니다. + 몇 분 또는 몇 시간 동안 테이블을 사용할 수 없는 바쁜 생산 환경에서 응답 성과 가용성이 향상되었습니다. + LOCK 절을 사용하여 DDL 작업 중 성능과 동시성간의 균형을 조정하는 기능입니다. + 테이블 복사 방법보다 적은 디스크 공간 사용 및 I/O 오버 헤드를 가집니다. 일반적으로 온라인 DDL을 활성화하기 위해 특별한 작업을 수행 할 필요는 없습니다. 기본적으로 MySQL은 허용되는 한 적은 잠금으로 작업을 제 위치(in-place)에서 수행합니다. ALTER TABLE 문의 ALGORITHM 및 LOCK 절을 사용하여 DDL 조작의 측면을 제어 할 수 있습니다. 이 절은 명령문 끝에 테..
테이블의 행(Row) 형식에 따라 행이 실제로 저장되는 방식이 결정되어 쿼리 및 DML 작업의 성능에 영향을 줄 수 있습니다. 단일 디스크 페이지에 더 많은 행이 들어가므로 쿼리 및 인덱스 조회가 더 빠르게 작동 할 수 있으며 버퍼 풀에 필요한 캐시 메모리가 적고 업데이트 된 값을 기록하는 데 필요한 I/O가 적습니다. 각 테이블의 데이터는 페이지로 나뉩니다. 각 테이블을 구성하는 페이지는 B-트리 인덱스라고 하는 트리 데이터 구조로 정렬됩니다. 테이블 데이터와 보조 인덱스는 모두 이 유형의 구조를 사용합니다. 전체 테이블을 나타내는 B-트리 인덱스를 클러스터된 인덱스라고 하며 기본 키 열에 따라 구성됩니다. 클러스터형 인덱스 데이터 구조의 노드에는 행의 모든 열(Column) 값이 포함됩니다. 보조..
■ InnoDB Page Compression InnoDB는 테이블당 파일 테이블 스페이스에 있는 테이블에 대한 페이지 레벨 압축을 지원합니다. 이 기능을 무결성 혹은 명료한(Transparent) 페이지 압축이라고합니다. CREATE TABLE 또는 ALTER TABLE을 사용하여 COMPRESSION 속성을 지정하면 페이지 압축이 사용 가능합니다. 지원되는 압축 알고리즘에는 Zlib 및 LZ4가 있습니다. ▶ 지원되는 플랫폼 페이지 압축에는 스파스 파일 및 홀 펀치 지원이 필요합니다. 페이지 압축은 NTFS를 사용하는 Windows와 커널 수준에서 홀 펀치 지원을 제공하는 MySQL 지원 Linux 플랫폼의 다음 하위 집합에서 지원됩니다. 스파스 파일이란? : 홀 펀치란? : + RHEL 7 및 커널..
■ 압축 테이블 소개 프로세서와 캐시 메모리는 디스크 저장 장치보다 속도가 빨라지므로 많은 작업 부하가 디스크 바인딩됩니다. 데이터 압축을 통해 적은 CPU 사용 비용으로 데이터베이스 크기를 줄이고 I/O를 줄이며 처리량을 향상시킬 수 있습니다. 압축은 특히 자주 사용하는 데이터를 메모리에 유지하기에 충분한 RAM이있는 시스템에서 읽기 집약적인(select 쿼리의 범위가 많은) 응용 프로그램에 특히 유용합니다. ROW_FORMAT = COMPRESSED로 작성된 InnoDB 테이블은 구성된 innodb_page_size 값보다 디스크에서 더 작은 페이지 크기를 사용할 수 있습니다. 페이지가 작을수록 디스크에서 읽고 쓰는데 적은 I/O가 필요하며 특히 SSD 장치에 유용합니다. 압축된 페이지 크기는 CRE..
■ 백그라운드 InnoDB I/O 스레드 수 구성 InnoDB는 백그라운드 스레드를 사용하여 다양한 유형의 I/O 요청을 처리합니다. innodb_read_io_threads(prefetcher) 및 innodb_write_io_threads(cleaner) 구성 매개 변수를 사용하여 데이터 페이지에서 I/O를 읽고 쓰는 서비스를 제공하는 백그라운드 스레드 수를 구성 할 수 있습니다. 이 매개 변수는 각각 읽기 및 쓰기 요청에 사용되는 백그라운드 스레드 수를 나타냅니다. 지원되는 모든 플랫폼에서 유효합니다. MySQL 옵션 파일 (my.cnf 또는 my.ini)에서 이러한 매개 변수의 값을 설정할 수 있습니다. 동적으로 값을 변경할 수 없습니다. 이 매개 변수의 기본값은 4이며 허용 가능한 값의 범위는 ..
InnoDB는 운영 체제 스레드를 사용하여 사용자 트랜잭션의 요청을 처리합니다.(트랜잭션은 커밋 또는 롤백하기 전에 InnoDB에 많은 요청을 발행 할 수 있습니다.) 컨텍스트 전환이 효율적인 멀티 코어 프로세서가 있는 최신 운영 체제 및 서버에서는 대부분의 워크로드가 동시 스레드 수에 제한없이 잘 실행됩니다. MySQL 5.5 이상의 확장성 향상은 InnoDB 내에서 동시에 실행되는 스레드 수를 제한 할 필요성을 줄입니다. 스레드간 컨텍스트 전환을 최소화하는 것이 도움이되는 상황에서 InnoDB는 여러 가지 기술을 사용하여 동시에 실행중인 운영 체제 스레드 수 (한 번에 처리되는 요청 수)를 제한 할 수 있습니다. InnoDB가 사용자 세션으로부터 새 요청을 수신 할 때 동시에 실행중인 스레드 수가 사..
■ 버퍼 풀 플러싱 구성 InnoDB는 버퍼 풀에서 더티 페이지 플러시를 포함하여 백그라운드에서 특정 작업을 수행합니다. 더티 페이지란 버퍼풀의 페이지가 수정되었지만 아직 디스크의 데이터 파일에 기록되지 않은 페이지입니다. MySQL 5.7에서는 버퍼 풀 플러싱이 페이지 클리너 스레드에 의해 수행됩니다. 페이지 클리너 스레드 수는 기본값이 4인 innodb_page_cleaners 변수에 의해 제어됩니다. 그러나 페이지 클리너 스레드 수가 버퍼 풀 인스턴스 수를 초과하면 innodb_page_cleaners는 자동으로 innodb_buffer_pool_instances와 동일한 값으로 설정됩니다. 더티 페이지의 백분율이 innodb_max_dirty_pages_pct_lwm 변수에 의해 정의 된 낮은 워..
■ Doublewrite Buffer 이중 쓰기 버퍼는 InnoDB 데이터 파일의 적절한 위치에 페이지를 쓰기 전에 InnoDB가 버퍼 풀에서 플러시 된 페이지를 쓰는 저장 영역입니다. 페이지 쓰기 도중에 운영 체제, 스토리지 서브 시스템 또는 mysqld 프로세스 충돌이있는 경우 InnoDB는 응급 복구 중에 이중 쓰기 버퍼에서 올바른 페이지 사본을 찾을 수 있습니다. 데이터가 두 번 기록되지만 이중 쓰기 버퍼에는 두배의 I/O 오버 헤드 또는 두배의 I/O 작업이 필요하지 않습니다. 운영 체제에 대한 단일 fsync() 호출로 innodb_flush_method가 O_DIRECT_NO_FSYNC로 설정된 경우를 제외하고는 큰 순차 청크로 이중 쓰기 버퍼에 데이터가 기록됩니다. 이중 쓰기 버퍼는 대부분..
■ 시스템 테이블 스페이스 시스템 테이블 스페이스는 InnoDB 데이터 딕셔너리, 이중 쓰기 버퍼, 변경 버퍼 및 실행 취소 로그의 저장 영역입니다. 테이블이 파일당 또는 일반 테이블 스페이스가 아닌 시스템 테이블 스페이스에서 테이블을 작성하는 경우 테이블 및 인덱스 데이터도 포함 할 수 있습니다. 시스템 테이블 스페이스에는 하나 이상의 데이터 파일이 있을 수 있습니다. 기본적으로 ibdata1이라는 단일 시스템 테이블 스페이스 데이터 파일이 데이터 디렉토리에 작성됩니다. 시스템 테이블 스페이스 데이터 파일의 크기와 수는 innodb_data_file_path 시작 옵션으로 정의됩니다. 시스템 테이블 스페이스에 대한 추가 정보는 섹션의 다음 주제에서 제공됩니다. - 시스템 테이블 스페이스 크기 조정 - ..
■ Shared and Exclusive Locks InnoDB는 공유 (S) 잠금과 배타적 (X) 잠금의 두 가지 유형의 잠금이있는 표준 행 수준 잠금을 구현합니다. + 공유 (S) 잠금은 잠금을 보유한 트랜잭션이 행을 읽을 수 있도록합니다. + 독점 (X) 잠금은 잠금을 보유한 트랜잭션이 행을 업데이트하거나 삭제할 수 있도록 합니다. 트랜잭션 T1이 행 r에 공유 (S) 잠금을 보유하는 경우, 행 r에 대한 잠금에 대한 일부 고유 트랜잭션 T2의 요청은 다음과 같이 처리됩니다. + T2가 S 잠금 요청을 즉시 승인 할 수 있습니다. 결과적으로 T1과 T2는 모두 r에 S 잠금을 유지합니다. + T2에서 X 잠금 요청을 즉시 승인 할 수 없습니다. 트랜잭션 T1이 행 r에서 배타적 (X) 잠금을 보유하..
MySQL은 스토리지 엔진이라 불리는 플러그인 방식으로 데이터베이스를 관리합니다. 이 스토리지 엔진은 MyISAM, Memory, Aria등 여러가지가 있는데 각 스토리지 엔진 특성에 따라 관리하는 방법이 틀립니다. 그중에서도 가장 많이 쓰이는게 InnoDB라는 스토리지 엔진인데 굉장히 많은 기능들을 지원하고 있습니다. 이 InnoDB 스토리지 엔진에 대해서 알아보겠습니다. ■ InnoDB Storage Engine 소개 - DML 작업은 ACID 모델을 따르며 커밋, 롤백 및 응급 복구 기능을 갖춘 트랜잭션으로 사용자 데이터를 보호합니다. - Row-level 잠금 및 Oracle 스타일의 일관된 읽기는 다중 접속 및 사용자에게 동시성 및 성능을 향상시킵니다. - InnoDB 테이블은 기본 키를 기반으..
https://lalitvc.wordpress.com/2016/11/03/mysql-architecture-and-components/ 이 블로그 게시물은 새로운 MySQL 5.7 물리적, 논리적 아키텍처 및 구성 요소에 대한 것입니다.이 블로그 게시물에서는 다이어그램을 사용하여 MySQL의 데이터 처리 및 SQL 실행을 포함한 흐름에 대해 설명하려고합니다. 다른 데이터베이스와 달리 MySQL은 매우 유연하며 다양한 종류의 스토리지 엔진을 다양한 종류의 요구에 대한 플러그인으로 제공합니다. 이 때문에 스토리지 엔진의 사용에 따라 MySQL 아키텍처 및 동작도 변경됩니다 (예 : 트랜잭션 [InnoDB] 및 비 트랜잭션 [MyISAM] 엔진) 데이터 스토리지 및 SQL 실행 방법이 다르며 서버 내에서 엔진..