Azure Databricks 최적화 권장 사항

느린 쿼리와 높은 컴퓨팅 비용은 보통 몇 가지 근본 원인에서 비롯됩니다: 쿼리가 필요 이상으로 많은 데이터를 읽거나, 노드 간 데이터를 섞거나, 잘못된 쿼리 계획을 선택하거나, 변경되지 않은 파일을 다시 작성하는 경우입니다. Azure Databricks는 대규모 ETL 처리부터 임시 인터랙티브 쿼리에 이르기까지 다양한 워크로드에서 이러한 원인의 상당수에 자동으로 대응합니다. 다른 최적화는 특정 작업량에 맞게 켜거나 조정할 때만 적용됩니다.

이 페이지는 대부분의 워크로드에 대한 추천으로 시작하고, 자동으로 실행되는지 설정이 필요한지 기준으로 최적화를 그룹화하며, 각 최적화가 해결하는 문제를 설명합니다. 대부분의 Databricks 런타임 최적화는 Azure Databricks 테이블의 기본 형식인 Delta Lake를 필요로 합니다.

이 추천사항들부터 시작하세요

이러한 선택들은 대부분의 작업 부하에서 가장 큰 성능 향상을 제공합니다. 또한 이 페이지의 많은 자동 최적화 기능이 최대한의 효과를 발휘하도록 도와줍니다.

  • 테이블 레이아웃에는 리퀴드 클러스터링을 사용하세요.리퀴드 클러스터링은 테이블 파티셔닝과 ZORDER 인덱싱을 대체합니다. 자주 필터링하는 열별로 데이터를 정리해 데이터 스키핑과 동적 파일 가지치기를 개선합니다.
  • Unity 카탈로그 관리형 테이블을 사용하세요.예측 최적화는 관리형 테이블을 자동으로 유지합니다. Delta Lake 및 Apache Iceberg에 대한 Unity 카탈로그 관리 테이블을 참조하세요.
  • Photon 지원 컴퓨팅을 사용하세요. 예측 I/O에는 Photon이 필요하며, UPDATE, DELETE, MERGE 문의 동적 파일 가지치기에도 Photon이 필요합니다. Photon이란?을 참조하세요.
  • 삭제 벡터를 활성화하세요. 예측 I/O는 업데이트, 삭제, 병합 시 전체 파일을 다시 쓰지 않도록 삭제 벡터를 사용하며, 행 단위 동시성을 위해 이를 요구합니다. Delta Lake 테이블의 경우, 삭제 벡터를 명시적으로 활성화해야 합니다. Databricks의 삭제 벡터를 참조하세요.
  • 최신 Databricks 런타임을 사용하세요. 새로운 버전에는 최신 성능 향상이 포함되어 있습니다. 일부 최적화는 최소 Databricks 런타임 버전 또는 Photon이 활성화된 컴퓨팅을 요구합니다. 각 페이지에서 요구 사항을 확인하세요.

자동 최적화

