26
데이터베이스 개론 기초튜닝 NHN NEXT 정호영 나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.

암달의 법칙과 쿼리튜닝 기초

Embed Size (px)

Citation preview

Page 1: 암달의 법칙과 쿼리튜닝 기초

데이터베이스 개론

기초튜닝

NHN NEXT 정호영

나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.

Page 2: 암달의 법칙과 쿼리튜닝 기초

튜닝이란?

쿼리의 성능을 높이기 위한 방법

다양한 방법이 존재

암달의 저주 때문에 한계가 존재함

Page 3: 암달의 법칙과 쿼리튜닝 기초

암달의저주(법칙)

시스템에서

차지하는 비율이 P인 구성요소의

성능을 S만큼 개선했을 때의 전체 성능 비율을 나타내는 공식

Page 4: 암달의 법칙과 쿼리튜닝 기초

병렬 프로그래밍분야에서저주라고부르는이유

19.8배의한계에부딪힌다!

꼭 그런 건아닙니다.

Page 5: 암달의 법칙과 쿼리튜닝 기초

암달의법칙이 주는교훈

성능을높이려면 시스템에서큰 비중을 차지하는쪽을높여라!

Ex)

5% 를 차지하는 A를 500% 성능개선

50%를 차지하는 B를 120% 성능개선?

Page 6: 암달의 법칙과 쿼리튜닝 기초

암달의법칙이 주는교훈

성능을높이려면 시스템에서큰 비중을 차지하는쪽을높여라!

Ex)

1 / ((1-0.05) + 0.05/5) = 1.04 -> 4%개선

1/ ((1-0.7) + 0.7 / 1.2 ) = 1.13 -> 13%개선

Page 7: 암달의 법칙과 쿼리튜닝 기초

암달의법칙이 주는교훈

인생에서도

무엇인가를개선하려면

조금 개선하더라도비율이 큰 쪽을개선하라.

Page 8: 암달의 법칙과 쿼리튜닝 기초

데이터베이스쿼리의성능을높이는 방법

1. 더 비싼 하드웨어로 교체

2. 시스템 튜닝

3. 데이터 모델링을 통한 성능 개선

4. 쿼리 튜닝

하드웨어 + OS + 시스템 분야의 해박한 지식과 경험

Page 9: 암달의 법칙과 쿼리튜닝 기초

현업에서튜닝이 절박한경우는

1. 성능이 좋은 걸 더 좋게 한다.

2. 알 수 없는 이유로 성능이 나빠졌을 때, 다시 원상복구

어디일까요?

Page 10: 암달의 법칙과 쿼리튜닝 기초

원인을알아야 합니다.

1. 전문가를 초청한다 : 가장 좋지만 돈이 듭니다.

2. 정적분석 : 안 돌려 보고 원인을 예측하는 방법 DB는 쿼리플랜을 보는 좋은 툴이 있습니다.

3. 프로파일링 : 실제 실행 후, 실행결과를 분석하는 방법

Page 11: 암달의 법칙과 쿼리튜닝 기초

MySQL에서 쿼리 플랜을 보려면

EXPLAIN명령을 사용합니다.

SELECT 문장에만사용할수 있습니다.

‘\G’ 를 사용하면 더 보기 좋게 나옵니다.

참고링크:

http://dev.mysql.com/doc/refman/5.5/en/explain-output.html

mysql> EXPLAIN SELECT … \G

Page 12: 암달의 법칙과 쿼리튜닝 기초

결과는 하나 이상의 레코드 입니다.

한 행이 하나의 동작이고

대체로 위에서 아래로 실행됩니다.

Page 13: 암달의 법칙과 쿼리튜닝 기초

ID는 SELECT당 하나씩 부여됩니다.

mysql> EXPLAIN SELECT * FROM USER;

mysql> EXPLAINSELECT * FROM USER JOIN TRADE ON USER.ID = TRADE.SELLER;

