데이터 성능 최적화를 위한 권장 사항

이 Azure Well-Architected Framework 성능 효율성 검사 목록 권장 사항에 적용됩니다.

PE:08 데이터 성능을 최적화합니다. 워크로드에서 의도한 실제 사용에 맞게 데이터 저장소, 파티션 및 인덱스를 최적화합니다.

이 가이드에서는 데이터 성능을 최적화하기 위한 권장 사항을 설명합니다. 데이터 성능 최적화는 워크로드가 데이터를 처리하고 저장하는 효율성을 구체화하는 것입니다. 모든 워크로드 작업, 트랜잭션 또는 계산은 일반적으로 데이터의 빠르고 정확한 검색, 처리 및 스토리지에 의존합니다. 데이터 성능이 최적화되면 워크로드가 원활하게 실행됩니다. 데이터 성능이 손상되어 성능 효율성이 저하되는 도미노 효과가 발생합니다. 데이터 성능을 최적화하지 못하면 응답 지연, 대기 시간이 높아지고 확장성이 축소됩니다. 전체 워크로드의 효율성을 위태롭게 합니다.

정의

용어 정의
CAP 원리 일관성, 가용성 및 파티션 허용 범위를 고려하여 데이터 일관성의 절충을 설명하는 데 사용되는 프레임워크입니다.
데이터베이스 인덱스 다시 작성 인덱스를 삭제하고 다시 만드는 유지 관리 작업입니다.
데이터베이스 인덱스 재구성 현재 데이터베이스 인덱스를 최적화하는 유지 관리 작업입니다.
데이터 저장소 데이터베이스, 개체 저장소 또는 파일 공유와 같은 데이터를 저장하는 리소스입니다.
최종 일관성 데이터 복제본이 최종적으로 동기화되기 전에 데이터 복제본의 일시적인 불일치를 허용하는 데이터 동기화 모델입니다.
인덱스 항목에 대한 빠른 액세스를 제공하는 데이터베이스 구조입니다.
OLAP(온라인 분석 처리) 대규모 비즈니스 데이터베이스를 구성하고, 복잡한 분석을 지원하고, 트랜잭션 시스템에 부정적인 영향을 주지 않고 복잡한 분석 쿼리를 수행하는 기술입니다.
OLTP(온라인 트랜잭션 처리) organization 일상적인 작업에서 발생하는 비즈니스 상호 작용을 기록하는 기술입니다.
낙관적 동시성 스냅샷을 사용하여 기존 잠금 메커니즘 대신 업데이트를 만드는 데이터베이스를 업데이트하여 성능 및 확장성을 향상시키는 방법입니다.
PACELC 정리 파티션 허용 오차, 가용성, 일관성 및 대기 시간을 고려하여 데이터 일관성의 절충을 설명하는 데 사용되는 프레임워크입니다.
분할 데이터를 별도의 데이터 저장소로 물리적으로 나누는 프로세스입니다.
쿼리 튜닝 데이터베이스 쿼리의 속도를 최적화하는 프로세스입니다.
읽기 복제본(replica) 쓰기 데이터베이스에서 읽기 트래픽을 오프로드할 수 있는 주 데이터베이스의 라이브 복사본입니다.

주요 디자인 전략

데이터 사용을 최적화하려면 데이터 저장소, 파티션 및 인덱스가 의도한 용도와 워크로드에서의 실제 사용에 최적화되어 있는지 확인합니다. 최적화된 데이터 사용은 쿼리 성능을 향상시키고, 리소스 소비를 줄이며, 전반적인 시스템 효율성을 향상시킬 수 있습니다. 다음과 같은 전략을 고려해 보세요.

  • 프로필 데이터. 데이터를 이해하고 데이터 모델이 워크로드에 적합한지 확인합니다. 데이터 정규화, 인덱싱 전략 및 분할 기술과 같은 요소를 고려합니다. 효율적인 데이터 검색을 위해 적절한 데이터 형식을 선택하고, 엔터티 간의 관계를 정의하고, 최적의 인덱싱 전략을 결정해야 합니다.

  • 데이터 스토리지 구성을 미세 조정합니다. 워크로드 요구 사항에 맞게 데이터 스토리지 인프라를 구성합니다. 관계형 데이터베이스, NoSQL 데이터베이스 및 데이터 웨어하우스와 같은 적절한 스토리지 기술을 선택합니다. 버퍼 크기, 캐싱 메커니즘 및 압축과 같은 스토리지 설정을 최적화합니다.

  • 쿼리 성능 최적화. 워크로드에서 실행되는 쿼리를 분석하고 최적화합니다. 쿼리 최적화, 인덱싱 및 캐싱과 같은 기술을 사용합니다. 병목 상태를 식별하려면 쿼리 계획 및 성능 모니터링 도구를 사용한 다음 필요한 개선 사항을 적용합니다.

  • 시스템을 정기적으로 모니터링하고 튜닝합니다. 워크로드의 성능을 지속적으로 모니터링하고 데이터 스토리지 구성 및 쿼리 최적화를 반복합니다. 성능 조정 모범 사례에 따라 시스템 메트릭을 분석하고, 개선 영역을 식별하고, 변경 내용을 구현합니다.

