11강 인덱스를 올바르게 운용하기
분산을 고려한 MySQL 운용
- OS 캐시 활용
- 인덱스(index, 색인) 활용 - 적절하게 설정하면 데이터 검색을 빠르게 가능
- 확장을 전제로 한 설계
OS 캐시활용
- 전체 데이터 크기에 주의 = > 데이터량 < 물리 메모리 유지
- 메모리가 부족하면 메모리 증설
- 스키마 설계가 데이터 크기에 미치는 영향 고려
- 스키마: DB내에 어떤 구조로 데이터가 저장되는가를 나타내는 데이터베이스 구조와 제약조건에 관해 전반적인 명세를 기술한 것
인덱스의 중요성
*인덱스는 주로 탐색을 빠르게 하기 위한 것
MySQL 의 인덱스는 B Plus Tree 라는 데이터 구조
B Plus Tree ?
데이터 삽입이나 삭제를 반복하는 경우에도 트리의 형태에 치우침이 생기지않는 평형트리
트리를 구성하는 각 노드가 N 개 이상의 자식을 가질 수 없는 다분트리(n‐ary tree)
- 각 노드가 여러개의 자식을 가질 수 있지만 N 개로 제한되는 트리
→ Seek 횟수를 최소화하는 트리구조
인덱스의 효과
4000만 개의 데이터가 있는 경우
인덱스가 없으면 -> 4000만 번 탐색
인덱스가 있으면 -> (B 트리경우) log 4000만 = 25.25번 만 탐색
→ Seek 횟수 개선
인덱스가 작용하는지 확인하는 법
explain 명령 사용
첫 번째는 entryid(eid) 를 쿼리로 던진 경우 - > 1 행 만 조사
두 번째는 use index로 탐색 조건으로 하고자하는 eid 와는 굳이 다른 칼럼의 인덱스를 일부러 사용 -> 962 만 이상의 행 조사
→ explain 명령으로 자신이 던지려는 쿼리에 제대로 인덱스가 작용하는지 여부 확인 필요
→ explain 명령에서 속도 확인도 필요
12강 MySQL의 분산
- 확장을 전제로 한 시스템 설계-
MySQL의 레플리케이션 기능
MySQL의 레플리케이션을 이용하여 위의 그림과 같이 구성이 가능
갱신 / 쓰기 쿼리 : 마스터에서만 수행
select 등 참조 쿼리 : 슬레이브에서 수행
마스터/슬레이브 의 특징
마스터(갱신/쓰기 계열)는 확장을 하지 않는다.
- 웹 애플리케이션에서는 참조 계열 쿼리가 90% 이상 - 병목현상이 일어날 일이 드물다.
슬레이브(참고 계열)는 확장을 한다.
- 서버를 늘리면 확장가능 동시에 메모리에 맞추는 것 도 중요
13강 MySQL의 스케일아웃과 파티셔닝
MySQL의 스케일아웃 전략 요약
- 데이터가 메모리에 올라가는 크기?
- Yes : 메모리에 올린다.
- No : 메모리 증설 / 증설이 불가능하면 파티셔닝
파티셔닝 (테이블 분할)에 관한 보충
- 하나의 테이블 분할 : 특정 알고리즘으로 분할 ( ex> 해쉬태그 단위, 문자열 범위 [a-d, e-h, ..])
국소성을 고려힌 분산을 통해서 캐시가 유효함(효율이 높아진다) -> 데이터 접근 속도 향상 -> 파티셔닝의 효과가 향상
캐시의 효율이 높아지는 이유
- 국소성(Locality)을 활용한 파티셔닝으로 인해 관련된 데이터가 같은 위치에 저장
- 프로그램이 필요한 데이터에 접근할 때 캐시에 해당 데이터가 이미 저장되어 있을 확률이 높아짐
- 캐시 히트(cache hit) 비율이 증가하면 데이터를 빠르게 가져올 수 있어 전체 시스템 성능이 향상
파티셔닝을 전제로 한 설계
*JOIN 쿼리는 대상이 되는 테이블을 앞으로도 서버 분할하지 않을 것이라고 보장할 수 있을때에만 사용
파시셔닝의 장점 과 단점
장점
- 부하가 내려간다.
- 국소성이 증가해서 캐시 효과가 높아진다.
단점
- 운용이 복잡해진다. - 어디서 고장이 났는지 찾는 것이 어렵다.
- 서버대수가 증가하는 만큼 고장확률이 높아진다.
- 서버대수를 증가하는데 경제적인 비용이 든다.(메모리가 저렴해서 메모리를 증가하는 편이 더 유용할 수도 있다.)
다중화에 필요한 서버 대수는 ?
마스터 1 대 + 슬레이브 3대 = 총 4대
(이유) 마스터 1 대 + 슬레이브 2대 인 경우 슬레이브 1대가 고장난경우 대체서버에 복사를 하기위해 운영중인 서비스를 중단해야 한다.
'책 > 웹 개발자를 위한 대규모 서비스를 지탱하는 기술' 카테고리의 다른 글
[대규모 서비스] [책] 7 장 알고리즘 실용화: 19강 알고리즘과 평가 (0) | 2024.10.08 |
---|---|
5 장 대규모 데이터 처리 실전 입문 (0) | 2024.09.22 |
3 장 OS 캐쉬와 분산 (0) | 2024.08.31 |
2 장 대규모 데이터 처리 입문 (0) | 2024.08.28 |
1 장 대규모 웹 서비스 와 소규모 서비스 (0) | 2024.08.26 |