이 게시물은 대규모 Databricks AI/BI 대시보드 성능 최적화에 대한 2부작 시리즈의 두 번째 파트입니다.
이전 게시물에서는 레이아웃, 필터, 매개변수, 캐싱이 클릭할 때마다 시스템에서 수행하는 작업량을 어떻게 결정하는지에 대해 집중적으로 살펴보았습니다. 이러한 최적화만으로도 대시보드가 빠르다고 느껴지게 하는 데 충분합니다.
이번 게시물에서는 사용량이 증가해도 빠른 속도를 유지하는 플랫폼 기반에 초점을 맞춥니다. 안정적이고 예측 가능한 성능 을 달성하기 위해 웨어하우스 선택 및 크기 조정, 데이터 모델링 및 스키마 선택, 파일 레이아웃 및 클러스터링, 그리고 재계산 대신 구체화를 사용해야 하는 경우에 대해 살펴보겠습니다.
대시보드 형태(페이지, 쿼리 믹스, 사용자 버스티니스)를 DBSQL 웨어하우스 유형 및 크기 조정에 맞춰 시스템이 큐잉 없이 작업을 신속하게 수용하도록 하세요.
보이는 위젯이 함께 제출되기 때문에 대시보드는 자연스럽게 일시적인 동시성 스파이크를 생성합니다. 웨어하우스가 버스트를 감당하지 못하면 큐잉(Peak Queued Queries > 0)이 발생하고, 특히 피크 시간대에 타일 로드 시간이 일관되지 않게 됩니다.
자세한 내용은 다음을 참조하세요. https://docs.databricks.com/aws/en/compute/sql-warehouse/warehouse-behavior
잘 설계된 데이터 모델은 AI/BI 대시보드의 핵심적인 성능 기능입니다. 스타 스키마는 BI 쿼리 작성 및 최적화 방식과 직접적으로 일치하므로 인터랙티브 분석에 가장 효과적이고 예측 가능한 모델링 패턴입니다.
스타 스키마에서 중앙 팩트 테이블은 측정 가능한 이벤트(판매, 트랜잭션, 클릭)를 포함하며 주변 차원 테이블(날짜, 고객, 제품, 지역)에 조인됩니다. 이 구조는 조인 복잡성을 최소화하고 데이터 중복을 줄이며 간단하고 안정적인 쿼리 패턴으로 효율적인 집계를 가능하게 합니다. 결과적으로 대시보드는 더 적은 조인을 실행하고 더 적은 데이터를 스캔하며 캐싱 및 쿼리 최적화의 이점을 더 일관되게 얻을 수 있습니다.
조인 키 데이터 유형은 중요하지만 종종 간과되는 세부 사항입니다. 차원 테이블과 팩트 테이블 조인에는 문자열이 아닌 정수 기반 대리 키를 사용해야 합니다. 정수 조인은 훨씬 더 빠르고, 메모리를 덜 사용하며, 캐시 효율성을 개선하고, Photon이 고도로 최적화된 벡터화된 경로를 사용하여 조인을 실행할 수 있도록 합니다. 문자열 기반 조인은 CPU 비용을 증가시키며 데이터와 동시성이 증가함에 따라 숨겨진 병목 현상이 될 수 있습니다.
Databricks에서 이 패턴은 Lakehouse 아키텍처와 자연스럽게 어울립니다. 골드 레이어는 Unity Catalog 테이블로 저장된 팩트 및 차원으로 모델링되어야 하며, AI/BI 대시보드, 메트릭 뷰 및 구체화된 뷰를 위한 관리되고 재사용 가능한 시맨틱 기반을 제공해야 합니다.
핵심은 간단합니다. BI 쿼리가 실제로 실행되는 방식을 모델링하세요. 골드 레이어에서 정수 조인 키를 사용하는 스타 스키마는 더 간단한 SQL, 더 빠른 조인, 대규모 환경에서 더 예측 가능한 성능을 제공합니다.
대시보드가 쿼리당 훨씬 적은 데이터를 읽도록 데이터 레이아웃을 설계한 다음, 엔진이 Parquet 통계 및 선택적 읽기를 활용하도록 하세요.
Databricks SQL은 다음과 같은 경우 가장 빠릅니다.
따라서 가장 큰 두 가지 이점은 파일을 최적의 크기로 압축하고,
조건자가 파일을 정리할 수 있도록 데이터를 클러스터링하는 것입니다.
자세한 내용은 여기에서 확인할 수 있습니다: https://www.databricks.com/discover/pages/optimize-data-workloads-guide
전형적인 안티패턴: WHERE customer_id = ? 와 같은 대시보드 필터 선택적인 것처럼 보이지만, 데이터가 클러스터링되어 있지 않으면 일치하는 행이 여기저기 흩어져 있어 엔진이 여전히 방대한 양의 파일을 검사하게 됩니다.
결과: 불안정한 인덱스나 수동 튜닝 없이 동일한 인사이트에 대해 더 적은 파일에 액세스하고, 더 많은 블록을 건너뛰며, 월클락(wall-clock) 시간이 단축됩니다.
자세한 내용은 다음을 참조하세요.
최적화 #7: 데이터 모델링 모범 사례 적용에서는 명확하게 정의된 팩트, 차원, KPI를 사용하는 스타 스키마의 중요성에 중점을 두었습니다. 메트릭 뷰는 Databricks AI/BI에서 이러한 원칙의 직접적인 연장선입니다.
메트릭 뷰 는 BI 시맨틱을 중심으로 설계되었습니다. 즉, 측정값과 차원으로 구성되어 KPI 모델링을 위한 자연스러운 추상화를 제공합니다. 이를 통해 팀은 비즈니스 메트릭을 한 번 정의하고 여러 대시보드, 에이전트 및 기타 클라이언트 도구에서 동일한 KPI를 일관되게 재사용할 수 있습니다. 이를 통해 중복이 감소하고 KPI 드리프트가 방지되며, 도입이 확대되면서 분석 로직의 일관성이 유지됩니다.
메트릭 뷰 구체화를 사용하면 Databricks가 자주 사용되는 집계를 자동으로 사전 계산하고 유지 관리합니다. 이러한 집계는 증분식으로 업데이트되며, 쿼리 시 옵티마이저는 대시보드 쿼리를 가장 잘 일치하는 사전 계산된 결과로 투명하게 다시 작성합니다. 결과적으로 대시보드 쿼리는 팀이 별도의 집계 테이블이나 사용자 지정 파이프라인을 관리할 필요 없이 상호 작용당 훨씬 적은 데이터를 스캔합니다.
메트릭 뷰를 사용하지 않는 경우, Materialized View를 사용하여 동일한 접근 방식을 적용할 수 있습니다. 예를 들어, 대규모 팩트 테이블의 집계 버전을 미리 계산하여 저장하면 대시보드에서 훨씬 작고 최적화된 데이터 세트를 쿼리할 수 있습니다. 이를 통해 스캔하는 데이터 양을 줄이고 사용자 상호작용마다 비용이 많이 드는 집계를 반복적으로 재계산하지 않아도 되므로 성능이 크게 향상됩니다.
이 모든 기술은 동일한 것을 최적화합니다. 바로 더 적은 데이터를 스캔하는 것입니다. KPI를 한 번 정의하고 Metric Views 또는 Materialized Views로 자주 사용되는 집계를 미리 계산하면, 대시보드는 대용량 팩트 테이블을 반복적으로 집계할 필요가 없어집니다. 스캔되는 바이트 수가 적을수록 쿼리 속도가 빨라지고, 지연 시간을 더 쉽게 예측할 수 있으며, 대규모 환경에서 더 나은 성능을 얻을 수 있습니다.
자세한 내용은 다음을 참조하세요.
데이터 유형은 모든 대시보어 쿼리에 대해 Databricks SQL이 읽고, 이동하고, 처리해야 하는 데이터의 양에 직접적인 영향을 미칩니다. 완벽한 SQL과 캐싱을 사용하더라도 비효율적인 데이터 유형은 IO, 메모리 압박, CPU 비용을 조용히 증가시켜 타일 속도를 저하시키고 동시성을 감소시킵니다.
내부적으로 Databricks SQL은 컬럼 기반 Parquet 파일에서 작동합니다. 더 작고 잘 선택된 데이터 유형은 다음을 의미합니다.
몇 가지 방법이 가장 중요합니다.
BI 워크로드에서 이러한 선택의 영향은 빠르게 누적됩니다. 대시보드 페이지는 각각 수백만 개의 행을 스캔하는 수십 개의 쿼리를 실행할 수 있습니다. 좁고 유형이 잘 지정된 열은 스캔 시간을 줄이고 캐시 적중률을 개선하며 Photon이 최고 효율로 작동할 수 있도록 합니다.
경험상, 스키마 설계를 성능 기능으로 취급하세요. 레이크하우스에서 데이터 유형을 한 번만 최적화하면 현재 및 미래의 모든 대시보드가 자동으로 이점을 얻습니다.
열 가지 모범 사례 전체의 주제는 간단합니다. 매번 대시보드 상호 작용의 전체 비용을 지불하지 마세요. 뷰당 시스템 의 작업량을 줄이고(팬아웃 및 스캔 데이터 감소), 수행하는 작업은 재사용할 수 있도록 만드세요(공유 데이터세트, 결정적 쿼리, 캐시, 사전 계산된 집계). 이러한 요소들이 맞아떨어지면 동시성 하에서 성능이 안정화되고 비용 예측이 가능해집니다.
가장 많이 사용하는 대시보드에 대해 다음 질문에 "예"라고 답할 수 있어야 합니다.
실제 사용률이 높은 대시보드 하나를 선택하여 빠른 기준(첫 페인트, 상호 작용 지연 시간, 최대 대기 쿼리 수, 스필, 캐시 적중률)을 실행하고, 가장 효과가 큰 몇 가지 변경 사항을 적용한 후 다시 측정하세요. 이를 꾸준히 실천하면 데이터와 사용자가 증가해도 '가끔 빠른' AI/BI에서 안정적으로 빠른 AI/BI로 전환됩니다.
(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)
