문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 다음 판 양쪽 다음 판 | ||
database:mysql:performance [2019/03/31 13:54] kwon37xi [Lock] |
database:mysql:performance [2019/03/31 14:17] kwon37xi |
||
---|---|---|---|
줄 3: | 줄 3: | ||
===== 항상 확인 할 것 ===== | ===== 항상 확인 할 것 ===== | ||
* 항상 운영체제의 **ulimit**값을 확인해야 한다. CentOS에서는 ''/ | * 항상 운영체제의 **ulimit**값을 확인해야 한다. CentOS에서는 ''/ | ||
+ | |||
+ | ===== Primary Key index 정렬 순서 ===== | ||
+ | * MySQL의 기본 PK 정렬 순서는 **ASC**이다. 5.7 이하에서는 고정이며 8.0부터 '' | ||
+ | * 따라서 PK 기준 정렬은 항상 ASC 으로 하는 것이 가장 최적의 성능을 낸다. | ||
+ | * MySQL 8.0 이후부터는 명시적으로 '' | ||
+ | * [[https:// | ||
===== Lock ===== | ===== Lock ===== | ||
줄 8: | 줄 14: | ||
* MySQL은 기본적으로 Read 에 Lock을 걸지 않는다. MVCC로 ISOLATION Level에 따라 값을 가져온다. | * MySQL은 기본적으로 Read 에 Lock을 걸지 않는다. MVCC로 ISOLATION Level에 따라 값을 가져온다. | ||
* [[database: | * [[database: | ||
+ | |||
+ | ===== Covering Index (커버링 인덱스) ===== | ||
+ | * select 대상 필드, order by, group by 등에 속하는 필드들을 모두 인덱스에서 값을 얻어올 수 있는 인덱스. 매우 속도가 빠르다. | ||
+ | * PK 가 아닌 모든 인덱스는 그 끝단 데이터로 PK도 함께 가지고 있다. 따라서 PK는 인덱스에서 읽을 수 있다. | ||
+ | * 실행 계획을 봤을 때 **Extra: Using index**가 있다면 커버링 인덱스로 모두 해결된 것. | ||
+ | * 커버링 인덱스를 만들 때는 다음 순서로 한다. | ||
+ | * WHERE 조건에 있는 컬럼 최우선 | ||
+ | * ORDER BY / GROPU BY 컬럼 그 다음 | ||
+ | * SELECT 에 있는 컬럼을 마지막 | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | * 커버링 인덱스도 데이터이므로 마구 만들면 안 된다. 데이터량이 폭증하게 된다. | ||
+ | * **SELECT/ | ||
+ | |||
===== 모니터링 툴 ===== | ===== 모니터링 툴 ===== | ||
* [[http:// | * [[http:// |