사용자 도구

사이트 도구


database:mysql:performance

MySQL 성능

항상 확인 할 것

  • 항상 운영체제의 ulimit값을 확인해야 한다. CentOS에서는 /etc/security/limits.conf에서 nproc 값 조정.

Primary Key index 정렬 순서

  • MySQL의 기본 PK 정렬 순서는 ASC이다. 5.7 이하에서는 고정이며 8.0부터 DESC지정이 가능해진다.
  • 따라서 PK 기준 정렬은 항상 ASC 으로 하는 것이 가장 최적의 성능을 낸다.
  • MySQL 8.0 이후부터는 명시적으로 CREATE TABLE에서 정할 수 있으므로 그에 따른다.

Lock

Covering Index (커버링 인덱스)

  • select 대상 필드, order by, group by 등에 속하는 필드들을 모두 인덱스에서 값을 얻어올 수 있는 인덱스. 매우 속도가 빠르다.
  • PK 가 아닌 모든 인덱스는 그 끝단 데이터로 PK도 함께 가지고 있다. 따라서 PK는 인덱스에서 읽을 수 있다.
  • 실행 계획을 봤을 때 Extra: Using index가 있다면 커버링 인덱스로 모두 해결된 것.
  • 커버링 인덱스를 만들 때는 다음 순서로 한다.
    • WHERE 조건에 있는 컬럼 최우선
    • ORDER BY / GROPU BY 컬럼 그 다음
    • SELECT 에 있는 컬럼을 마지막
  • 커버링 인덱스도 데이터이므로 마구 만들면 안 된다. 데이터량이 폭증하게 된다.
  • SELECT/WHERE/ORDER BY/GROUP BY에 커버링 인덱스에 속하는 컬럼과 PK 외에 다른 것이 들어오면 인덱스 사용을 중단할 수도 있다. → 성능저하.

모니터링 툴

slow query

slow_query_log = 1 # slow query 로그를 남겨라
slow_query_log_file = /var/log/mysql/mysql-slow-queries.log # 로그 파일
long_query_time = 0 # 지정된 초보다 오래 실행될 경우 남겨라. 초 단위. 최소값 0

slow_query_log_file로 지정된 디렉토리와 파일은 mysqld 프로세스가 접근 가능하도록 권한 설정되어 있어야 한다.

mysqlslap

# 특정 데이터베이스에 대해서 명령 수행. --create-schema라는 이름과는 달리 스키마를 수정하거나 하지 않음.
mysqlslap --create-schema=[databasename] --user=myuser -p [options...]
 
# 특정 파일에 있는 쿼리 실행. 구분자는 ;. 동시 50 쓰레드 200회 반복.
mysqlslap [접속정보들..] --delimiter=";" --query=쿼리모음파일 --concurrency=50 --iterations=200

MySQL Tuner Perl

참조 문서

database/mysql/performance.txt · 마지막으로 수정됨: 2020/08/26 16:05 저자 kwon37xi