2010년 7월 8일 목요일

[MySQL 모니터링 및 엔진 최적화]InnoDB 스토리지 엔진 최적화

InnoDB의 옵션의 개요

 

 

InnoDB의 메모리 관련 옵션

 - Innodb_buffer_pool_size

    가장 중요한 옵션

    데이블의 데이터와 인덱스를 캐싱하기 위해서 사용

    사이즈가 클수록 성능이 향상됨

    OS Cache보다 훨씬 효율적으로 메모리를 사용하며 Write성능에 큰 영향을 미침

    서버메모리 용량의 70~80%정도로 설정하는 것이 적당

    기본값은 8MB이며 반드시 재설정 필요

 - Innodb_additional_mem_pool

    DataDictionary(테이블 스키마 등)를 저장하기 위해서 사용. 필요한 경우 자동으로 증가

 

InnoDB의 로그 관련 옵션

 - Innodb_log_file_size

    InnoDB redo로그 파일 크기

    Write 성능에 매우 큰 영향을 미침

    설정 파일 크기에 따라 복구 시간이 증가될수 있어서 256M 사용권장

 - Innodb_log_files_in_group

    로그 그룹안에 포함될 로그 파일 수

    기본적으로 2이며 3을 권장함

 - Innodb_log_buffer_size

    매우 큰 BLOB를 사용하지 않는한 2-8M의 기본값 사용

 

InnoDB log flush 주기 조절

 - Innodb_flush_log_at_trx_commit(기본값은1)

    0으로 설정하면 1초에 한번씩 디스크에 기록하고 씽크 - MySQL,시스템다운시 1시간 데이터 누락가능성 있음

    1로 설정하면 commit시 디스크에 기록하고 씽크 - 어떤 다운시에도 데이터 유지

    2로 설정하면 commit를 할때마다 디스크에 기록하고 싱크는 1초에 한번만함 - 시스템 다운시 1초간 데이터 누락

 

InnoDB의 로그 사이즈 재조정

 - 일반적인 옵션처럼 수치만 변경해서 조절할 수 없음

    MySQL종료

    Data 디렉터리 안의 ib_log* 파일 삭제

    설정의 innodgb_log_file_size 수정

    MySQL 재시작

 

InnoDB의 flush 방법 설정

 - InnoDB가 OS의 FileSystem과 연동하는 방식 설정

 - 윈도우에서는 unbufferedIO가 늘 사용됨

 - UNIX에서는 fsync(), O_SYNC/O_DSYNC를 파일 flush를 위해 사용가능

 - 리눅스에서는 O_DIRECT를 사용하여 unbufferedIO를 사용할 수 있다 (double buffering을 막아줌)

 

InnoDB의 테이블 별 테이블 스페이스

 - Innodb_file_per_table 옵션이 설정 가능

 - 테이블 별로 테이블스페이스를 설정함

 - 테이블 별로 설정해도 공통 테이블스페이스는 필요함

 - 분리시 데이터를 여러개의 디스크로 분산 가능

 - 테이블을 drop하면 디스크의 공간이 반환됨

 - 테이블이 많을 경우 MySQL기동/종료시 속도가 빨라짐

 

그 밖의  InnoDB의 옵션들

 - Innodb_thread_concurrency : 기본값은 8, 동시 사용 쓰레드수로 변경하지 않음

 - FOREIGN_KEY_CHECKS/UNIQUE_CHECKS

    데이터를 입력시 Foreign키와 Unique를 검사하지 않음

    대용량 데이터 입력시 사용함(AUTOCOMMIT을 0으로 하는것도 추천)

 - innodb_fast_shutdown

    종료시 내무 메모리 구조 정리 작업과 버퍼 정리 작업을 건너뜀. 무결성에는 영향없음

  

 

ㅇㄹㅇ

댓글 없음:

댓글 쓰기