본문 바로가기
DATABASE/MySQL

[MySQL] 관계형 데이터 모델링 3 (물리적 모델링) - 역정규화, 분석, 성능 개선 하는 법

by sjs_2215 2019. 8. 28.

수련: https://github.com/egoingsb/offline/wiki/database---mysql

 

egoingsb/offline

Contribute to egoingsb/offline development by creating an account on GitHub.

github.com

강의: https://opentutorials.org/module/4134/25352

 

물리적 데이터 모델링 - 관계형 데이터 모델링

강의소개 논리적 데이터 모델링이 관계형 데이터베이스 패러다임에 잘 맞는 이상적인 표를 만드는 것이었다면, 물리적 데이터 모델링은 선택한 데이터베이스 제품에 만는 현실적인 고려는 하는 방법론입니다. 이 단계에서 가장 중요한 것은 성능입니다. 특히 역정규화(반정규화, denormalization)의 사례를 집중적으로 다룹니다.  강의 1 강의2 강의3 강의4 강의5 강의6

opentutorials.org


 

물리적 모델링

: 이상적인 표를 구체적인 제품에 맞는 현실적인 표로 만드는 것

: 가장 중요한 것은 성능

 

 

데이터베이스 샘플을 분석해보자


 

대용량 데이터베이스 샘플

 

 

  1. erd로 보기

mysql workbench에서 데이터베이스를 erd로 보는 방법 https://dololak.tistory.com/457

독립적인 것부터 보자.

employees와 department는 아무한테도 종속되어 있지 않음.

dept_manger와 dept_emp는 매핑 테이블

 

  1. 만들어진 결과물의 "쓰기 파트"에 해당되는 것을 뽑아보면 됨

 


 

데이터베이스의 성능을 파악해보자

 

하나의 방법 - 느려질때까지 쓰는 방법

말고,,

고도화된 여러 방법을 살펴보자

 

이렇게 성능을 분석하고 개선하는 것을 => 프로파일링 한다 라고 함.

 

  1. slow query 설정 하는 법

https://zetawiki.com/wiki/MySQL_%EC%8A%AC%EB%A1%9C%EC%9A%B0_%EC%BF%BC%EB%A6%AC_%EB%A1%9C%EA%B7%B8_%EC%84%A4%EC%A0%95

 

MySQL 슬로우 쿼리 로그 설정 - 제타위키

MySQL long query, slow query log MySQL 슬로우 쿼리 로그 설정 MySQL 느린 쿼리 로그 설정 MySQL 오래 걸리는 쿼리, 롱 쿼리 로그 The slow query log is NOT enabled. MySQL 접속하여 현재 설정 확인 mysql> SHOW VARIABLES LIKE 'slow_query_%'; +---------------------+---------------------------------+ | Var

zetawiki.com

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 5
log_slow_rate_limit = 1
log_slow_verbosity = query_plan
log_slow_admin_statements

 

query 시간이 5초가 넘어가면 자동으로 로그에 찍힘.

 

 

 

mysql의 장점 -> 쿼리 진행 시간을 볼 수 있음

 

 

ex) use employees;
select * from employees where first_name="Jiang" and last_name="Lueh";

이 쿼리문의 시간을 줄이고 싶다.

 

인덱스를 추가

 

(시간이 많이 걸리기에 밤에 시작.)

 

인덱스를 추가할 때 (first_name, last_name)을 추가한다고 할 때 이를 선택하는 순서가 중요.

 

ex. firstname을 먼저 걸고 lastname을 인덱스를 건 상황이라면,

firstname과 lastname을 쓰며 - 인덱스 사용 o

firstname 쓰면 - 인덱스 사용 o. 조금이긴 하지만 씀

lastname 쓰면 - 인덱스 아예 안 쓰는 것과 같음

 

인덱스 추가하고 쿼링하면 시간이 많이 줆을 알 수 있음.

 

인덱스 특징:

insert할 때는 느려지나, read는 훨씬 빨라지므로 이런 성격에 잘 맞는 특정 칼럼에 index를 추가하는 것이다. 데이터베이스의 스트럭쳐를 바꾸지 않아도 되는 것이 큰 장점이다.

 

인덱스 추가 방법 : https://ra2kstar.tistory.com/96

 

MySQL : 인덱스 (Index) 사용 방법 및 설명

MySQL MySQL 인덱스(INDEX) 사용 방법 인덱스는 특정 칼럼 값을 가지고 있는 열을 빠르게 찾기 위해서 사용된다. MySQL은 첫 번째 열부터 전체 테이블에 걸쳐서 연관된 열을 검색하기 때문에 테이블이 크면 클 수..

ra2kstar.tistory.com


 

general.log

에 너무 지저분하면

쓰기 부분에 제목에 'ㅁㄴㅇ러미날' 본문 내용에 '수진이짱' 이렇게 해놓고 저 특정 내용을 로그에서 검색해보면 insert를 어떤 테이블에 하고 또 구조를 조금 더 쉽게 알 수 있음.

 

mysql log 종류: https://iamjoso.tistory.com/24


Comments