https://cloud.withgoogle.com/next/tokyo/sessions?speaker=393225A09B0C60CA
- SQL KVSのようなスケール性能
- ダウンタイムなしでScale-up/down
- オンラインでALTER
- Spannerに適した設計にした場合のみメリットを享受できる
- INTERLEAVE
- HotSpot
- テーブルJoin
- 親テーブルと小テーブルの結合列データが同ーノード、同じスプリット上に生成される
- 大量なデータが有る場合
- 1INTERLEAVEあたり2Gまでなので
- 全領域を横断的に見る場合
-
SpannerのCPU使用率
-
全Spannerサーバーの平均値 - つまり負荷を上げてもCPUが100%にならない場合はhotspotの可能性があり
-
インデックスでもhotspotある
-
インデックスhotspotは気づきづらい
- だれかがインデックス警察になる
- より細かいメトリックスがほしい
例えばログ系のTableでPKカラムが
- UserId(PK)
- CreatedAt(PK)
- BigQueryがおすすめ
- ShardId(PK) (※SharedId == random % shard数)
- CreatedAt(PK)
https://medium.com/google-cloud-jp/laravel-spanner-4d9f20eaeea3
- Debug Query Log
- Slow Query Log
- FORCE_INDEXつけ忘れ
- 問題の切り分け
- クライアント・Serverどちらが原因?
- Google API認証
- Session Pool
- gRPC
キャッシュを使い回す
OpenCensus Tracing
Stackdriver Monitoring
- 全ノードの平均CPU使用率
- 4つの区分がある
- High, Low(priority)
- User, System
- 通常のDBアクセスはHigh+User
- Systemは内部データ圧縮やALTER
- p95, p99が急上昇する場合
- 内部でSplit分散が多発している可能性
- Data増加に応じて分散されるため
- 急激な負荷上昇が予測されるならダミーデータを事前に温めておく
- ただし、内部Splitは見れないので(感覚的判断になってしまう)
- 遅いクエリの統計情報
- Select文のみの対応
- 平均スキャン行数