문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 마지막 판 양쪽 다음 판 | ||
database:mysql:performance [2013/03/20 11:35] kwon37xi [모니터링 툴] |
database:mysql:performance [2020/08/26 16:05] kwon37xi |
||
---|---|---|---|
줄 3: | 줄 3: | ||
===== 항상 확인 할 것 ===== | ===== 항상 확인 할 것 ===== | ||
* 항상 운영체제의 **ulimit**값을 확인해야 한다. CentOS에서는 ''/ | * 항상 운영체제의 **ulimit**값을 확인해야 한다. CentOS에서는 ''/ | ||
+ | |||
+ | ===== Primary Key index 정렬 순서 ===== | ||
+ | * MySQL의 기본 PK 정렬 순서는 **ASC**이다. 5.7 이하에서는 고정이며 8.0부터 '' | ||
+ | * 따라서 PK 기준 정렬은 항상 ASC 으로 하는 것이 가장 최적의 성능을 낸다. | ||
+ | * MySQL 8.0 이후부터는 명시적으로 '' | ||
+ | * [[https:// | ||
+ | |||
+ | ===== Lock ===== | ||
+ | * [[http:// | ||
+ | * MySQL은 기본적으로 Read 에 Lock을 걸지 않는다. MVCC로 ISOLATION Level에 따라 값을 가져온다. | ||
+ | * [[database: | ||
+ | |||
+ | ===== Covering Index (커버링 인덱스) ===== | ||
+ | * select 대상 필드, order by, group by 등에 속하는 필드들을 모두 인덱스에서 값을 얻어올 수 있는 인덱스. 매우 속도가 빠르다. | ||
+ | * PK 가 아닌 모든 인덱스는 그 끝단 데이터로 PK도 함께 가지고 있다. 따라서 PK는 인덱스에서 읽을 수 있다. | ||
+ | * 실행 계획을 봤을 때 **Extra: Using index**가 있다면 커버링 인덱스로 모두 해결된 것. | ||
+ | * 커버링 인덱스를 만들 때는 다음 순서로 한다. | ||
+ | * WHERE 조건에 있는 컬럼 최우선 | ||
+ | * ORDER BY / GROPU BY 컬럼 그 다음 | ||
+ | * SELECT 에 있는 컬럼을 마지막 | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | * 커버링 인덱스도 데이터이므로 마구 만들면 안 된다. 데이터량이 폭증하게 된다. | ||
+ | * **SELECT/ | ||
===== 모니터링 툴 ===== | ===== 모니터링 툴 ===== | ||
줄 9: | 줄 33: | ||
* php.ini에 date.timezone = " | * php.ini에 date.timezone = " | ||
* [[http:// | * [[http:// | ||
+ | * [[http:// | ||
+ | ===== slow query ===== | ||
+ | < | ||
+ | slow_query_log = 1 # slow query 로그를 남겨라 | ||
+ | slow_query_log_file = / | ||
+ | long_query_time = 0 # 지정된 초보다 오래 실행될 경우 남겨라. 초 단위. 최소값 0 | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | ===== mysqlslap ===== | ||
+ | * 쿼리를 동시에 여러번 실행하는 방식으로 러프한 성능 테스트 수행. | ||
+ | * http:// | ||
+ | |||
+ | <code sh> | ||
+ | # 특정 데이터베이스에 대해서 명령 수행. --create-schema라는 이름과는 달리 스키마를 수정하거나 하지 않음. | ||
+ | mysqlslap --create-schema=[databasename] --user=myuser -p [options...] | ||
+ | |||
+ | # 특정 파일에 있는 쿼리 실행. 구분자는 ;. 동시 50 쓰레드 200회 반복. | ||
+ | mysqlslap [접속정보들..] --delimiter=";" | ||
+ | </ | ||
+ | |||
+ | ===== MySQL Tuner Perl ===== | ||
+ | * https:// | ||
+ | * [[http:// | ||
===== 참조 문서 ===== | ===== 참조 문서 ===== | ||
줄 19: | 줄 68: | ||
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||
- | + | * [[http:// | |
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[http:// |