데이터 프로파일링

데이터 프로파일링에는 원본에서 데이터를 검사하고 해당 데이터에 대한 정보를 수집하는 작업이 포함됩니다. 목표는 워크로드 데이터의 품질, 구조 및 특성을 이해하는 것입니다. 이 프로세스를 통해 누락된 값, 중복, 일관성 없는 형식 및 기타 변칙과 같은 문제를 식별할 수 있습니다. 효과적인 데이터 프로파일링을 위해 다음 전략을 고려합니다.

  • 데이터 구조를 이해합니다. 테이블, 열 및 관계를 포함하여 데이터의 구조를 검사합니다. 각 열에 적용되는 데이터 형식, 길이 및 제약 조건을 결정합니다. 데이터 구조 평가는 데이터가 구성되는 방식과 데이터가 다른 데이터 요소와 어떻게 관련되는지 이해하는 데 도움이 됩니다.

  • 데이터 볼륨을 분석합니다. 데이터의 볼륨을 평가하여 전체 크기 및 성장 패턴을 이해합니다. 레코드 또는 문서 수와 개별 테이블 또는 컬렉션의 크기를 결정합니다. 이 정보는 스토리지 요구 사항을 예측하고 확장성 문제를 식별하는 데 도움이 됩니다.

  • 데이터 관계를 식별합니다. 기본 및 외래 키 관계와 같은 데이터 요소 간의 관계를 살펴봅니다. 데이터가 연결된 방식을 이해하여 한 테이블 또는 문서의 변경 내용이 관련 데이터에 미치는 영향을 확인할 수 있습니다.

  • 데이터 품질을 평가합니다. 완전성, 정확도, 일관성 및 고유성과 같은 요소를 검사하여 데이터의 품질을 평가합니다. 데이터 무결성 및 쿼리 성능에 영향을 줄 수 있는 데이터 변칙, 누락된 값 또는 중복 레코드를 식별합니다. 이 단계는 데이터 정리 및 개선 영역을 식별하는 데 도움이 됩니다.

  • 데이터 배포를 캡처합니다. 각 열 내의 값 분포를 분석하여 데이터 패턴을 확인합니다. 빈도 및 드문 값, 이상값 및 데이터 기울이기를 식별합니다. 쿼리 성능을 최적화하려면 배포에 따라 적절한 인덱싱 전략 및 쿼리 최적화 기술을 선택합니다.

데이터 성능 모니터링

데이터 성능 모니터링은 데이터 저장소, 파티션 및 인덱스의 효율성을 실시간으로 일관되게 추적하는 방법입니다. 여기에는 시스템 수준, 데이터베이스별 또는 타사 모니터링 솔루션에 맞게 조정된 도구를 사용하여 데이터 작업과 관련된 성능 메트릭을 수집하고 분석하는 작업이 포함됩니다. 효과적인 데이터 성능 모니터링을 사용하면 잠재적인 병목 상태를 사전에 식별하고 완화하여 데이터 관련 프로세스 및 작업이 효율적으로 수행되도록 할 수 있습니다. 데이터 성능을 모니터링하려면 다음 전략을 고려합니다.

  • 데이터별 메트릭을 수집합니다. 데이터 성능과 직접 관련된 주요 메트릭을 수집합니다. 이러한 메트릭에는 쿼리 응답 시간, 데이터 처리량, 데이터 액세스와 관련된 디스크 I/O 및 특정 데이터 파티션의 로드 시간이 포함됩니다.

  • 데이터 경고를 설정합니다. 특히 데이터 메트릭에 대한 경고를 설정합니다. 이러한 메트릭에서 미리 정의된 임계값 또는 변칙을 사용하여 경고를 트리거합니다. 경고를 사용하면 성능 메트릭이 허용 범위를 초과하거나 비정상적인 동작을 표시할 때 알림을 받을 수 있습니다. instance 경우 데이터베이스 쿼리가 예상보다 오래 걸리거나 데이터 처리량이 크게 감소하면 경고가 트리거됩니다. 특수 모니터링 도구 또는 사용자 지정 스크립트를 사용하여 이러한 경고를 설정할 수 있습니다.

  • 데이터 성능 문제를 진단합니다. 수집된 데이터 메트릭을 정기적으로 검토하여 데이터 작업의 잠재적인 성능 병목 상태 또는 성능 저하를 정확히 파악합니다. 시각화 도구 또는 대시보드는 이 프로세스에서 매우 중요할 수 있으므로 데이터 성능의 추세, 병목 상태 및 이상값을 강조 표시할 수 있습니다. 식별되면 이러한 문제의 근본 원인을 조사하고 적절한 수정 단계를 전략화합니다.

