■ 백그라운드 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 LocksInnoDB는 공유 (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 실행 방법이 다르며 서버 내에서 엔진..
1. 문제점Centos 7 + apache 2.4.x + php 7.x + mysql 5.7.x 설치 도중 mysql 설치과정에서 아래와 같은 에러메시지를 발견하였습니다.-- Running cmake version 2.8.11-- Could NOT find Git (missing: GIT_EXECUTABLE)-- Configuring with MAX_INDEXES = 64U-- SIZEOF_VOIDP 8-- MySQL 5.7.11-- Packaging as: mysql-5.7.11-Linux-x86_64-- Looked for boost/version.hpp in and-- BOOST_INCLUDE_DIR BOOST_INCLUDE_DIR-NOTFOUND-- LOCAL_BOOST_DIR-- LOCAL_..
■ mysqlimport 프로그램 소개커맨드 라인 인터페이스로 되어 있는 프로그램으로 LOAD Data SQL과 같은 방법으로 데이터를 테이블에 로드합니다. mysql 프로그램에서 사용되는 LOAD DATA문법이며 이 구문을 알고 있다면 좀더 손쉽게 사용할 수 있습니다. 이 LOAD DATA문은 이 블로그에서 별로 페이지로 제공하고 있습니다.참고 URL : https://myinfrabox.tistory.com/18?category=804726 mysqlimport프로그램을 사용하면서 자주 사용하는 옵션이 있다면 my.cnf안에 [client], [mysqlimport]란 그룹 옵션을 만들고 지원되는 옵션을 이 항목에 추가해서 사용할 수 있습니다. 이렇게 하면 터미널에서 실행할 때 추가 옵션을 굳이 기재..
■ GTID를 이용한 복제 설정. 여기에서는 처음으로 GTID를 이용하여 처음 설정하는 "콜드 스타트"방법입니다. 이 포스트를 통해서 복제를 어떻게 설정하고, 주의할점은 무엇인지 알아봅니다. ■ 서버준비 가능하면 같은 사양의 물리서버를 준비합니다. 그리고 같은 버전의 MySQL을 설치합니다. 여기에서는 5.7 위주로 설명을 합니다. 다음의 환경으로 설정되어 있다고 가정합니다. 서버 IP MySQL Version 마스터 192.168.0.101 5.7 슬레이브 192.168.0.102 5.7 ■ 파라미터 설정 마스터 슬레이브 서버 모두에 다음의 파라미터를 설정합니다. ▶ 서버별 설정할 파라미터 mysqld 섹션에 작성합니다. [mysqld] server-id=1 log-bin=binlog gtid-mode..
이 섹션에서는 GTID (Global Transaction Identifier)를 사용한 트랜잭션 기반 복제에 대해 설명합니다. GTID를 사용할 때 각 트랜잭션은 원래 서버에서 커밋되고 슬레이브에 의해 적용될때 식별되고 추적될 수 있습니다. 이는 새 슬레이브를 시작하거나 새 마스터로 Failover가 되었을때 GTID를 사용하여 해당 파일 내에서 로그 파일 또는 위치를 참조 하기 때문에 기존방법인 로그파일과 포지션을 찾아야 하는 작업을 크게 단순화합니다. GTID 기반 복제는 완전히 트랜잭션 기반이기 때문에 마스터와 슬레이브가 일치하는지 간단하게 판단 할 수 있습니다. 마스터에서 커밋된 모든 트랜잭션이 슬레이브에서도 커밋되는 경우 이 둘 사이의 일관성이 보장됩니다. GTID와 함께 Statement 기..