■ InnoDB에 대한 옵티마이저 통계 구성 이 섹션에서는 InnoDB 테이블에 대한 지속적 및 비 영구 옵티 마이저 통계를 구성하는 방법에 대해 설명합니다. + 지속적 옵티마이저 통계 매개 변수 구성 + 비 영구 옵티 마이저 통계 매개 변수 구성 + InnoDB 테이블에 대한 ANALYZE TABLE 복잡성 추정 지속적 옵티마이저 통계는 서버 재시작시에도 유지되므로 계획 안정성이 향상되고 보다 일관된 쿼리 성능이 보장됩니다. 영구 옵티마이저 통계는 다음과 같은 추가 이점으로 제어 및 유연성을 제공합니다. + innodb_stats_auto_recalc 구성 옵션을 사용하여 테이블이 크게 변경된 후 통계가 자동으로 업데이트되는지 여부를 제어 할 수 있습니다. + STATS_PERSISTENT, STATS..
■ 백그라운드 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 변수에 의해 정의 된 낮은 워..
■ Innodb Buffer Pool 크기 설정 서버가 실행되는 동안 InnoDB 버퍼 풀 크기를 오프라인(시작시) 또는 온라인으로 구성 할 수 있습니다. 이 곳에 설명 된 동작은 두 방법 모두에 적용됩니다. innodb_buffer_pool_size를 늘리거나 줄이면 작업이 청크로 수행됩니다. 청크 크기는 innodb_buffer_pool_chunk_size 구성 옵션에 의해 정의되며 기본값은 128M입니다. 버퍼 풀 크기는 항상 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances의 배수와 같아야합니다. innodb_buffer_pool_size를 innodb_buffer_pool_chunk_size * innodb_buffer_pool_inst..
■ Doublewrite Buffer 이중 쓰기 버퍼는 InnoDB 데이터 파일의 적절한 위치에 페이지를 쓰기 전에 InnoDB가 버퍼 풀에서 플러시 된 페이지를 쓰는 저장 영역입니다. 페이지 쓰기 도중에 운영 체제, 스토리지 서브 시스템 또는 mysqld 프로세스 충돌이있는 경우 InnoDB는 응급 복구 중에 이중 쓰기 버퍼에서 올바른 페이지 사본을 찾을 수 있습니다. 데이터가 두 번 기록되지만 이중 쓰기 버퍼에는 두배의 I/O 오버 헤드 또는 두배의 I/O 작업이 필요하지 않습니다. 운영 체제에 대한 단일 fsync() 호출로 innodb_flush_method가 O_DIRECT_NO_FSYNC로 설정된 경우를 제외하고는 큰 순차 청크로 이중 쓰기 버퍼에 데이터가 기록됩니다. 이중 쓰기 버퍼는 대부분..
■ grep 명령어 grep명령어는 정규식으로 표현한 특정 패턴을 찾아 검색 후 출력해주는 명령어이다. 여기서 정규식이란 어떤 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 언어이다. 주로 문자열을 검색할 때 사용된다. 이처럼 grep명령어는 정규식을 사용하여 특정 패턴(문자열)을 찾는 명령어이다. 정규식으로 표현한 기호에는 다음과 같은 것들이 있다. 기호 의미 . 종류에 상관없는 한 글자 * 길이에 상관없는 문자열 ^ 라인의 첫 시작 예)^d d로 시작하는 라인 $ 라인의 마지막 위치 예)c$ c로 끝나는 라인 [] 한 문자 길이의 패턴들 예)[ab] a,b중 한글자라도 반드시 있는 단어 [^ ] 입력된 문자들의 여집합 예)[^ab] a,b중 한글자라도 없는 단어 \ 정규식에 사용되는 문자를 ..
■ 시스템 테이블 스페이스 시스템 테이블 스페이스는 InnoDB 데이터 딕셔너리, 이중 쓰기 버퍼, 변경 버퍼 및 실행 취소 로그의 저장 영역입니다. 테이블이 파일당 또는 일반 테이블 스페이스가 아닌 시스템 테이블 스페이스에서 테이블을 작성하는 경우 테이블 및 인덱스 데이터도 포함 할 수 있습니다. 시스템 테이블 스페이스에는 하나 이상의 데이터 파일이 있을 수 있습니다. 기본적으로 ibdata1이라는 단일 시스템 테이블 스페이스 데이터 파일이 데이터 디렉토리에 작성됩니다. 시스템 테이블 스페이스 데이터 파일의 크기와 수는 innodb_data_file_path 시작 옵션으로 정의됩니다. 시스템 테이블 스페이스에 대한 추가 정보는 섹션의 다음 주제에서 제공됩니다. - 시스템 테이블 스페이스 크기 조정 - ..
■ Bufferpool 버퍼 풀은 InnoDB가 액세스 할 때 테이블 및 인덱스 데이터를 캐시하는 메인 메모리의 영역입니다. 버퍼 풀은 자주 사용하는 데이터를 메모리에서 직접 처리 할 수있게하여 처리 속도를 높입니다. 전용 서버에서 실제 메모리의 최대 80%정도가 버퍼 풀에 할당됩니다. 대량 읽기 조작의 효율성을 위해 버퍼 풀은 여러 행을 보유 할 수있는 페이지로 분할됩니다. 캐시 관리 효율성을 위해 버퍼 풀은 링크 된 페이지 목록으로 구현됩니다. 거의 사용되지 않는 데이터는 다양한 LRU 알고리즘을 사용하여 캐시에서 종료(혹은 만료:aged out)됩니다. 버퍼 풀을 활용하여 자주 액세스하는 데이터를 메모리에 유지하는 노하우(기술)는 MySQL 튜닝의 중요한 측면입니다. ▶ Buffer Pool LRU..
서버를 운영하다 보면 특정 디렉토리 아래의 파일이나 디렉토리들을 전부 대문자나 소문자로 바꾸고자 할 때가 있습니다.이때 쉘 스크립트로 아래 내용을 이용해 사용하시면 좋을듯 합니다. ▶ 문자열을 대문자에서 소문자로 바꾸는 함수fUpperToLower(){ sOrg=$1 sDest=`echo $sOrg | tr -s '[:upper:]' '[:lower:]'` echo $sDest} ▶ 문자열을 소문자에서 대문자로 바꾸는 함수fLowerToUpper(){ sOrg=$1 sDest=`echo $sOrg | tr -s '[:lower:]' '[:upper:]'` echo $sDest} ▶ 디렉토리의 하위 디렉토리들을 소문자에서 대문자로 바꾸는 함수fDirLowerToUpper(){ ..
■ 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 테이블은 기본 키를 기반으..