이 최적화들은 기본적으로 켜져 있습니다. 이들을 활성화할 필요는 없지만, Photon 사용이나 테이블 통계 유지와 같은 특정 조건을 충족할 때 더 큰 이점을 제공하는 경우도 있습니다.

  • 디스크 캐싱: 동일한 원격 Parquet과 Delta Lake 데이터 파일을 반복적으로 읽는 쿼리를 가속화합니다. Azure Databricks는 파일의 복사본을 컴퓨트 노드의 로컬 저장소에 캐시하여 이후 읽기 작업이 로컬에서 수행되도록 합니다. Azure Databricks는 이를 지원하는 워커 인스턴스 유형에서 자동으로 활성화합니다.
  • 동적 파일 가지치기: Delta Lake 테이블 조인에서 일치하는 행을 포함할 수 없는 파일을 건너뜁니다. MERGE, UPDATE, 그리고 DELETE 문은 동적 파일 가지치기를 위해 Photon 지원 컴퓨팅이 필요합니다.
  • 로우 셔플 병합: 각 파일에서 몇 개의 행을 업데이트하거나 삭제하는 MERGE 작업을 가속화합니다. 낮은 셔플 병합 프로세스는 수정되지 않은 행을 셔플 없이 처리하며 기존 데이터 레이아웃을 유지합니다.
  • 적응형 쿼리 실행: 쿼리가 실행되는 동안 실제 데이터 크기에 따라 쿼리 계획을 재최적화합니다. 이 방법은 느린 조인 전략, 너무 많은 작은 작업, 부정확한 추정에서 비롯되는 편향된 작업을 해결합니다.
  • 예측 입출력 기능: 데이터 스캔 속도를 높이고, Photon 지원 컴퓨팅에서 업데이트, 삭제, 병합 시 재작성되는 데이터를 줄입니다.
  • 비용 기반 최적화기: 테이블과 컬럼 통계를 사용하여 특히 다중 조인이 있는 쿼리의 효율적인 쿼리 계획을 선택합니다. 비용 기반 최적화기는 통계에 의존하므로 이를 수집하고 최신 상태로 유지하세요.
  • 예측 최적화: Unity Catalog 관리 테이블에서 VACUUM, ANALYZE, OPTIMIZE을(를) 자동으로 실행하므로 테이블 유지 관리를 예약할 필요가 없습니다. 또한 비용 기반 최적화 도구가 사용하는 통계도 최신 상태로 유지됩니다. 귀하의 계정에서 이 기능이 활성화되어 있는지 확인하려면 '예측 최적화가 활성화되어 있는지 확인하기'를 참고하세요.

구성한 최적화

이러한 최적화를 사용하려면 해당 기능을 켜거나 조정하거나 테이블 구성을 변경해야 합니다. 워크로드에 기본 설정이 포함하지 않는 동작이 필요할 때 그것들을 사용하세요.

  • 아카이브 지원: 클라우드 라이프사이클 정책이 오래된 테이블 파일을 아카이브 스토리지 계층으로 옮겨 스토리지 비용을 절감하는 경우 사용됩니다. 아카이브 지원은 Azure Databricks가 지정된 기간을 넘은 파일은 무시하도록 지시하여, 라이프사이클 정책이 최근 데이터만 읽는 쿼리를 깨뜨리지 않도록 합니다. 이 기능은 공개 미리 보기로 제공됩니다.
  • 범위 조인: 조인이 구간 내 점(point-in-interval) 또는 구간 겹침 조건을 사용할 때 사용됩니다. Databricks SQL은 범위 조인을 자동으로 최적화합니다. 다른 컴퓨트에서는 조인 힌트나 세션 구성으로 범위 조인을 조정합니다.
  • 격리 레벨 및 쓰기 충돌: 동일 테이블에 동시 쓰기가 충돌하거나, 워크로드가 기본 WriteSerializable 격리 수준보다 더 엄격한 보장이 필요할 때 사용합니다. 직렬화 가능한 격리는 동시 쓰기 처리량을 감소시킵니다. 행 수준의 동시성은 요구사항을 충족하는 테이블에 대한 동시 쓰기 간의 많은 충돌을 자동으로 해결합니다.
  • 전체 텍스트 검색 색인: 쿼리가 텍스트 열에서 search 또는 isearch 함수를 사용해 부분 문자열이나 단어를 검색할 때 사용하세요. 인덱스는 일치하는 행을 포함할 수 없는 파일을 건너뜁니다. 이 기능은 베타 버전입니다.

참고

블룸 필터 인덱스는 사용이 권장되지 않는 데이터 건너뛰기 기능입니다. 이는 쓰기 오버헤드가 추가되고 조정이 어렵습니다. 테이블에 이런 인덱스가 있다면, Bloom 필터 인덱스(폐기됨)을 참고해 교체하고 제거하세요.

기타 성능 기능

느리거나 비용이 많이 드는 작업 부하를 진단하세요

작업 속도가 예상보다 느리거나 비용이 많이 들고 이유를 모른다면, 설정을 바꾸기 전에 Spark UI를 이용해 병목 현상을 찾아보세요. Spark UI를 이용한 비용 및 성능 문제 진단을 참조하세요.