dbt 모델 성능 향상

문주은·2024년 11월 25일

1. 실행 시간 측정

$ dbt run --models {model_name}

...
01:51:28  1 of 1 START sql incremental model PUBLIC.{table_nm} ............ [RUN]
01:51:32  1 of 1 OK created sql incremental model PUBLIC.{table_nm} ...... [SUCCESS 217 in 4.55s]
01:51:32  
01:51:32  Finished running 1 incremental model in 0 hours 0 minutes and 11.47 seconds (11.47s).
  • 실행 시간 : 4.55s
  • 전체 시간 : 11.47s
  • 컴파일 시간 : 11.47(전체) - 4.55(실행) = 6.92s

2. 리소스 사용량 모니터링

데이터 웨어하우스에서 쿼리 성능 및 리소스 사용량을 직접 모니터링

  • Snowflake에서 모니터링 방법
SELECT 
    query_id,
    query_text,
    query_type,
    total_elapsed_time/1000 AS query_execution_time_seconds,
    execution_time,
    partitions_scanned,
    partitions_total,
    start_time
FROM snowflake.account_usage.query_history Q
WHERE 
    TO_DATE(Q.START_TIME) >  DATEADD(day,-1,TO_DATE(CURRENT_TIMESTAMP()))
    and
    database_name='{db_nm}' 
    and 
    query_text like '%{table_nm}%' 
ORDER BY start_time;

3. 모델 크기 및 데이터 변화 분석

데이터 양과 변경 빈도를 확인하여 적절한 materialized 설정을 선택

  • 테이블 크기가 크거나, 변경 데이터가 많다면 incremental 전략이 적합
  • 작은 테이블이고, 변경이 적다면 materialized='table'이 더 효율적
SELECT 
	table_name, 
    row_count,
    bytes/1024/1024 as size_mb
FROM information_schema.tables
WHERE table_name = '{model_name}';
profile
Data Engineer

0개의 댓글