데이터 분할

분할에는 대용량 데이터 세트 또는 대용량 워크로드를 더 작고 관리하기 쉬운 하위 집합으로 나누는 작업이 포함됩니다. 분할은 워크로드를 배포하고 병렬 처리를 개선하여 데이터 성능 효율성을 향상시킵니다. 또한 특정 요구 사항 및 쿼리 패턴에 따라 보다 효과적인 데이터 액세스를 보장합니다. 데이터를 세로 또는 가로로 분할할 수 있습니다(분할이라고도 함).

전략 정의 예제 사용 사례
수직 분할 각 파티션에 대한 특정 열 또는 필드를 선택하여 테이블을 더 작은 테이블로 나눕니다. 각 파티션은 전체 데이터의 하위 집합을 나타냅니다. A, B, C 및 D 열이 있는 테이블이 있는 경우 A와 B 열이 있는 테이블 하나와 C 및 D 열이 있는 테이블을 만들 수 있습니다. - 테이블에 많은 열이 포함되어 있지만 쿼리가 모든 열에 함께 액세스하지는 않습니다.
- 일부 열은 다른 열보다 크고 분리하면 I/O 성능이 향상됩니다.
- 다양한 데이터 파트에는 다양한 액세스 패턴이 있습니다.
가로 분할 행 또는 값 범위(분할이라고도 함)를 기준으로 데이터를 분할합니다. 각 파티션에는 유사한 특성을 가진 행의 하위 집합이 포함됩니다. 행이 1~1000인 테이블이 있는 경우 행이 1~500인 파티션 하나와 행이 501~1000인 파티션을 만들 수 있습니다. - 데이터 세트가 너무 커서 단일 위치 또는 서버에 대해 너무 큽니다.
- 데이터는 특정 범위 또는 필터에 따라 액세스됩니다.
- 성능 향상을 위해 실제 노드 또는 서버에 워크로드를 분산해야 합니다.

데이터를 분할하려면 다음 단계를 고려합니다.

  • 데이터 및 쿼리를 분석합니다. 데이터 및 쿼리 패턴을 분석하여 적절한 분할 또는 분할 전략을 식별합니다. 데이터, 액세스 패턴 및 배포 요구 사항의 특성을 이해합니다.

  • 키를 확인합니다. 분할 또는 분할 키를 선택하여 파티션 또는 분할된 데이터베이스에 데이터를 분산합니다. 데이터 특성 및 쿼리 요구 사항에 따라 키를 신중하게 선택합니다.

  • 논리를 결정합니다. 선택한 키를 기반으로 분할 또는 분할 논리를 결정합니다. 데이터를 범위로 분할하거나, 해시 알고리즘을 적용하거나, 다른 분할 기술을 사용하는 것이 좋습니다.

  • 인프라를 구성합니다. 분할 또는 분할을 지원하도록 데이터베이스 시스템을 구성합니다. 필요한 인프라를 만들고, 파티션 또는 분할된 데이터베이스를 정의하고, 데이터 배포를 구성하는 것이 좋습니다.

자세한 내용은 데이터 분할 지침을 참조하세요.

데이터베이스 쿼리 최적화

데이터베이스 쿼리 최적화는 인덱스 힌트 및 캐싱과 같은 기술을 사용하여 쿼리를 구체화합니다. 이러한 조정은 데이터 검색의 효율성과 속도를 높입니다. 결과적으로 데이터베이스에 워크로드가 더 가벼워지고, 리소스가 더 효과적으로 작동하며, 사용자가 더 원활한 상호 작용을 즐길 수 있습니다. 데이터베이스 쿼리를 최적화하려면 다음 전략을 고려합니다.

  • 쿼리를 다시 작성합니다. 복잡한 쿼리를 검토하고 분석하여 다시 작성할 기회를 식별합니다. 쿼리 논리를 재구성하거나, 중복 작업을 제거하거나, 쿼리 구문을 간소화하는 것이 좋습니다.

  • N+1 쿼리 문제를 방지합니다. 조인 및 일괄 처리 페치를 사용하여 관련 데이터를 효율적으로 검색하여 데이터베이스에 대한 왕복 수를 최소화합니다.

  • 조인 순서를 다시 지정합니다. 쿼리 계획을 평가하고 조인 순서를 다시 정렬하여 각 조인 작업의 행 수를 최소화하는 것이 좋습니다. 테이블을 조인하는 순서는 쿼리 성능에 영향을 줄 수 있습니다.

  • 인덱스 힌트를 사용합니다. 데이터베이스 엔진이 쿼리를 실행할 때 인덱스 사용을 지정할 수 있도록 인덱스 힌트를 사용합니다. 인덱스 힌트는 최적화 프로그램이 가장 적절한 인덱스를 선택하도록 안내합니다.

  • 쿼리를 캐시합니다. 자주 실행되는 쿼리의 결과를 메모리에 저장합니다. 쿼리 캐싱을 사용하면 동일한 쿼리를 반복적으로 실행할 필요가 없으며 쿼리 처리 오버헤드가 줄어듭니다.

  • 잠금을 최적화합니다. 쿼리에서 불필요하거나 제한적인 잠금 힌트를 방지합니다. 효율적인 잠금 전략은 쿼리 성능 및 동시성을 향상시킬 수 있습니다. 데이터베이스 시스템에서 제공하는 최적화된 잠금 메커니즘을 적용합니다. 격리 수준을 분석하고 조정하여 데이터 일관성과 쿼리 성능의 균형을 조정합니다.

  • 모니터링하고 튜닝합니다. 런타임, 리소스 사용률 및 쿼리 처리량과 같은 쿼리 성능 메트릭을 모니터링합니다. 데이터베이스 프로파일링 도구 및 모니터링 기능을 사용하여 성능이 저하된 쿼리를 식별합니다. 수집된 성능 데이터를 기반으로 쿼리 계획을 평가하고 미세 조정합니다. 쿼리 계획을 분석하고 통계를 대기하여 병목 상태를 식별합니다. 이 정보를 사용하여 쿼리 성능을 최적화합니다.

