MySQL의 기본 설정 파일
- 총 5개의 기본설정 파일(windows환경에서는 확장명이 ini임)
my-small.cnf : 64MB이하의 메모리를 시스템 설정
my-medium.cnf : 128MB 시스템 설정
my-large.cnf : 512MB이하 시스템
my-huge.cnf : 1-2GB 시스템
my-innodb-heave-4G.cnf : 4GB이상 메모리상에서 InnoDB를 사용하는 경우(주로사용)
- 저장 위치
Linux/Unix : /etc/(1순위), 설치경로(2순위), 데이터디렉토리(3순위) 뒤쪽의 것이 오버라이트함
Windows : Windows디렉토리(1순위), 설치경로(2순위), 데이터디렉토리(3순위) 뒤쪽의 것이 오버라이트함
MySQL의 파라메터 조정
- 옵션중 일부는 동작중 변경 가능
SESSION : 조정된 값이 현재 커넥션에서만 영향을 미침
GLOBAL : 조정된 값이 전체 서버에 영향을 미침
BOTH : 값을 변화시킬때 SESSION/GLOBAL을 반드시 명기해야함
- 동작중 변경값은 기동이 종료되면 소실됨
- 모든 옵션의 현재값은 아래 커맨드로 확인가능
MySQLD 옵션의 변경
- 변경된 옵션은 전체 서버에 적용됨
- 대부분의 옵션은 동작중에 아래와 같이 변경 가능(대부분 super권한을 가져야함)
- 세션별로 변경가능한 옵션은 아래와 같이 적용 가능
주요 GLOBAL옵션
- table_cache(기본 64)
사용하는 테이블에 대한 핸들러를 캐시에 저장,
동시테이블 사용량이 높으면 높임
- thread_cache(기본 0)
재사용을 위해서 보관해야할 쓰레드수,
클라이언트가 커넥션풀을 사용할 경우 의미없음
- max_connections(기본100)
허용가능한 최대 접속수
함부로 늘려서는 안됨(각 커넥션의 사용할 메모리 양의 총합이 동접 증가수만큼 늘어날 수 있으므로)
커넥션 관련 옵션
- Connect_timeout
connection접속후 요청 후 대기 시간
- net_buffer_length
MySQL이 전송하는 초기 메시지의 크기, 기본값 사용 권장
- max_allowed_packed
서버/클라이언트간 최대 전송 가능 패킷 크기(디폴트 2M)
TEXT나 BLOG컬럼이 있는 것우 또는 리플리케이션을 사용하는 경우에는 최소 16M권장
- back_log
커넥션이 대량으로 몰리는 경우 대기 가능한 커넥션의 수, 기본값 사용 권장
커넥션 관리
- max_connections : 최대 접속수
- inactive_timeout : 유저와 상호작용을 하는 커넥션 타임아웃, 클라이언트 툴 등에서 접속중 유효시간
- wait_timeout : 일반적인 서버,클라이언트 환경에서 타입아웃시간.(close를 안하는 경우 문제가 될수 있으므로 적절하게 조절해야함)
- net_read_timeout/net_write_timeout : 클라이언트의 네트워크를 통한 읽기/쓰기 타임아웃, 기본값 사용 권장
- net_retry_count/max_connect_error : 통신이 잘못되었을때 몇번만에 블럭되는지 지정, 블럭이 되면 FLUSH HOST명령전에는 접근불가. 최대한 높은 값으로 설정해놓음
Table Cache 최적화
- table_cache값을 올리면 OS상의 file descriptor의 수를 증가해줘야함
테이블 스캔 성능의 향상
- 결과 값을 찾기 위해 모든 row를 탐색해야하는 경우에 사용되므로 성능에 큰 영향을 미침
- 테이블 스캔 디스크 엑세스 감소를 위해 read_buffer를 사용
- read_buffer_size는 기본 128Kb이고 높일 수록 테이블 스캔 성능이 올라감
- 테이블 스캔하는 모든 쓰레드에 적용되므로 너무 높이게 되면 메모리 자원에 문제가 발생할 수 있음
- 풀 테이블 스캔을 사용하는 쿼리 앞단에서 올리고 종료히 내려주는 방법도 사용가능
조인 성능의 향상
- 조인되는 컬럼의 인덱스가 존재하지 않는 경우 조인버퍼를 사용
- 인덱스를 추가하는 것이 바람직하나 임시적으로 join_buffer_size를 높여주는 것도 가능함
- 두 테이블간 조인일 경우 하나의 join_buffer가 추가되지면 테이블이 추가될 수록 버퍼수도 늘어남
정렬 성능의 향상
- 대량의 정보를 OrderBy하거나 GroupBy를 처리하게되는 경우 디스크 자원 사용
- 이러한 작업을 메모리내에서 처리하기 위해 sort_buffer_size를 조절
- 적절하게 사용하여 디스크를 사용하지 않고 메모리버퍼를 쓰게되면 25%정도의 성능향상 가능
- sort_buffer에 데이터를 정렬한 후 실제 결과값을 처리하는 것은 read_rnd_buffer_size의 영향을 받음
- 세션별로 설정해서 임시적으로 사용하는 것을 권장
Query Cache
- SELECT 쿼리와 그 결과를 저장
- 목적 : 빈번하게 사용되는 SELECT쿼리의 성능 향상
- 테이블에 변화(INSERT,UPDATE,DELETE)가 일어나게 되면 해당테이블과 관련된 쿼리 캐시내의 쿼리는 초기화
- Query_cache_size 환경 변수를 통해서 조절(기본은 비활성화)
- SHOW STATUS LIKE 'Qcache_%' 커맨드로 쿼리 캐시 관련 항목 모니터링
- RESET QUERY CACHE 커맨드를 통해 수동으로 캐시 삭제 가능
Query Cache 최적화
- Query_cache_limit 를 통해서 저장할 쿼리의 사이즈를 제한할 수 있음
- Query_cache_min_res_unit(blocksize)를 설정하여 쿼리 캐시의 조각화를 줄일 수 있음, 기본4Kb
- 남는 블록이 있음에도 불구하고 캐시 된 쿼리가 제거된다면 Qcache_free_blocks, Qcache_lowmen_prune을 참고
- Query_cache_hits와 Com_select를 비교하여 캐시 적중률을 파악할 수 있음
댓글 없음:
댓글 쓰기