Slide 1

Slide 1 text

Jun Sakata Google Developers Expert, Cloud @sakajunquality Cloud Spanner Monitoring 入門 #GCPUG Tokyo Spanner Day August 2021 2021.08.06

Slide 2

Slide 2 text

注意 Spanner自体については @sinmetal 資料参照 Google Cloud Spanner Deep Dive What is Cloud Spanner? A gcpsketchnote cheat sheet (こちらもおすすめ)

Slide 3

Slide 3 text

Cloud Spanner in Ubie メインは Cloud SQL だけど Cloud Spanner も使ってるよ

Slide 4

Slide 4 text

Ubie と Cloud Spanner 現状は Cloud SQL を使用している部分が多い - マイクロサービス(のような)形で各サービスがDBを持っている - 多くのサービスは Cloud SQL for PostgreSQL で使用している - 一部新規のプロダクトで Cloud Spanner を採用 - (Cloud SQL の話は Data Cloud Summit でします) - (ちなみに自分は一番 MySQL が詳しい)

Slide 5

Slide 5 text

Ubie の Cloud Spanner Scalability と Availability を重視 - 複数のプロダクトの連携を行うマイクロサービスで使用 - 高いサービスレベルが想定 - e.g. Uptime SLA 99.999% (multi-regional) - v.s.Cloud SQL 99.95% - データが膨大に増えることが想定されていた - (つかってみたかった)

Slide 6

Slide 6 text

Ubie の Cloud Spanner Multi-regional Instance - asia1 (Tokyo-Osaka) - 完全SLA目的 - (高いので) 共有インスタンス - (Processing Unit 柔軟になったので検討の余地あり) - 2 Node (2,000 Processing Unit) - データベースごとに IAM

Slide 7

Slide 7 text

Latency guide

Slide 8

Slide 8 text

Latency guide Cloud Spanner end-to-end latency guide - https://cloud.google.com/spanner/docs/latency-guide?hl=ja#capture -client-latency - OpenCensus で一部実装する必要があり - ちょっと面倒くささはあるw

Slide 9

Slide 9 text

Latency guide

Slide 10

Slide 10 text

Latency guide Open Census Implementation grpc.io/client/roundtrip_latency

Slide 11

Slide 11 text

Latency guide Open Census Implementation cloud.google.com/[language]/spanner/gfe_latency

Slide 12

Slide 12 text

Latency guide Managed spanner.googleapis.com/api/request_latencies

Slide 13

Slide 13 text

Latency guide Managed spanner.googleapis.com/api/request_latencies Cloud Monitoringで気軽に出るのはこの部分

Slide 14

Slide 14 text

Latency guide Open Census Implementation [custom]

Slide 15

Slide 15 text

Latency guide まとめ Cloud Monitoring で見れてるのはこれ! spanner.googleapis.com/api/request_latencies https://cloud.google.com/spanner/docs/latency-guide?hl=ja#capture-client-latency

Slide 16

Slide 16 text

Query Stats

Slide 17

Slide 17 text

これ

Slide 18

Slide 18 text

これではない

Slide 19

Slide 19 text

Query Stats SPANNER_SYS.QUERY_STATS* https://cloud.google.com/spanner/docs/introspection/query-statistics - built-inのSPANNER_SYSテーブルに保存される - これは下記でアクセス可能 - Cloud Console の Query (とりあえずならこれかな) - gcloud spanner databases execute-sql - executeQuery API

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

Query Stats でできること 基本的なクエリの統計情報の取得 https://cloud.google.com/spanner/docs/introspection/query-statistics

Slide 22

Slide 22 text

Query Stats でできること 基本的なクエリの統計情報の取得 SELECT text, interval_end, execution_count, avg_latency_seconds, avg_rows, avg_bytes, avg_rows_scanned, avg_cpu_seconds FROM spanner_sys.query_stats_top_minute ORDER BY interval_end DESC; https://cloud.google.com/spanner/docs/introspection/query-statistics

