プレイドが実践した BigQuery コスト最適化

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for PLAID Tech PLAID Tech PRO
February 14, 2024

プレイドが実践した BigQuery コスト最適化

2024年2月14日開催
【日経、プレイド合同勉強会】BigQueryのコストとワークロード管理の最適化Tips共有
https://nikkei.connpass.com/event/306718/

『プレイドが実践した BigQuery コスト最適化』
河野 信輝(プレイド)

Avatar for PLAID Tech

PLAID Tech PRO

February 14, 2024
Tweet

More Decks by PLAID Tech

Other Decks in Technology

Transcript

  1. © PLAID Inc. | Confidential 2 © PLAID Inc. | Confidential ⾃⼰紹介 河野 信輝

    Nobuteru Kawano • 株式会社プレイド所属 • Engineer • 2023年01⽉〜 プレイド • 〜2022年12⽉ 保険会社でデータサイエ ンティスト • ポケモンセンターにお布施してます • 数学学び直したいので履修中(確率、 統計、線形代数、グラフ理論など)
  2. © PLAID Inc. | Confidential 7 © PLAID Inc. | Confidential Stats of KARTE

    データ規模も爆発的に増加 199 億UU 累計ユーザー数 ※1 0.x 秒/解析 解析速度 134,000 over 秒間トラッキング数 ※3 2.59 兆円 年間解析流通⾦額 ※2 ※1 ローンチ〜2023年2⽉までのユニークユーザー数の実績 ※2 EC領域における解析流通⾦額。2022年3⽉〜2023年2⽉までの単年の実績 ※3 閲覧、クリック、購⼊などKARTEで計測しているユーザーの全イベントが 対象。ローンチ〜2023年3⽉までにおける最⼤値
  3. © PLAID Inc. | Confidential スロットって? BigQuery 公式ドキュメント BigQuery スロットは、BigQuery で SQL

    クエリを実⾏するために使⽤される仮想 CPU です。 クエリの実⾏中、BigQuery はクエリのサイズと複雑さに応じて、クエリに必要なスロット数 を⾃動的に計算します。 スロットについて https://cloud.google.com/bigquery/docs/slots?hl=ja オンデマンド料⾦の同時実⾏スロットの最⼤数 2,000 スロット 割り当てと上限 https://cloud.google.com/bigquery/quotas?hl=ja#query_jobs 重い処理はスロットをたくさん使う 少ないスロットしか使えないと、処理に時間がかかる 9
  4. © PLAID Inc. | Confidential Bigquery-Slot-Optimization Team $0.024/slot hour $0.04 /slot hour

    ※ Enterprise Edition 1 year commit 容量コンピューティング料⾦ ストレージ料⾦ Logical storage のみ ※ 単価は倍だが圧縮後の容量 Physical storage も選択可能に 13
  5. © PLAID Inc. | Confidential Bigquery-Slot-Optimization Team 1. 可視化 2. Reservation 最適化

    3. クエリ最適化 BigQuery-Slot-Optimization Team の活動 15
  6. © PLAID Inc. | Confidential 可視化 SELECT job_id, … WHEN REGEXP_CONTAINS(query, r'/*

    JOURNEY') THEN 'journey' … FROM `[project id].region-[region]`.INFORMATION_SCHEMA.JOBS を “JOURNEY” としてグルーピングする /* JOURNEY##### */ SELECT … グルーピング 18
  7. © PLAID Inc. | Confidential 可視化 SELECT job_id, period_start, period_slot_ms FROM `[project

    id].region-[region]`.INFORMATION_SCHEMA.JOBS_TIMELINE WHERE … 各時刻ごとのスロット消費量 19
  8. © PLAID Inc. | Confidential 可視化 データソース: Datadog で実現 INFORMATION_SCHEMA. JOBS_TIMELINE +

    INFORMATION_SCHEMA.JOBS リアルタイムで 把握可能に cron 実⾏: Cloud Scheduler + Cloud Functions 20
  9. © PLAID Inc. | Confidential Reservation 最適化 Reservation 割当 Project A Reservation

    X: 2000 slots Project B Project C Reservation Y: 1000 slots 処理の負荷に応じてスロットの確保が必要 22
  10. © PLAID Inc. | Confidential Reservation 最適化 Slot 実際の使⽤量 AutoScale BaseLine AutoScale

    導⼊ & 最適化でコスト⬇ スロットの割当 従来のプレイド (イメージ) 27
  11. © PLAID Inc. | Confidential クエリ最適化 ⽣データ ユーザテーブル 最新のユーザ情報が 必要なクエリ 更新頻度⬇ (差分)ビュー

    コスト⬆ トータルでコスト⬇ ワークロード最適化 ビューを⾒るように変更 ビュー参照のコスト追加は テーブル更新コスト減に⽐べ ごくわずか 33
  12. © PLAID Inc. | Confidential クエリ最適化 … LEFT JOIN b … …

    LEFT JOIN ( SELECT * FROM b WHERE id = ʻhoge’ ) … Slot hour 70% 減⬇ BigQuery 公式ドキュメント https://cloud.google.com/bigquery/docs/best-practices-perfor mance-compute?hl=ja#reduce_data_before_using_a_join JOIN を使⽤する前に データを削減する 35
  13. 39