はじめに
TiDB Cloud ServerlessはTiDBをベースとする、オートスケール可能な従量課金のサーバレスデータベースです。
この従量課金はストレージ量に応じたストレージの課金と、クエリで利用する「リソース」に応じた課金となっており、「リソース」にはクエリが利用するCPUや、DiskI/O、ネットワーク転送などを勘案したリクエストユニット(RU)という値を利用しています。
このRU値は、クエリの質によって大きく異なります。端的にいえば、効率の良いクエリはRU値も低くなり、よりコストパフォーマンスが良いということになります。クエリをチューニングすると、速くなるだけではなくコストも低くなるわけですね
今回ご紹介するのはパフォーマンスチューニングの中でも最も基本的な、全件検索(TableFullScan)を探し出してインデックスを貼る方法です。ぜひ、御覧ください。
本記事は下記の英文記事の翻訳です。
TiDB Cloud Serverlessのコストの最適化 〜 はじめの一歩
🚀クエリのパフォーマンスを最適化し、お金を無駄にしないようにしたいですか?
これをチェックして、どのクエリが最も多くの費用を費やしているかを調べ、パフォーマンスを最適化し、無駄を避けるためのヒントを得てください!📊🔍
- Diagnosticsセクションに移動し、SQLステートメントを選択して、クエリの過去のコストを調べることができます。このダッシュボードでは、類似のクエリを集約されており、そられの合計値や平均値を使って最も多くのリクエストユニット(RU)を消費したクエリを簡単に特定できます
Step1. 過去のコスト(RU)の確認: Diagnostics
1.ナビゲーションメニュー の「Diagnostics」をクリックしてください。
2. [SQL Statement]タブをクリックします。
3. Total RU をクリックして、Total RUでクエリをソートします。
4. クエリの平均RUでクエリをソートするには、Mean RU をクリックしてください
Step2. クエリ実行計画の確認
- SQLステートメントダッシュボードで特定のクエリをクリックすると、対応する実行計画を閲覧できます。これを調べることにより、適切なインデックスの追加など、前述の最適化手法を適用してクエリのパフォーマンスを向上させることができます
- TableFullScanとは、WHERE句の適切なインデックスなしですべてのデータをスキャンすることを意味しています。これは、(おそらく意図していない)パフォーマンスの低下と利用料の増加に繋がります。
Step3. インデックスの作成と確認
- [WHERE]句に基づいて適切なインデックスを追加し、[EXPLAIN ANALYZE]コマンドを使用して、新しく追加されたインデックスが期待どおりに機能していることを確認します。
. 例えば、WHERE句がbar='1'でテーブル名がtable_foo_barの場合、次のSQL文を実行するとインデックスが追加され、クエリが高速化されます。
ALTER TABLE table_foo_bar ADD INDEX idx_bar (bar)