인덱스 성능 최적화

인덱스는 데이터베이스가 특정 열 또는 필드를 사용하여 데이터를 신속하게 찾을 수 있도록 하여 데이터 검색 속도를 향상시킵니다. 이러한 인덱스를 최적화하면 정렬 및 조인 작업이 더 효율적이 되어 쿼리가 더 빨라집니다. 잘 최적화된 인덱스는 쿼리에 필요한 디스크 I/O 작업을 줄입니다. 불필요한 인덱스 또는 중복 인덱스를 제거하면 중요한 스토리지 공간도 확보됩니다. 인덱스 성능을 최적화하려면 다음 전략을 고려합니다.

  • 쿼리 패턴을 분석합니다. 데이터베이스에서 실행되는 쿼리 패턴을 이해합니다. 자주 실행되고 성능이 저하될 수 있는 쿼리를 식별합니다. 쿼리 패턴을 분석하여 성능을 최적화하는 데 도움이 되는 인덱스를 결정합니다.

  • 기존 인덱스를 평가합니다. 데이터베이스의 기존 인덱스를 검토합니다. 사용량, 성능 효과 및 쿼리 패턴에 대한 관련성을 평가합니다. 쓰기 성능을 개선하고 스토리지 오버헤드를 줄이기 위해 제거할 수 있는 중복 또는 사용되지 않는 인덱스를 식별합니다.

  • 인덱싱을 위한 열을 식별합니다. 쿼리의 where, joinorder by 절에서 자주 사용되는 열을 식별합니다. 이러한 열은 빠른 데이터 검색을 사용하도록 설정할 수 있으므로 인덱싱의 잠재적 후보입니다.

  • 적절한 인덱스 유형을 선택합니다. 데이터베이스 시스템에 따라 적절한 인덱스 유형을 선택합니다. 일반적인 옵션으로는 같음 및 범위 쿼리에 대한 b-트리 인덱스, 정확한 일치 쿼리를 위한 해시 인덱스 및 텍스트 검색 작업에 대한 전체 텍스트 인덱스가 포함됩니다. 쿼리 요구 사항과 가장 일치하는 인덱스 유형을 선택합니다.

  • 인덱스 열 순서를 고려합니다. 복합 인덱스 또는 여러 열이 있는 인덱스를 만들 때 열의 순서를 고려합니다. 인덱스의 시작 부분에 쿼리에서 가장 자주 사용되는 열을 배치합니다. 열 순서를 사용하면 워크로드가 광범위한 쿼리에 인덱스를 효과적으로 사용할 수 있습니다.

  • 인덱스 크기 균형 조정. 카디널리티가 낮은 열 또는 고유 값 수가 적은 열에 인덱스를 만들지 않습니다. 이러한 인덱스는 비효율적이며 데이터베이스 크기를 늘릴 수 있습니다. 대신 선택도가 높은 열을 인덱싱합니다.

  • 인덱스 사용량을 유지 관리합니다. 인덱스의 사용량 및 성능을 지속적으로 모니터링합니다. 쿼리 패턴 또는 성능 요구 사항의 변경 내용에 따라 새 인덱스를 만들거나 기존 인덱스를 수정할 기회를 찾습니다. 더 이상 도움이 되지 않는 인덱스를 제거하거나 업데이트합니다. 인덱스에는 유지 관리 오버헤드가 있습니다. 데이터가 변경되면 인덱스가 조각화되고 성능에 영향을 줄 수 있습니다. 최적의 성능을 보장하기 위해 인덱스 다시 작성 또는 재구성과 같은 인덱스 유지 관리 작업을 정기적으로 수행합니다.

  • 테스트 및 유효성을 검사합니다. 프로덕션 환경에서 인덱스를 수정하기 전에 철저한 테스트 및 유효성 검사를 수행합니다. 대표 워크로드를 사용하여 인덱스 수정의 성능 효과를 측정합니다. 미리 정의된 벤치마크에 대한 개선 사항을 확인합니다.