Slide 23

Slide 23 text

Query Stats でできること 基本的なクエリの統計情報の取得 SELECT text, interval_end, execution_count, avg_latency_seconds, avg_rows, avg_bytes, avg_rows_scanned, avg_cpu_seconds FROM spanner_sys.query_stats_top_minute ORDER BY interval_end DESC; クエリごとに集計したCPU負荷の統計 すべてのクエリを集計した統計 https://cloud.google.com/spanner/docs/introspection/query-statistics

Slide 24

Slide 24 text

Query Stats でできること Explain (これはQuery Statsじゃないけど)

Slide 25

Slide 25 text

Query Stats でできること Explain (これはQuery Statsじゃないけど) あんまりいい例が見つけられなかったけど比較的 負荷がかかっているクエリ

Slide 26

Slide 26 text

トラブルシューティング インデックスがちゃんと効いていなかった例 呼び出し元サービスのレイテンシーの悪化も

Slide 27

Slide 27 text

Query Stats トラブルシューティング インデックスがちゃんと効いていなかった例 呼び出し元サービスのレイテンシーの悪化も この時の情報がすぐ出てきませんでした...

Slide 28

Slide 28 text

トラブルシューティング例 https://cloud.google.com/spanner/docs/introspection/query-statistics

Slide 29

Slide 29 text

Key Visualizer

Slide 30

Slide 30 text

これ

Slide 31

Slide 31 text

これです

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

時間 テ ー ブ ル ・ 行

Slide 34

Slide 34 text

Key Visualizer 時系列に Cloud Spanner の利用状況を可視化 - デフォルトで有効化されている - 既存インスタンスは DDL で有効化可能 - ALTER DATABASE `database_id` SET OPTIONS ( enable_key_visualizer=true )

Slide 35

Slide 35 text

Key Visualizer のメトリクス

Slide 36

Slide 36 text

Key Visualizer Heatmap パターン 正常 https://cloud.google.com/spanner/docs/key-visualizer/patterns

Slide 37

Slide 37 text

Key Visualizer Heatmap パターン アンチパターン https://cloud.google.com/spanner/docs/key-visualizer/patterns

Slide 38

Slide 38 text

Key Visualizer Heatmap パターン ホットスポット生まれてるかも https://cloud.google.com/spanner/docs/key-visualizer/patterns

Slide 39

Slide 39 text

Key Visualizer Heatmap 実例 https://www.youtube.com/watch?v=P3hiF3iNQew

Slide 40

Slide 40 text

Key Visualizer Heatmap 実例 https://www.youtube.com/watch?v=P3hiF3iNQew 自社のものがわかりにくかったので公式の動画より引用

Slide 41

Slide 41 text

Key Visualizer Heatmap 実例 https://www.youtube.com/watch?v=P3hiF3iNQew インデックスが無いため、テーブルを全スキャンしていた

Slide 42

Slide 42 text

Key Visualizer Heatmap 実例 https://www.youtube.com/watch?v=P3hiF3iNQew

Slide 43

Slide 43 text

IAM おまけ

Slide 44

Slide 44 text

Cloud Spanner の IAM 一部センシティブな情報をSpanner に入れていると... - 人(グループ)の権限を制限したい - KeyVisualizer 見れない...

Slide 45

Slide 45 text

まとめ

Slide 46

Slide 46 text

まとめ - スキーマ設計の ベストプラクティス も公開されているが、実際に使っている と意図通りに分散されていない場合もある - またアプリケーションを開発していく上でインデックスが効いていなかった り、リクエストが増えてから負荷が顕著になる場合もある - Query Stats でクエリの実行計画、Key Visualizer で Read/Write が分散さ れているか確認することで Cloud Spanner の真価を発揮できる

Slide 47

Slide 47 text

Thank You! Jun Sakata Google Developers Expert, Cloud @sakajunquality