클라우드의 장단점 장점 확장의 유연성 저가로 사용하면서 확장해나갈 수 있다. 단점 획일적인 호스트 사양(메모리 상한선, 느린 I/O) 애매한 로드밸런서 때때로 멈춘다 자체 구축 인프라의 장단점 장점 하드웨어 구성을 유연하게 할 수 있다. 서비스로부터의 요청에 유연하게 대응할 수 있다. 병목현상을 제어할 수 있다. 다중성 확보 원리 서버를 여러 대 늘어놓는다. 1, 2대 정지하더라도 충분히 처리할 수 있도록 해둔다. 로드밸런서로 페일오버 / 페일백 멀티 마스터 VRRP(Virtual Router Redundancy Protocol) 기반으로 감시하면서 다중의 마스터를 두는 MySQL 기법 Active 마스터와 Stanby 마스터를 운용해 Active 마스터에 장애가 나면 Stanby 마스터를 Active ..
B+ 트리 vs 이분 트리 1. 이분 트리는 노드가 반드시 하나로 정해져 있다. 반면에 B트리는 유동적으로 개수를 조정할 수 있다. 2. 노드의 데이터 개수를 유동적으로 조정해 노드 하나의 크기를 4KB 등으로 고정할 수 있다. 즉 각 노드의 크기를 적당한 사이즈로 정할 수 있다. 3. 다시 말해서 노드 1개를 디스크 1블록만큼 할당하면 B트리로 디스크에 저장했을 때 각 노드를 딱 한 블록만큼으로 해서 저장할 수 있다. 이는 디스크 Seek을 줄여 탐색 속도를 빠르게 한다. 4. 결론적으로 인덱스 트리를 순회할 때 디스크 Seek 발생 횟수를 최소화할 수 있다. 한번 읽은 데이터는 메모리에 캐싱되기 때문에 같은 노드 내의 데이터는 디스크 Seek 없이 탐색할 수 있다. 5. 반면에 이분 트리는 특정 노드..
I/O 부하를 줄이는 방법 1. 캐시를 전제로 한 I/O 줄이는 방법 데이터 규모 CPU 부하분산은 단순히 스케일 업 하는 것으로 해결이 가능하다. -> I/O 분산에는 국소성을 고려한다. 3. 단순히 대수만 늘려서는 확장성을 확보할 수 없다. 애초에 캐시 용량이 부족해서 늘렸는데 그 부족한 부분도 그대로 동일하게 늘려가게 된다. 결국 액세스 한 순간에 느려지는 것은 변함이 없다. 캐싱할 수 없는 비율은 변함없이 그대로 간다. 국소성을 고려한 분산 액세스 패턴을 고려한 분산, 캐싱할 수 없는 부분이 사라진다. ..
소규모 서비스와 대규모 서비스의 차이 1. 확장성 확보, 부하분산 필요 스케일 업이 아닌 스케일 아웃으로 진행된 느 확장의 경우 요구되는 서버, DB 간 동기화 이슈 해결 2. 다중성 확보 특정 서버가 고장 나거나 성능이 저하되더라도 서비스를 계속할 수 있는 구성으로 할 필요가 있다. 대규모 서비스일수록 잠깐의 기능 정지로 인해 많은 손실을 가져오기 때문이다. 3. 효율적 운용 필요 서버가 100대를 넘어갈 때 현재 서버들의 상태를 파악할 수 있어야 하고, 상태에 따라서 적절한 조치를 빠르게 취할 수 있어야 한다. 최소한의 인력으로 대규모 시스템을 건강한 상태로 유지하는 것이 필요하다. 4. 개발자 수, 개발 방법의 변화 표준화를 위한 교육 및 팀 매니지먼트가 필요하다. 5. 대규모 데이터의 처리 가장 ..
인덱스 수직적 탐색 정렬된 인덱스 레코드 중 조건을 만족하는 첫 번째 레코드를 찾는 과정 즉 인덱스 스캔 시작 지점을 찾는 과정 인덱스 수평적 탐색 수직적 탐색으로 찾은 스캔 시작점에서 찾고자 하는 데이터가 더 안 나타날 때까지 수평적으로 스캔하는 과정 즉 실제로 데이터를 찾는 과정 WHERE 절의 조건 순서에 따라서 성능이 결정된다? 잘못된 정보임. 비교 연산 횟수를 줄일 수 있다는 설명은 맞음. 하지만 인덱스의 자료구조인 B+Tree는 평면 구조가 아님. 어떤 순서로 해도 일 량에는 차이가 없음. (자세한 건 인덱스 성별 여자 이름 유관순으로 검색해볼 것, 대부분이 잘못된 자료인 경우라고 함) 인덱스를 RANGE SCAN 할 수 없는 이유 1. 인덱스 칼럼을 가공하면 인덱스를 정상적으로 사용할 수 없..
SQL의 성능을 결정하는 디스크 I/O 1. I/O를 처리하는 동안 프로세스는 잠을 잔다. 2. 즉 프로세스가 디스크에서 데이터를 읽어야 할 때, CPU는 OS에 반환하고 잠시 waiting state 상태로 진입해 I/O가 완료되길 기다린다. 즉 프로세스가 I/O가 많을수록 대기시간이 길어지고 성능이 느려진다. 3. 아무리 하드웨어 성능이 향상되고 있지만 여전히 느리다. 그러므로 디스크 I/O를 줄이기 위한 최적화가 필요하다. SQL의 데이터 구조 1. 블록: 데이터를 읽고 쓰는 단위 2. 익스텐트: 공간을 확장하는 단위, 연속된 블록 집합 3. 세그먼트: 데이터 저장공간이 필요한 오브젝트(테이블, 인덱스, 파티션, LOB 등) 4. 테이블 스페이스: 세그먼트를 담는 컨테이너 5. 데이터 파일: 디스크..