절충: B-트리 인덱스는 스토리지 오버헤드가 높고 정확히 일치하는 쿼리가 느려질 수 있습니다. 해시 인덱스는 범위 쿼리 또는 비교 연산자에서 적합하지 않습니다. 전체 텍스트 인덱스에는 높은 스토리지 요구 사항이 있을 수 있으며, 텍스트가 아닌 데이터 쿼리는 느려질 수 있습니다.

데이터 압축 고려

데이터 압축은 스토리지 공간을 최적화하고 워크로드 성능 효율성을 개선하기 위해 데이터 크기를 줄이는 프로세스입니다. 압축된 데이터에는 전송을 위한 스토리지 공간과 더 적은 대역폭이 필요하며, 이로 인해 빠른 데이터 전송이 발생합니다. 데이터를 압축하여 스토리지 공간을 줄이고 데이터 액세스 시간을 개선합니다. 데이터를 압축하면 I/O 작업 및 네트워크 대역폭 요구 사항이 줄어듭니다.

무손실 압축 및 손실 압축은 데이터 압축 알고리즘입니다. 무손실 압축 알고리즘은 정보를 잃지 않고 데이터 크기를 줄입니다. 손실 압축 알고리즘은 덜 중요하거나 중복된 정보를 제거하여 높은 압축 비율을 달성합니다.

절충: 데이터를 압축 및 압축 해제하려면 CPU 및 메모리와 같은 계산 리소스가 필요합니다. 압축하는 데이터가 많을수록 더 많은 리소스가 필요합니다.

데이터 보관 및 제거

보관 및 제거는 데이터 스토리지를 간소화하는 전략입니다. 보관은 더 오래되고 자주 액세스하지 않은 데이터를 보다 비용 효율적인 스토리지로 재배치합니다. 데이터를 제거하면 중복 데이터가 영구적으로 제거됩니다. 데이터 볼륨을 줄이고, 데이터 액세스 속도를 높이고, 백업 및 복구 시간을 줄여 성능 효율성에 기여합니다.

  • 데이터 볼륨 감소: 데이터가 적으면 처리 시간이 빨라지고 사용자 요청에 빠르게 응답할 수 있습니다.

  • 데이터 액세스 속도 증가: 트리밍된 데이터 세트를 사용하면 신속한 쿼리 및 데이터 검색을 통해 시스템 응답성을 최적화할 수 있습니다.

  • 백업 및 복구 시간 단축: 더 작은 데이터 세트는 백업 및 복원 프로세스를 신속하게 처리하고 가동 중지 시간을 최소화하며 일관된 성능을 보장합니다.

보관 및 제거는 데이터 기반 시스템에서 최고 성능 효율성을 유지하는 데 중요한 역할을 합니다.

스토리지 로드 최적화

스토리지 로드 최적화는 스토리지 시스템에 대한 요청을 간소화하는 것을 의미합니다. 불필요한 요청을 제거하는 데 도움이 됩니다. 또한 데이터 검색을 향상시키고 스토리지를 압도하는 것을 방지합니다. 스토리지 부하를 최적화하면 스토리지 시스템이 합법적인 요청에 계속 응답하고 최고 성능을 유지할 수 있습니다. 데이터 저장소의 처리 부담을 줄이기 위한 전략을 구현합니다. 데이터 저장소 로드를 최적화하려면 다음 전략을 고려합니다.

캐싱 사용

캐싱은 일반적으로 액세스되는 데이터를 빠르게 액세스하는 스토리지 영역에 저장하므로 기본 원본에서 데이터를 가져오는 것보다 빠르게 데이터를 검색할 수 있습니다. 이 기술은 액세스 시간을 줄이고 반복적인 데이터 가져오기를 방지하여 데이터 성능을 향상시킵니다. 캐싱은 읽기 속도 및 사용자 응답 시간을 향상시킵니다. 특히 자주 액세스하는 데이터의 경우 이 방법은 거의 변경되지 않는 정적 데이터 또는 데이터에 가장 효과적입니다.