Page 14: 암달의 법칙과 쿼리튜닝 기초

mysql> EXPLAINSELECT * FROM

(SELECT COUNT(*) FROM USER UNIONSELECT COUNT(*) FROM TRADE ) AS T;

Page 15: 암달의 법칙과 쿼리튜닝 기초

SELECT_TYPE

SIMPLE, PRIMARY : 가장 바깥 쿼리

SUBQUERY : 일반 서브쿼리

mysql> EXPLAINSELECT * FROM USER

WHERE ID IN(SELECT SELLER FROM TRADE

GROUP BY SELLERHAVING COUNT(*) > 3);

Page 16: 암달의 법칙과 쿼리튜닝 기초

SELECT_TYPE

DERIVED : FROM절의 서브 쿼리

*가능하면 없애자

m> EXPLAINSELECT * FROM ( SELECT * FROM user u) as u2;

Page 17: 암달의 법칙과 쿼리튜닝 기초

SELECT_TYPE

DEPENDANT SUBQUERY : 바깥 테이블과 연관된 서브쿼리

*가능하면 없애자

m> EXPLAIN SELECT * FROM user uWHERE money > ANY (

SELECT price FROM trade t WHERE u.id = t.seller );

Page 18: 암달의 법칙과 쿼리튜닝 기초

TABLE

테이블의 이름 또는 종류

<XX2>와 같은 테이블의 숫자는 쿼리 플랜의 ID를 가리킴

Page 19: 암달의 법칙과 쿼리튜닝 기초

TYPE

실제 데이터를 읽는 방법

SYSTEM, CONST, REF, RANGE, INDEX, ALL 등이 있음

SYSTEM이 가장 빠르고 ALL 이 가장 느림

INDEX는 INDEX FULL SCAN, 빠르지않음

Page 20: 암달의 법칙과 쿼리튜닝 기초

mysql> EXPLAIN SELECT * FROM USER WHERE LAST_VISIT > '2014-06-10';

mysql> CREATE INDEX TEST_IDX ON USER(LAST_VISIT);

mysql> EXPLAIN SELECT * FROM USER WHERE LAST_VISIT > '2014-06-1';

Page 21: 암달의 법칙과 쿼리튜닝 기초

POSSIBLE KEYS

쓸모없는 컬럼, 가볍게 무시하자!

KEY

실제 데이터를 읽기 위해 사용되는 인덱스의 이름

필요에 의해 생성한 인덱스가 잘 사용되는지 확인!

Page 22: 암달의 법칙과 쿼리튜닝 기초

mysql> DROP INDEX TEST_IDX ON USER;mysql> CREATE INDEX POPI ON USER(LAST_VISIT,MONEY);

mysql> EXPLAIN SELECT * FROM USER WHERE LAST_VISIT > '2014-06-01';

mysqL> EXPLAIN SELECT * FROM USER WHERE LAST_VISIT = '2014-06-01' AND MONEY > 1000;

mysql> EXPLAIN SELECT * FROM USER WHERE MONEY < 5000;

Page 23: 암달의 법칙과 쿼리튜닝 기초

KEY_LEN

인덱스 중 사용할 수 있는 크기를 나타냅니다.

복합 인덱스에서 매우 중요합니다.

ROWS

예상 레코드 개수, 이를 위해 통계정보를 저장합니다.

Page 24: 암달의 법칙과 쿼리튜닝 기초

EXTRA

이름과는 달리 매우 중요한 정보들이 저장되지만, 패스.

Page 25: 암달의 법칙과 쿼리튜닝 기초

요약

1. 쿼리가 원하는 성능이 안 나올 경우 튜닝 실시

2. explain 명령으로 원인분석

3. dependant subquery, derived 와 같은 타입이 안 나오게

4. 되도록 all 이 나오지 않도록

Page 26: 암달의 법칙과 쿼리튜닝 기초

THANK YOU!!!