みなさん TiDB Serverless使ってますか〜?
TiDB Serverlessは従量課金となっていて、利用量とDisk利用量で課金されるようになっています。
この「利用量」がRequest Unitと呼ばれるもので、リクエスト毎にDBで消費される様々なリソース(主にCPU)に対して課金されるようになっているのです。で、このRUの計算方式ですが...
と書いてあり、分かりづらいと思います。計算するにしても、一つのクエリでどのくらいCPUを消費するか、Read/Writeリクエストを消費するかを知る必要がありますが、簡単ではありません。
ところで、最近、TiDB Serverlessに、実行したSQLのRU消費量を表示する機能ができたのでその機能について紹介していきます。
RUの計測方法
EXPLAIN ANALYZEを使う
EXPLAIN ANALYZE
を使ってクエリの実行計画を表示した際に、RUも合わせて表示されます。
この値を使って特定のクエリがどれくらいのRUなのかを見積もることができます。
代表的なクエリをいくつか計測してみてベースラインとすることで、そのクエリを月何回くらい実行するかで見積もることができそうです。
RUの計算テーブルから分かる通り、実際にRUの大半を占めるのはクエリレスポンスのデータ量の多さです。
例えば、簡単なテーブルを100件返す以下のクエリのRUは1未満ですが
これを1000件返すようにすると、10倍程度RUを消費します。ほぼ比例しています。
これはデータ量に応じたRUと、EgressのネットワークRUもかかっているのではないかと思われます。
結果セットが小さい単純なクエリが多い方がコスト的には良いということになるかと思います。
クエリメトリクスを参照する
最近追加された機能で、SQLのメトリクスでRUが表示されるようになりました。
DiagnosisのSQL Statementから確認できます。
RUの列でソートもできるので、特定の期間でRUを多く消費しているクエリを探すことができます。
さいごに
TiDB ServerlessでのRUの把握方法について記載しました。
またTiDB Serverlessは利用上限を設定できますので(これは$で設定)、RUの計算によらず一定額で利用料を抑えることができます。
RUの見積もりで概算を立てつつ、利用上限を設定して実際に運用してみて、実際の利用感を確認していくのが良いかなと思います。