최적의 캐싱 효율성을 보장하려면 만료 정책, 제거 전략 및 캐시 크기 관리와 같은 요소를 고려합니다. 최적의 성능을 위해 TTL(Time to Live)과 같은 설정을 조정합니다. 캐시를 사용하여 스토리지 부하를 최적화하려면 다음 전략을 고려합니다.

  • 메모리 내 캐싱: 메모리 내 캐싱을 수행하여 빠르게 검색할 수 있도록 자주 액세스하는 데이터를 메모리에 저장합니다. 데이터베이스에서 계산하거나 검색하는 데 비용이 많이 드는 애플리케이션 데이터에 이 기술을 사용할 수 있습니다. 메모리 내 캐싱은 자주 읽지만 자주 변경되지 않는 데이터에 유용합니다.

  • 데이터베이스 쿼리 캐싱: 이 기술을 사용하여 동일한 쿼리를 여러 번 실행하지 않도록 데이터베이스 쿼리의 결과를 캐시합니다. 데이터베이스 쿼리 캐싱은 복잡하고 시간이 많이 걸리는 데이터베이스 쿼리에 유용합니다. 쿼리 결과를 캐시하면 동일한 쿼리에 대한 후속 요청이 신속하게 반환됩니다.

  • 콘텐츠 배달 네트워크 캐싱: 이 기술을 사용하여 분산 네트워크 서버에서 웹 콘텐츠를 캐시하여 대기 시간을 줄이고 콘텐츠 배달을 개선합니다. 콘텐츠 배달 네트워크 캐싱은 이미지, CSS 파일 및 JavaScript 파일과 같은 정적 콘텐츠에 효과적입니다. 콘텐츠 배달 네트워크는 전 세계 여러 위치에 콘텐츠 복사본을 저장하므로 사용자는 지리적으로 가까운 서버에서 콘텐츠에 액세스할 수 있습니다.

읽기 복제본 사용

많은 데이터베이스에서 여러 읽기 복제본을 지원합니다. 읽기 쿼리를 복제본 간에 배포하여 쓰기 데이터베이스에 대한 수요를 최소화합니다. 각 읽기 복제본(replica) 트래픽의 하위 집합을 제공할 수 있으므로 성능이 향상될 수 있습니다.

동기화 상태를 유지할 것으로 예상되는 여러 데이터 복제본이 있는 워크로드가 있는 경우 PACELC 정리를 사용하여 이 분산 시스템을 모델링하는 것이 유용합니다. PACELC 정리는 시스템의 분할되지 않은 상태에서 대기 시간 및 불변성 장단점 선택을 이해하는 데 도움이 됩니다. 이 정보를 사용하여 분할 및 분할되지 않은 상태에서 시스템을 가장 잘 해결하는 데이터베이스 엔진 및 데이터 동기화 전략을 선택할 수 있습니다. 자세한 내용은 CQRS(명령 및 쿼리 책임 분리) 패턴을 참조하세요.

데이터 일관성 최적화

데이터가 여러 노드 또는 위치에 상주하는 분산 워크로드에서 선택한 일관성 수준은 한 위치의 변경 내용이 다른 위치에 얼마나 빠르게 반영되는지를 결정합니다. 더 엄격한 일관성을 선택하면 더 많은 컴퓨팅 리소스가 사용되며 성능 효율성에 부정적인 영향을 줄 수 있습니다. 반면에 최종 일관성과 같이 덜 엄격한 일관성 수준은 노드 간에 일시적인 불일치를 발생하지만 성능 효율성을 높일 수 있습니다.

최종 일관성은 데이터 정확도와 워크로드 성능 간의 균형을 맞습니다. 변경 내용이 즉시 확산되는 대신 점진적으로 확산되어 워크로드 응답성 및 데이터 처리 속도가 향상됩니다. 단기 불일치가 발생하지만 워크로드는 결국 모든 노드에서 일관된 데이터를 제공합니다. 최종 일관성을 선택하면 워크로드의 성능이 향상되고 가용성과 확장성이 더욱 향상됩니다.

데이터 업데이트 최적화

낙관적 동시성을 사용하여 동일한 데이터에 대한 동시 업데이트를 처리할 수 있습니다. 낙관적 동시성을 사용하면 데이터를 잠그고 다른 업데이트를 방지하는 대신 여러 사용자 또는 프로세스가 동시에 작동할 수 있으며 충돌이 드물다고 가정합니다.

낙관적 동시성을 사용하면 각 업데이트 작업에는 업데이트 당시의 데이터 상태를 나타내는 버전 또는 타임스탬프가 포함됩니다. 충돌하는 업데이트가 감지되면 시스템은 업데이트를 거부하거나 변경 내용을 병합하여 충돌을 해결합니다.

낙관적 동시성은 경합을 최소화하고 불필요한 잠금 없이 동시 업데이트를 진행할 수 있도록 합니다. 리소스에 대한 대기 시간을 줄이고 높은 처리량을 제공합니다.

데이터 이동 및 처리 최적화

