MySQL 성능최적화 (5)

6장 서버 설정 최적화

기본 설정 방법

MySQL 은 구성 정보를 명령줄 인수와 configuration file 설정에서 받는데 보통 /etc/my.cnf 또는 /etc/mysql/my.cnf 에 있다. 서버가 읽는 설정 파일의 위치를 확인하려면 다음과 같다

1
2
3
4
$ which mysqld 
/usr/sbin/mysqld
$ /usr/sbin/mysqld --verbose --help | grep -A 1 'Default options'
/etc/mysql/my.cnf ~/.my.cnf /usr/etc/my.cnf

문법과 변수의 범위 그리고 동적 재설정

설정은 모두 소문자로 적고 단어는 _ 나 - 로 구분한다. 둘 다 사용가능한 단어이지만 한 가지 형식만 골라 일관되게 사용할 것을 권장한다. 설정은 여러 범위를 가질 수 있다. 서버 전체에 적용되는 전역 범위 설정, 연결마다 설정이 다르게 가지는 세션 범위 설정 등이 있다. 많은 세션 범위 변수는 그와 동등한 전역 범위 변수를 갖는데 이를 기본값으로 간주할 수 있다.

설정 파일에 변수를 직접 선언할 수 있지만, 서버가 실행되는 동안에도 여러 가지를 변경할 수 있다. MySQL 에서는 이를 동적 설정 변수라 부른다.

1
2
3
4
5
SET sort_buffer_size = {value};
SET GLOBAL sort_buffer_size = {value};
SET @@sort_buffer_size := {value};
SET @@session.sort_buffer_size := {value};
SET @@global.sort_buffer_size := {value};

서버가 실행되는 동안 변수의 전역 값을 설정하면 현 세션 값과 기존의 다른 세션 값에는 영향을 미치지 않는다. 연결이 생성됐을 때 세션 값이 전역 값에서 초기화되기 때문이다. 따라서 설정을 변경할 때마다 SHOW GLOBAL VARIABLES 의 출력 값을 보고 원하는 결과가 나왔는지 확인해야 한다.

일반적인 튜닝

메모리 사용 튜닝하기

MySQL 의 메모리 소비는 조절할 수 있는 메모리와 조절 할 수 없는 메모리로 나뉜다.

메모리 튜닝은 다음 단계를 거친다.

  1. MySQL 이 사용 가능한 최대 메모리를 정한다.
  2. MySQL 이 정렬 버퍼나 임시 테이블 등의 개별적인 연결에 필요한 메모리 양을 정한다.
  3. 운영체제가 제대로 실행되는 데 필요한 메모리 양을 정한다. 같은 장비에서 실행되는 주기적 배치 작업 등 다른 프로그램이 실행되는 데 필요한 메모리를 포함시킨다.
  4. 나머지 메모리를 InnoDB 버퍼 풀과 같은 MySQL 캐시로 사용한다.

InnoDB 버퍼 풀

InnoDB 를 사용한다면 버퍼 풀에 메모리를 많이 할당해야 한다. InnoDB 버퍼 풀은 인덱스를 캐시할 뿐 아니라 레코드 데이터, 어댑티브 해시 인덱스, 인서트 버퍼, 잠금 및 그 밖의 내부 구조를 가지고 있다. 또한, InnoDB 는 여러 쓰기 작업을 통합하고 순차적으로 실행하기 위해 버퍼 풀을 사용해 쓰기를 지연시킨다.