데이터 성능 최적화를 위한 권장 사항
이 Power Platform Well-Architected Performance Efficiency 체크리스트 권장 사항에 적용됩니다.
체육:08 | 데이터 성능을 최적화합니다. 워크로드에서 의도된 실제 사용에 맞게 데이터 저장소를 최적화합니다. |
---|
이 가이드는 데이터 성능 최적화를 위한 권장 사항을 설명합니다. 데이터 성능 최적화는 워크로드가 데이터를 처리하고 저장하는 효율성을 개선하는 것입니다. 모든 워크로드 작업, 트랜잭션 또는 계산은 일반적으로 데이터의 빠르고 정확한 검색, 처리 및 저장에 의존합니다. 데이터 성능이 최적화되면 워크로드가 원활하게 실행됩니다. 데이터 성능 저하로 인해 성능 효율성이 떨어지는 도미노 효과가 발생합니다. 데이터 성능 최적화에 실패하면 응답 지연, 지연 시간 증가 및 확장성 저하가 발생합니다. 이는 전체 워크로드의 효율성을 위태롭게 합니다.
정의
용어 | 정의 |
---|---|
데이터 저장소 | 데이터베이스, 개체 저장소 또는 파일 공유와 같은 데이터를 저장하는 리소스입니다. |
Index | 항목에 대한 빠른 액세스를 제공하는 데이터베이스 구조입니다. |
온라인 분석 처리(OLAP) | 대규모 비즈니스 데이터베이스를 구성하고, 복잡한 분석을 지원하고, 트랜잭션 시스템에 부정적인 영향을 주지 않으면서 복잡한 분석 쿼리를 수행하는 기술입니다. |
온라인 트랜잭션 처리(OLTP) | 조직의 일상적인 운영에서 발생하는 비즈니스 상호 작용을 기록하는 기술입니다. |
분할 | 데이터를 물리적으로 별도의 데이터 저장소로 나누는 프로세스입니다. |
쿼리 튜닝 | 데이터베이스 쿼리 속도를 최적화하는 프로세스입니다. |
주요 디자인 전략
데이터 사용을 최적화하려면 데이터 저장소가 의도된 용도와 워크로드에서의 실제 사용에 맞게 최적화되었는지 확인하십시오. 최적화된 데이터 사용은 쿼리 성능을 향상시키고 리소스 소비를 줄이며 전반적인 시스템 효율성을 향상시킬 수 있습니다. 다음 전략을 살펴보세요.
프로필 데이터. 데이터를 이해하고 데이터 모델이 워크로드에 적합한지 확인하세요. 데이터 정규화 및 분할 기술과 같은 요소를 고려하십시오. 효율적인 데이터 검색을 위해 적절한 데이터 유형을 선택하고 테이블 사이에 관계를 정의했는지 확인하십시오.
쿼리 성능을 최적화합니다. 워크로드에서 실행되는 쿼리를 분석하고 최적화합니다. 쿼리 최적화 및 캐싱과 같은 기술을 사용합니다. 서버 측 보기를 사용하여 데이터를 사전 필터링합니다. 병목 현상을 식별하려면 성능 모니터링 도구를 사용한 다음 필요한 개선을 수행하십시오.
시스템을 정기적으로 모니터링하고 조정합니다. 워크로드 성능을 지속적으로 모니터링하고 데이터 스토리지 구성 및 쿼리 최적화를 반복합니다. 성능 튜닝 모범 사례를 기반으로 시스템 메트릭을 분석하고 개선 영역을 식별하며 변경 사항을 구현합니다. 데이터가 증가함에 따라 성능을 유지하기 위해 쿼리를 업데이트해야 할 수도 있습니다.
프로필 데이터
데이터 프로파일링에는 원본의 데이터를 검사하고 이에 대한 정보를 수집하는 작업이 포함됩니다. 목표는 워크로드 데이터의 품질, 구조 및 특성을 이해하는 것입니다. 이 프로세스를 통해 누락된 값, 중복, 일관되지 않은 형식 및 기타 이상과 같은 문제를 식별할 수 있습니다.
효과적인 데이터 프로파일링을 위해 다음 전략을 고려하십시오.
데이터 구조를 이해합니다. 테이블, 열, 관계를 포함한 데이터 구조를 검사합니다. 각 열에 적용되는 데이터 유형, 길이 및 제약 조건을 결정합니다. 데이터 구조 평가는 데이터가 구성되는 방식과 데이터가 다른 데이터 요소와 어떻게 관련되는지 이해하는 데 도움이 됩니다.
데이터 볼륨을 분석합니다. 데이터의 양을 평가하여 전체 크기와 성장 패턴을 이해하세요. 레코드 또는 문서 수와 개별 테이블 또는 컬렉션의 크기를 결정합니다. 이 정보는 스토리지 요구 사항을 예측하고 확장성 문제를 식별하는 데 도움이 됩니다.
데이터 관계를 식별합니다. 데이터 요소 사이의 관계를 탐색합니다. 데이터가 어떻게 연결되어 있는지 이해하면 한 테이블이나 문서의 변경 사항이 관련 데이터에 어떤 영향을 미칠 수 있는지 확인할 수 있습니다.
데이터 품질을 평가합니다. 완전성, 정확성, 일관성, 고유성과 같은 요소를 검사하여 데이터의 품질을 평가합니다. 데이터 무결성 및 쿼리 성능에 영향을 미칠 수 있는 데이터 이상, 누락된 값 또는 중복 레코드를 식별합니다. 이 단계는 데이터 정리 및 개선이 필요한 영역을 식별하는 데 도움이 됩니다.
데이터 분포를 캡처합니다. 각 열 내의 값 분포를 분석하여 데이터 패턴을 결정합니다. 빈번하고 희귀한 값, 이상치, 데이터 편향을 식별합니다. 쿼리 성능을 최적화하려면 향상된 성능을 제공하는 데 대체 키가 적절한지 분석하십시오.
데이터 성능 모니터링
데이터 성능 모니터링은 데이터 저장소의 효율성을 일관되게 추적하는 방식입니다. 여기에는 시스템 수준, 데이터베이스별 또는 타사 모니터링 솔루션에 맞게 조정된 도구를 사용하여 데이터 작업과 관련된 성능 메트릭을 수집하고 분석하는 작업이 포함됩니다. 효과적인 데이터 성능 모니터링을 통해 잠재적인 병목 현상을 사전에 식별하고 완화하여 데이터 관련 프로세스 및 작업의 효율성을 보장할 수 있습니다.
데이터 성능을 모니터링하려면 다음 전략을 고려하십시오.
데이터별 메트릭을 수집합니다. 데이터 성능과 직접적으로 관련된 주요 메트릭을 수집합니다. 이러한 메트릭에는 쿼리 응답 횟수와 데이터 처리량이 포함됩니다.
데이터 알림 을 설정합니다. 데이터 지표에 대한 알림을 특별히 설정합니다. 이러한 메트릭에서 사전 정의된 임계값 또는 이상 징후를 사용하여 알림을 트리거합니다. 경고를 사용하면 성능 메트릭이 허용 가능한 범위를 초과하거나 비정상적인 동작을 보일 때 알림을 받을 수 있습니다. 예를 들어 데이터베이스 쿼리가 예상보다 오래 걸리거나 데이터 처리량이 크게 떨어지는 경우입니다. 특수 모니터링 도구나 사용자 지정 스크립트를 사용하여 이러한 경고를 설정할 수 있습니다.
데이터 성능 문제를 진단합니다. 수집된 데이터 메트릭을 정기적으로 검토하여 데이터 작업의 잠재적인 성능 병목 현상이나 저하를 식별합니다. 시각화 도구나 대시보드는 이 프로세스에서 매우 중요하며 데이터 성능의 추세, 병목 현상 및 이상값을 강조하는 데 도움이 될 수 있습니다. 식별되면 이러한 문제의 근본 원인을 조사하고 적절한 해결 단계를 계획하십시오.
데이터 분할
분할에는 대규모 데이터 세트 또는 대용량 워크로드를 더 작고 관리 가능한 하위 세트로 나누는 작업이 포함됩니다. 분할은 워크로드를 분산하고 병렬 처리를 개선하여 데이터 성능 효율성을 향상시킵니다. 또한 특정 요구 사항과 쿼리 패턴을 기반으로 보다 효과적인 데이터 액세스를 보장합니다. 데이터를 수직 또는 수평으로 분할할 수 있습니다(샤딩이라고도 함). 예를 들어 Dataverse 탄력적 테이블을 사용하는 경우 분할 키가 무엇인지 고려합니다.
전략 | 정의 | 예 | 사용 사례 |
---|---|---|---|
수직 분할 | 각 분할에 대해 특정 열이나 필드를 선택하여 테이블을 더 작은 테이블로 나눕니다. 각 분할은 전체 데이터의 하위 집합을 나타냅니다. | A, B, C, D 열이 있는 테이블이 있는 경우 A, B 열이 있는 테이블 하나와 C, D 열이 있는 다른 테이블을 만들 수 있습니다. | - 테이블에는 많은 열이 포함되어 있지만 쿼리는 모든 열에 함께 액세스하지 않습니다. - 일부 열은 다른 열보다 크므로 분리하면 I/O 성능이 향상될 수 있습니다. - 다양한 데이터 부분에는 다양한 액세스 패턴이 있습니다. |
수평 분할 | 행 또는 값 범위를 기준으로 데이터를 분할합니다(샤딩이라고도 함). 각 파티션에는 유사한 특성을 가진 행의 하위 집합이 포함되어 있습니다. | 1~1000행이 포함된 테이블이 있는 경우 1~500행이 포함된 파티션 하나와 501~1000행이 포함된 다른 파티션을 만들 수 있습니다. | - 데이터 세트가 단일 위치나 서버에 비해 너무 큽니다. - 특정 범위나 필터를 기반으로 데이터에 액세스합니다. - 성능 향상을 위해 물리적 노드나 서버에 워크로드를 분산해야 합니다. |
데이터를 분할하려면 다음 단계를 고려하세요.
데이터 및 쿼리를 분석합니다. 데이터 및 쿼리 패턴을 분석하여 적절한 분할 또는 샤딩 전략을 파악합니다. 데이터의 성격, 액세스 패턴, 배포 요구 사항을 이해합니다.
키를 결정합니다. 파티션 또는 샤드 전체에 데이터를 배포하려면 분할 또는 샤딩 키를 선택하세요. 데이터 특성과 쿼리 요구 사항을 기반으로 키를 신중하게 선택하세요.
논리를 결정하십시오. 선택한 키를 기반으로 분할 또는 샤딩 논리를 결정합니다. 데이터를 범위로 나누거나, 해싱 알고리즘을 적용하거나, 다른 분할 기술을 사용하는 것을 고려해 보세요.
쿼리 최적화
쿼리를 최적화하면 쿼리를 구체화하여 자격을 갖춘 데이터와 반환되는 데이터가 줄어듭니다. 이러한 조정은 데이터 검색의 효율성과 속도를 향상시킵니다. 결과적으로 데이터베이스의 작업 부하가 줄어들고 리소스가 더 효율적으로 작동하며 사용자는 더 원활한 상호 작용을 즐길 수 있습니다.
데이터베이스 쿼리를 최적화하려면 다음 전략을 고려하십시오.
쿼리를 다시 작성합니다. 복잡한 쿼리를 검토하고 분석하여 다시 작성할 수 있는 기회를 식별합니다. 쿼리 논리를 재구성하거나, 중복 작업을 제거하거나, 쿼리 구문을 단순화하는 것을 고려하세요.
N+1 쿼리 문제를 피하세요. 관련 데이터를 효율적으로 검색하기 위해 조인 및 일괄 가져오기를 사용하여 데이터베이스 왕복 횟수를 최소화합니다.
조인을 재정렬합니다. 각 조인 작업의 행 수를 최소화하려면 조인 순서를 다시 정렬하는 것을 평가하고 고려하십시오. 테이블을 조인하는 순서는 쿼리 성능에 영향을 미칠 수 있습니다.
쿼리를 캐싱합니다. 자주 실행하는 쿼리의 결과를 저장하여 쉽게 재사용할 수 있습니다. 쿼리 캐싱을 사용하면 동일한 쿼리를 반복적으로 실행할 필요가 없으며 쿼리 처리 오버헤드가 줄어듭니다.
모니터링 및 조정. 런타임, 리소스 활용도, 쿼리 처리량 등의 쿼리 성능 메트릭을 모니터링합니다. 데이터베이스 프로파일링 도구와 모니터링 기능을 사용하여 성능이 낮은 쿼리를 식별하세요. 해당 정보를 사용하여 쿼리 성능을 최적화하세요.
데이터 보관 및 삭제
보관 및 제거는 데이터 저장을 간소화하는 전략입니다. 보관은 오래되고 자주 액세스하지 않는 데이터를 보다 비용 효율적인 스토리지로 재배치합니다. 데이터를 제거하면 중복 데이터가 영구적으로 제거됩니다. 두 방법 모두 데이터 볼륨을 줄이고, 데이터 액세스 속도를 높이며, 백업 및 복구 시간을 단축하여 성능 효율성에 기여합니다.
- 데이터 볼륨 감소: 데이터가 적으면 처리 시간이 빨라지고 사용자 요청에 신속하게 대응할 수 있습니다.
- 데이터 접근 속도 향상: 정리된 데이터 세트를 통해 더 빠른 쿼리와 데이터 검색이 가능해져 시스템 반응성이 최적화됩니다.
- 백업 및 복구 시간 단축: 데이터 세트가 작을수록 백업 및 복구 프로세스가 가속화되어 다운타임이 최소화되고 일관된 성능이 보장됩니다.
보관 및 제거는 데이터 기반 시스템에서 최고의 성능 효율성을 유지하는 데 중요한 역할을 합니다.
스토리지 부하 최적화
스토리지 부하 최적화는 스토리지 시스템에 대한 요청을 간소화하는 것을 의미합니다. 불필요한 요청을 제거하고, 데이터 검색을 향상시키며, 스토리지 시스템의 과부하를 방지하는 데 도움이 됩니다. 스토리지 로드를 최적화하면 스토리지 시스템이 합법적인 요청에 계속 응답하고 최고 성능을 유지할 수 있습니다. 데이터 저장소의 처리 부담을 줄이기 위한 전략을 구현합니다. 데이터 저장소 로드를 최적화하려면 다음과 같은 전략을 고려합니다.
캐싱 사용
캐싱은 일반적으로 액세스하는 데이터를 빠르게 액세스하는 스토리지 영역에 저장하므로 기본 원본에서 데이터를 가져오는 것보다 더 빠르게 데이터를 검색할 수 있습니다. 이 기술은 액세스 시간을 줄이고 반복적인 데이터 가져오기를 방지하여 데이터 성능을 향상시킵니다. 캐싱은 특히 자주 액세스하는 데이터의 경우 읽기 속도와 사용자 응답 횟수를 향상시킵니다. 이 방법은 정적 데이터나 거의 변경되지 않는 데이터에 가장 효과적입니다.
최적의 캐싱 효율성을 보장하려면 만료 정책, 제거 전략, 캐시 크기 관리 등의 요소를 고려하세요. 최적의 성능을 위한 TTL(Time to Live)과 같은 조정 설정. 캐시를 사용하여 스토리지 로드를 최적화하려면 다음 전략을 고려하십시오.
메모리 내 캐싱: 메모리 내 캐싱을 수행하여 자주 액세스하는 데이터를 메모리에 저장하여 빠르게 검색합니다. 데이터베이스에서 계산하거나 검색하는 데 비용이 많이 드는 애플리케이션 데이터에 이 기술을 사용할 수 있습니다. 인메모리 캐싱은 자주 읽지만 자주 변경되지 않는 데이터에 유용합니다. 예를 들어 클라우드 흐름의 변수나 캔버스 앱의 컬렉션을 사용하여 데이터를 캐시할 수 있습니다.
데이터베이스 쿼리 캐싱: 이 기술을 사용하면 동일한 쿼리를 여러 번 실행하는 것을 방지하기 위해 데이터베이스 쿼리의 결과를 캐시할 수 있습니다. 데이터베이스 쿼리 캐싱은 복잡하고 시간이 많이 걸리는 데이터베이스 쿼리에 유용합니다. 쿼리 결과를 캐시하면 동일한 쿼리에 대한 후속 요청이 빠르게 반환됩니다. 또한 데이터를 사전 필터링하여 쿼리와 관련된 데이터의 범위를 좁힐 수 있는 경우 서버 측 보기를 사용하는 것도 고려해 보세요.
콘텐츠 전송 네트워크 캐싱: 이 기술을 사용하면 분산 네트워크 서버에 웹 콘텐츠를 캐싱하여 지연 시간을 줄이고 콘텐츠 전송을 개선할 수 있습니다. 콘텐츠 배달 네트워크 캐싱은 이미지, CSS 파일 및 JavaScript 파일과 같은 정적 콘텐츠에 효과적입니다. 콘텐츠 배달 네트워크는 전 세계 여러 위치에 콘텐츠 사본을 저장하므로 사용자는 지리적으로 가까운 서버에서 콘텐츠에 액세스할 수 있습니다.
데이터 업데이트 최적화
데이터 업데이트 최적화에는 성능을 보장하기 위해 수행된 데이터 업데이트를 평가하는 작업이 포함됩니다. 업데이트는 트리거 불필요한 작업을 수행하고 잠금 충돌을 일으킬 수 있으므로 다른 작업보다 성능에 더 많은 영향을 미칠 수 있습니다.
데이터 업데이트를 최적화하는 방법을 평가하려면 다음을 고려하세요.
데이터 변경. 실제 변경이 발생하지 않은 경우 작업을 최소화하기 위해 데이터 또는 필터의 사전 이미지를 사용하도록 자동화를 최적화합니다. 수정되지 않은 데이터에 대한 자동화를 트리거하지 마세요.
자동화. 데이터 변경 사항에 따라 업데이트가 트리거되는 시기와 방법을 평가하고 필터를 포함하도록 트리거를 최적화합니다. 예를 들어, 트리거는 데이터 원본의 특정 필드가 수정된 경우에만 자동화됩니다. 점진적으로 트리거 자동화를 여러 번 수행하는 업데이트를 평가합니다. 대신 모든 처리를 처리하는 사용자 지정 작업을 만들 수 있는지 고려하세요. 예를 들어 주문이 배송되고 배송 날짜와 추적 번호가 별도로 업데이트되는 경우 사용자 지정 "ShipOrder" 작업에서 두 항목이 동시에 업데이트될 수 있습니다.
교착 상태. 동일한 데이터를 서로 다른 순서로 업데이트하는 여러 흐름으로 인해 문제를 일으킬 수 있는 느린 업데이트 작업을 평가합니다. 이러한 비효율성은 잠금 충돌이나 잠재적인 교착 상태로 이어져 불필요한 재작업을 초래할 수 있습니다. 경합을 최소화하려면 동일한 순서로 다양한 리소스를 업데이트하세요.
대량 업데이트. 테이블의 여러 행에 대해 작업을 실행하는 경우 대량 작업을 사용하는 것이 좋습니다.
데이터 이동 및 처리 최적화
데이터 이동 및 처리 최적화에는 데이터 추출, 변환, 로드 및 처리와 관련된 작업의 효율성과 성능이 향상됩니다. 데이터 이동 및 처리를 최적화하려면 다음과 같은 주요 측면을 고려하세요.
추출, 변환, 로드(ETL) 최적화: ETL 프로세스를 최적화하여 처리 시간을 최소화합니다. 추출 프로세스를 간소화하고 효율적인 변환 알고리즘을 구현하며 로딩 프로세스를 최적화할 수 있습니다. 각 단계를 효율적으로 만들면 전체 작업 흐름이 최적화됩니다.
병렬 처리: 병렬 처리 기술을 사용하여 성능을 개선합니다. 데이터 처리 작업을 여러 스레드나 노드에 분산시키면 워크로드를 동시에 나누어 처리할 수 있어 처리 속도가 빨라진다.
일괄 처리: 반복되는 작업으로 인해 발생하는 오버헤드를 줄이기 위해 유사한 작업을 그룹화합니다. 여러 작업을 일괄 처리하여 전체 처리 시간을 줄입니다.
데이터 근접성을 위한 설계
데이터 근접성은 데이터에 가장 자주 액세스하는 사용자나 서비스에 더 가깝게 데이터를 전략적으로 배치하는 것을 의미합니다. 데이터와 사용자 사이의 물리적 또는 논리적 거리를 줄이면 데이터 액세스 속도가 빨라지고 응답성이 향상됩니다. 닫기 근접성에 대한 디자인을 최적화하려면 다음 전략을 고려하십시오.
데이터 액세스 패턴 평가: 워크로드의 액세스 패턴과 자주 액세스되는 데이터를 평가합니다. 이 분석은 최대 이익을 위해 데이터를 어디에 배치할지 결정하는 데 도움이 될 수 있습니다.
데이터 이전을 지원하는 솔루션을 선택하세요: 변화하는 액세스 패턴에 따라 동적 데이터 이전을 제공하는 솔루션을 고려하여 최적의 데이터 위치를 확보하세요.
데이터 동기화를 지원하는 솔루션을 선택하세요: 분산된 사용자 기반을 대상으로 서비스를 제공하는 경우 다양한 지역에서 데이터 동기화를 지원하는 솔루션을 선택하여 사용자와 가까운 곳에서 데이터 복제본을 사용할 수 있도록 하세요.
트레이드오프: 기본 데이터가 자주 변경되는 경우 캐시 무효화 메커니즘을 구현하여 캐시된 데이터가 최신 상태로 유지되도록 합니다.
Power Platform 간편 사용
데이터 성능 모니터링: 데이터 성능을 모니터링하려면 Azure Monitor 를 사용하여 인프라 메트릭, 로그 및 애플리케이션 데이터를 수집하고 분석하는 것을 고려하세요. Monitor를 Application Insights와 같은 다른 서비스와 통합할 수 있습니다. Application Insights는 애플리케이션 성능 모니터링을 제공하고 많은 플랫폼을 지원합니다.
Application Insights는 사용량 및 성능 데이터를 수집합니다. Log Analytics를 사용하여 해당 데이터를 Azure 리소스 전체의 구성 및 성능 데이터와 연관시킬 수 있습니다. Dataverse용 Application Insights 데이터 스트림은 현재 Dataverse API 수신 호출, Dataverse 플러그인 실행 호출 및 Dataverse SDK 호출과 관련된 성능 데이터를 제공합니다.
캔버스 앱에서 쿼리 데이터 패턴을 최적화하세요: 따라와 문서화된 지침과 제안을 참조하세요. See Power Apps의 최적화된 쿼리 데이터 패턴을 참조하세요.
Dataverse: 따라와 문서화된 모범 사례 및 지침을 사용하여 사용자 지정, 확장 또는 통합하는 방법을 최적화하세요. Microsoft Dataverse 사용 시 모범 사례 및 지침을 참조하세요.
데이터베이스 쿼리 및 인덱스 성능 최적화: Azure SQL Database의 쿼리 성능 통찰력 기능을 사용하여 쿼리, 테이블 및 데이터베이스를 최적화합니다. 또한 이 기능을 사용하여 쿼리 성능 문제를 식별하고 해결할 수도 있습니다.
관계형 데이터베이스의 경우 색인 디자인 지침, SQL Server 색인 지침 및 Azure Cosmos DB 색인 지침을 따르세요. SQL 데이터베이스를 사용하여 쿼리에 대한 자동 조정을 수행하여 성능을 향상시킵니다.
SQL 데이터베이스의 경우 정기적으로 인덱스를 재구성하거나 재구축해야 합니다. 느린 쿼리를 식별하고 조정하여 성능을 향상시킵니다. 많은 데이터베이스 엔진에는 쿼리 조정 기능이 있습니다. 자세한 내용은 쿼리 성능 모범 사례를 참조하세요.
Azure Cosmos DB에는 모든 항목의 모든 속성을 인덱싱하고 모든 문자열 또는 숫자에 대해 범위 인덱스를 적용하는 기본 인덱싱 정책이 있습니다. 이 정책은 효율적인 쿼리 성능을 제공하며, 인덱스를 미리 관리할 필요가 없습니다.
저장소 부하 최적화: 많은 Azure 데이터베이스 서비스가 읽기 복제본을 지원합니다. 읽기 복제본의 가용성 및 구성은 Azure 데이터베이스 서비스에 따라 다릅니다. 자세한 내용과 옵션을 이해하려면 각 서비스의 공식 설명서를 참조하세요.
관련 정보
- 성능 생성 개요 Power Apps
- 애플리케이션에 맞는 Azure 데이터 저장소를 선택하세요
- 조건을 추가하여 트리거 흐름을 사용자 정의하세요. Power Automate
- Dataverse 탄력있는 테이블
성능 효율성 체크리스트
전체 권장 사항 세트를 참조하세요.