데이터 이동 및 처리를 최적화하려면 데이터 추출, 변환, 로드 및 처리와 관련된 작업의 효율성과 성능을 개선해야 합니다. 데이터 이동 및 처리 최적화의 다음 주요 측면을 고려합니다.

  • ETL(추출, 변환 및 로드) 최적화: ETL 프로세스를 최적화하여 처리 시간을 최소화합니다. 추출 프로세스를 간소화하고, 효율적인 변환 알고리즘을 구현하고, 로드 프로세스를 최적화할 수 있습니다. 각 단계를 효율적으로 만들 때 전체 워크플로를 최적화할 수 있습니다.

  • 병렬 처리: 병렬 처리 기술을 활용하여 성능을 향상시킵니다. 여러 스레드 또는 노드에 데이터 처리 작업을 배포하는 경우 워크로드를 동시에 나누고 처리하여 빠르게 처리할 수 있습니다.

  • 일괄 처리: 유사한 작업을 함께 그룹화하여 반복되는 작업으로 인한 오버헤드를 줄입니다. 일괄 처리로 여러 작업을 처리하여 전체 처리 시간을 줄입니다.

스토리지 디자인 최적화

스토리지 디자인을 최적화하려면 정확한 데이터 스토리지 아키텍처를 만들고 적절한 스토리지 기술을 선택해야 합니다. 간소화된 스토리지 디자인은 데이터 액세스, 검색 및 조작을 향상시킵니다. 전략적 스토리지 디자인을 통해 워크로드는 향상된 응답 시간과 전반적인 기능을 달성합니다.

데이터 근접성을 위한 디자인

데이터 근접성은 데이터에 가장 자주 액세스하는 사용자 또는 서비스에 더 가까운 데이터의 전략적 배치를 나타냅니다. 데이터와 사용자 간의 물리적 또는 논리적 거리를 줄이면 데이터 근접성이 더 빠른 데이터 액세스와 향상된 응답성을 보장합니다. 근접성을 위해 디자인을 최적화하려면 다음 전략을 고려합니다.

  • 데이터 액세스 패턴 평가: 워크로드의 액세스 패턴 및 자주 액세스하는 데이터를 평가합니다. 이 분석은 최대 이점을 위해 데이터를 배치할 위치를 결정하는 데 도움이 될 수 있습니다.

  • 데이터 재배치를 지원하는 솔루션 선택: 액세스 패턴 변경에 따라 동적 데이터 재배치를 제공하여 최적의 데이터 위치를 보장하는 솔루션을 고려합니다.

  • 데이터 동기화를 지원하는 솔루션 선택: 분산 사용자 기반을 충족하는 경우 다양한 지역에서 데이터 동기화를 용이하게 하는 솔루션을 선택하여 데이터 복제본을 사용자와 근접하게 사용할 수 있도록 합니다.

절충: 기본 데이터가 자주 변경되는 경우 캐시된 데이터가 최신 상태로 유지되도록 캐시 무효화 메커니즘을 구현합니다.

다각형 지속성 사용

Polyglot 지속성은 여러 데이터 스토리지 기술을 사용하여 애플리케이션 또는 시스템 내에서 다양한 유형의 데이터를 저장하고 관리하는 방법입니다. 다양한 유형의 데이터베이스 또는 스토리지 솔루션은 다양한 데이터 요구 사항을 충족합니다.

Polyglot 지속성은 각 데이터 스토리지 기술의 이점을 활용하여 각 데이터 형식에 대한 최적의 성능과 확장성을 보장합니다. 예를 들어 관계형 데이터베이스를 사용하여 구조적 트랜잭션 데이터를 저장할 수 있습니다. 또한 NoSQL 데이터베이스를 사용하여 비정형 또는 반구조화된 데이터를 저장할 수 있습니다.

데이터의 요구 사항에 따라 각 데이터 스토리지 기술에 대한 스키마를 디자인합니다. 관계형 데이터베이스의 경우 적절한 관계를 사용하여 정규화된 테이블을 만들 수 있습니다. NoSQL 데이터베이스의 경우 문서 구조 또는 키-값 쌍을 정의할 수 있습니다. API, 데이터 액세스 계층 또는 데이터 통합 파이프라인과 같은 각 데이터 스토리지 기술과 상호 작용하는 데 필요한 구성 요소를 개발합니다. 애플리케이션이 적절한 데이터 저장소에 데이터를 읽고 쓸 수 있는지 확인합니다.

절충: 정규화가 낮은 데이터 구조는 성능을 향상시킬 수 있지만 복잡성을 도입할 수 있습니다.

개별 OLTP 및 OLAP 시스템

OLTPOLAP 시스템을 분리하려면 트랜잭션 처리 및 분석 처리 작업을 위한 고유한 시스템을 설계하고 배포합니다. 이러한 분리를 통해 각 시스템을 특정 워크로드 및 특성에 맞게 최적화할 수 있습니다.

OLTP 시스템은 실시간 트랜잭션 처리에 사용됩니다. 개별 트랜잭션을 효율적이고 안정적으로 처리합니다. OLTP 시스템은 일반적으로 온라인 주문 처리, 재고 관리 및 고객 데이터 관리와 같은 일상적인 운영 작업을 수행하는 데 사용됩니다. OLTP 시스템은 응답성, 일관성 및 동시성의 우선 순위를 지정합니다.

