ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Bigquery] Physical Storage란
    DB/Bigquery 2024. 2. 13. 22:40

    개요

    2023년 7월에 빅쿼리에서 physical storage라는 저장 방식을 추가하였습니다. physical storage를 사용하면 기존에 logical storage보다 저장 비용을 크게 절감시킬 수 있습니다.

    logical storage는 저장시키고자 하는 데이터의 크기를 거의 그대로 저장하는 반면 physical storage는 데이터를 압축해서 가지고 있는 방식으로 보입니다.

    physical storage와 logical storage 비용은 다음과 같습니다.

    physical storage가 활성/비활성 데이터 저장 비용이 기존 logical storage보다 비싸고 Time travel & fail-safe 스토리지 용량에 대한 비용이 청구가 되므로 사용을 하려면 다음과 같은 확인 사항이 필요합니다.

    • time travel: 시간 이동 스토리지(데이터 삭제 또는 변경)

    logical storage, physical storage 비용 확인하기

    DECLARE active_logical_gib_price FLOAT64 DEFAULT 0.02;
    DECLARE long_term_logical_gib_price FLOAT64 DEFAULT 0.01;
    DECLARE active_physical_gib_price FLOAT64 DEFAULT 0.04;
    DECLARE long_term_physical_gib_price FLOAT64 DEFAULT 0.02;
    
    WITH
     storage_sizes AS (
       SELECT
         table_schema AS dataset_name,
         -- Logical
         SUM(IF(deleted=false, active_logical_bytes, 0)) / power(1024, 3) AS active_logical_gib,
         SUM(IF(deleted=false, long_term_logical_bytes, 0)) / power(1024, 3) AS long_term_logical_gib,
         -- Physical
         SUM(active_physical_bytes) / power(1024, 3) AS active_physical_gib,
         SUM(active_physical_bytes - time_travel_physical_bytes) / power(1024, 3) AS active_no_tt_physical_gib,
         SUM(long_term_physical_bytes) / power(1024, 3) AS long_term_physical_gib,
         -- Restorable previously deleted physical
         SUM(time_travel_physical_bytes) / power(1024, 3) AS time_travel_physical_gib,
         SUM(fail_safe_physical_bytes) / power(1024, 3) AS fail_safe_physical_gib,
       FROM
         `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_PROJECT
       WHERE total_physical_bytes > 0
         -- Base the forecast on base tables only for highest precision results
         AND table_type  = 'BASE TABLE'
         GROUP BY 1
     )
    SELECT
      dataset_name,
      -- Logical
      ROUND(active_logical_gib, 2) AS active_logical_gib,
      ROUND(long_term_logical_gib, 2) AS long_term_logical_gib,
      -- Physical
      ROUND(active_physical_gib, 2) AS active_physical_gib,
      ROUND(long_term_physical_gib, 2) AS long_term_physical_gib,
      ROUND(time_travel_physical_gib, 2) AS time_travel_physical_gib,
      ROUND(fail_safe_physical_gib, 2) AS fail_safe_physical_gib,
      -- Compression ratio
      ROUND(SAFE_DIVIDE(active_logical_gib, active_no_tt_physical_gib), 2) AS active_compression_ratio,
      ROUND(SAFE_DIVIDE(long_term_logical_gib, long_term_physical_gib), 2) AS long_term_compression_ratio,
      -- Forecast costs logical
      ROUND(active_logical_gib * active_logical_gib_price, 2) AS forecast_active_logical_cost,
      ROUND(long_term_logical_gib * long_term_logical_gib_price, 2) AS forecast_long_term_logical_cost,
      -- Forecast costs physical
      ROUND((active_no_tt_physical_gib + time_travel_physical_gib + fail_safe_physical_gib) * active_physical_gib_price, 2) AS forecast_active_physical_cost,
      ROUND(long_term_physical_gib * long_term_physical_gib_price, 2) AS forecast_long_term_physical_cost,
      -- Forecast costs total
      ROUND(((active_logical_gib * active_logical_gib_price) + (long_term_logical_gib * long_term_logical_gib_price)) -
         (((active_no_tt_physical_gib + time_travel_physical_gib + fail_safe_physical_gib) * active_physical_gib_price) + (long_term_physical_gib * long_term_physical_gib_price)), 2) AS forecast_total_cost_difference
    FROM
      storage_sizes
    ORDER BY
      (forecast_active_logical_cost + forecast_active_physical_cost) DESC;

    위 쿼리를 실행하면 다음과 같이 확인할 수 있습니다.

    여기서 forecast_total_cost_difference 값이 양수라면 physical storage로 변환했을 때, 비용 절감 효과를 얻을 수 있습니다.

    physical storage로 변환하기

    변환은 쿼리도 존재하지만 빅쿼리 콘솔에서 간편하게 변경할 수 있습니다. 데이터셋의 세부정보 수정을 누른 후, 고급 옵션을 열면 하단에 스토리지 청구 모델을 변경할 수 있습니다.

    변경 후에는 14일이 지나야 다시 변경이 가능하고 변경 후 적용되기까지는 24시간이 소요됩니다.

    Physical storage 주의사항

    Physical storage로 변환하기 위해선 몇가지 확인 사항이 필요합니다.

    1. 중복되는 데이터가 많은지
    2. 테이블의 데이터가 수정, 삭제 빈도가 잦은지

    1번의 경우는 확인하기 어렵기 때문에 차치하고 2번을 자세히 살펴보면 physical storage는 logical storage와 다르게 Time travel & fail-safe 스토리지 용량에 대한 비용이 청구가 됩니다.

    즉, 수정이나 삭제된 데이터를 보관하는 용량까지 비용 청구가 일어난다는 이야기입니다.

    현재 빅쿼리에서는 time travel을 데이터셋 단위로 2일에서 7일까지 설정할 수 있고 기본값은 7일입니다.

    예를 들어, A 데이터셋에 time travel이 최소 단위인 2일로 설정되어 있고 해당 데이터셋에 1개의 테이블의 크기가 1기가라고 할 때, 해당 테이블을 1시간마다 replace table로 데이터를 교체한다면 logical storage는 1기가이지만 physical storage는 time travel로 인한 47기가와 실제 크기인 1기가의 합인 48기가 정도가 됩니다.

    time travel로 인해 실제 크기보다 커진 physical storage 예시

    따라서 physical storage를 최대한 활용하기 위해선 데이터의 수정 및 삭제 빈도가 낮아야 합니다.

    요약

    • physical storage를 사용하면 데이터 압축으로 인해 빅쿼리 저장 비용을 크게 절감시킬 수 있음
    • 그러나 physical storage 비용이 기존 저장 방식인 logical storage보다 비용이 2배 비쌈
    • 데이터의 수정 및 삭제가 잦게 일어나는 데이터셋일 경우 기존 데이터 크기보다 더 커질 수 있으므로 비용이 더 청구될 수 있음

    레퍼런스

    https://support.bespinglobal.com/ko/support/solutions/articles/73000615830--bigquery-stro[…]l-logical-%EB%B0%8F-%EB%B3%80%EA%B2%BD%EB%B0%A9%EB%B2%95

    https://cloud.google.com/blog/products/data-analytics/new-bigquery-billing-model-helps-reduce-physical-storage-costs?hl=en

    https://cloud.google.com/bigquery/docs/information-schema-table-storage?hl=ko#example_2

    https://medium.com/@sobhan.af/how-bigquery-physical-storage-works-1138dd796171

    댓글