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

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

Jul 13, 2015

Download

Engineering

Hoyoung Jung
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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!!!