OLAP 시스템은 복잡한 분석 처리 및 보고에 사용됩니다. 대량의 데이터를 처리하고 집약적인 계산 및 집계를 수행합니다. OLAP 시스템은 비즈니스 인텔리전스, 데이터 마이닝 및 의사 결정 지원과 같은 작업에 사용됩니다. OLAP 시스템은 쿼리 성능, 데이터 집계 및 다차원 분석의 우선 순위를 지정합니다.

OLTP 및 OLAP 시스템을 분리하는 경우 적절한 리소스를 할당하고 특정 워크로드에 대해 각 시스템을 최적화할 수 있습니다. 분리를 사용하면 각 시스템에 서로 다른 데이터 모델링 기술을 적용할 수 있습니다. OLTP 시스템은 일반적으로 효율적인 트랜잭션 처리를 위해 정규화된 스키마를 사용합니다. OLAP 시스템은 비정규화된 스키마 또는 데이터 웨어하우징 기술을 사용하여 쿼리 성능을 최적화할 수 있습니다.

Azure 촉진

프로파일링 데이터: Azure는 Azure Data Catalog, Azure Purview 및 Azure Synapse Analytics와 같은 데이터를 프로파일링하는 데 사용할 수 있는 도구와 서비스를 제공합니다. 이러한 도구를 사용하면 다양한 원본에서 데이터를 추출, 변환 및 로드하고, 데이터 품질 검사를 수행하고, 데이터에 대한 인사이트를 얻을 수 있습니다.

데이터 성능 모니터링: 데이터 성능을 모니터링하기 위해 Azure Monitor를 사용하여 인프라 메트릭, 로그 및 애플리케이션 데이터를 수집하고 분석할 수 있습니다. Application Insights와 같은 다른 서비스와 Monitor를 통합할 수 있습니다. Application Insights는 애플리케이션 성능 모니터링을 제공하고 많은 플랫폼을 지원합니다.

Application Insights는 사용량 및 성능 데이터를 수집합니다. Log Analytics를 사용하여 해당 데이터를 Azure 리소스의 구성 및 성능 데이터와 상호 연결할 수 있습니다.

Azure SQLAzure Cosmos DB의 인사이트 기능을 사용하여 데이터베이스를 모니터링할 수 있습니다. 이 기능을 사용하면 데이터베이스 성능 문제를 진단하고 조정할 수 있습니다.

데이터 분할: Azure는 다양한 데이터 저장소에 대한 다양한 분할 전략을 제공합니다. 각 데이터 저장소에는 데이터 분할에 대한 다양한 고려 사항 및 구성 옵션이 있을 수 있습니다. 자세한 내용은 데이터 분할 전략을 참조하세요.

데이터베이스 쿼리 및 인덱스 성능 최적화: Azure SQL Database의 쿼리 성능 인사이트 기능을 사용하여 쿼리, 테이블 및 데이터베이스를 최적화합니다. 이 기능을 사용하여 쿼리 성능 문제를 식별하고 해결할 수 있습니다.

관계형 데이터베이스의 경우 인덱스 디자인 지침, SQL Server 인덱스 지침Azure Cosmos DB 인덱스 지침을 따라야 합니다. SQL Database 사용하여 쿼리에 대한 자동 조정을 수행하여 성능을 향상시킵니다.

SQL 데이터베이스에서는 정기적으로 인덱스를 다시 구성하거나 다시 작성해야 합니다. 느린 쿼리를 식별하고 튜닝하여 성능을 향상시킵니다. 많은 데이터베이스 엔진에는 쿼리 튜닝 기능이 있습니다. 자세한 내용은 쿼리 성능 모범 사례를 참조하세요.

Azure Cosmos DB에는 모든 항목의 모든 속성을 인덱싱하고 문자열 또는 숫자에 범위 인덱스를 적용 하는 기본 인덱싱 정책이 있습니다. 이 정책은 효율적인 쿼리 성능을 제공하며 인덱스를 미리 관리할 필요가 없습니다.

스토리지 로드 최적화: 많은 Azure 데이터베이스 서비스에서 읽기 복제본을 지원합니다. 읽기 복제본의 가용성 및 구성은 Azure 데이터베이스 서비스에 따라 달라집니다. 세부 정보 및 옵션을 이해하려면 각 서비스에 대한 공식 설명서를 참조하세요.

스토리지 디자인 최적화: Azure는 워크로드 요구 사항에 맞게 다양한 데이터 저장소를 제공합니다. 데이터 저장소 유형을 이해하고애플리케이션에 대한 Azure 데이터 저장소를 선택합니다.

성능 효율성 검사 목록

전체 권장 사항 집합을 참조하세요.