
ThoughtSpotで大量データ分析の際のクエリのタイムアウトについての考察と対策について
AkimasaKajitaniです。
ThoughtSpotでは大量データを扱っている場合に、クエリがタイムアウトして結果が得られない場合があります。今回は、この対策、対応についてご紹介してまいります。
なぜタイムアウトするのか?
クエリがタイムアウトする理由ですが、データ量が多く、クエリが重たいから、というのが一番の理由ですが、ThoughtSpot内でタイムアウトの時間などが決まっています。Communityの記事 からどのようになっているか紐解いてみましょう。
まず、結論として、ThoughtSpotのクエリタイムアウトの時間は、1分となっています。それぞれのコンポーネントがどのようなタイムアウト時間が設定されているか、というのが以下の表のとおりとなります。
クエリタイムアウトのまとめ表
| コンポーネント | デフォルトタイムアウト時間 | 最大タイムアウト時間 | 詳細 |
|---|---|---|---|
| ブラウザ | 1分 | 2分(5分) | デフォルトでは2分だが、クラスタ単位で5分まで延長可能 |
| nginx | 10分 | 10分 | 変更不可 |
| Callosum | 2分 | 5分 | |
| DataManager | なし | - | タイムアウト処理なし |
| 外部データソース | ? | ? | 外部データソースに依存 |
各コンポーネントは、上から順につながっています。結論としては、一番タイムアウトが短いところに依存してしまうため、タイムアウトが一番短いブラウザの1分になっています。
タイムアウト時間の変更について
何分でもいいからとにかく結果がほしい、待ちたい、という場合はタイムアウト時間を変更する必要がありますが、できる部分とできない部分があります。
一番手軽で誰でもできるのが、ブラウザ部分のタイムアウトで、2分までは簡単に延長することができます。それ以上伸ばしたい場合は、ブラウザ部分とCallosum部分をそれぞれ最大5分まで延長可能なようです。いずれもサポートケースをあげるようにしてください。
ブラウザのタイムアウトを2分まで延長する方法
ブラウザのタイムアウトは、2分まではURLの文字列を少し変更することで可能となります。ブラウザのURLパラメータとして、「?queryDeadlineMs=120000」を追加する、というのがこの対処法です。この120000とうのがミリ秒でのタイムアウト時間の指定部分となります。具体的には以下のようにアクセスするURLに付加します。
https://thoughtspot.cloud/?queryDeadlineMs=120000/#/answer/
最大設定可能なタイムアウト時間は?
最大設定可能なタイムアウト時間は、5分となります。このとき、Callosumとブラウザ部分で5分のタイムアウトに設定できるように、サポートに申請してください。
また、タイムアウトを延長する場合は、データソース側のタイムアウトにも気をつけてください。データソース側でタイムアウトが短く設定されている場合は、ThoughtSpot側のタイムアウトを長くしても意味がありません。
タイムアウトさせないためには
ここまではタイムアウトさせないために、タイムアウト時間を延長する話をしてきましたが、そもそもデータが返ってくるのに1分も待ってられません。それではどうすればよいでしょうか?
基本的な考え方としては、データを絞る、データソース側の処理速度向上を測る、ということになりますが、利用しているデータソースのスペックにも依存します。
データ構成の変更
まずは、データモデルの見直し、というのも最初のワンステップです。スタースキーマで構成する、というのが推奨とされています。
運用方法上での工夫
データを絞る、つまりフィルタをかける、というのは一つの手段です。日付で絞ってダメなら、カテゴリで絞る、などします。「検索」の場合は、常にデータを表示してしまうため、ライブボードにして、必須フィルタをわざと設定せずにいれば、無駄なクエリや待ち時間がなくなります。
データソースがSnowflakeの場合
Snowflakeの場合、いちばん簡単な解決方法は、ウェアハウスのサイズアップです。さらに、クエリの待ち時間(キューに入っている時間)が長いようであれば、マルチクラスタウェアハウスの利用なども検討してください。
その他、Snowflakeには様々なチューニング方法があるので、試してみてください。
ThoughtSpotのインデックス作成を抑制する
データウェアハウスのクエリをモニタリングしていて、ThoughtSpotのインデックスの作成が頻繁に行われているような場合は抑制することも可能です。これを確認するには、ThoughtSpotが発行しているSQLのコメント部分に「task: SAGE_INDEXING*/」といった形で書かれています。これが多量に出ていて負荷が増しているような場合は管理者設定で抑制が可能です。
[管理者]タブから、アプリ設定の「検索&SpotIQ」の「検索設定」で変更が可能です。この「インデックス化頻度」を調整可能です。(本オプションは、クラスタ全体の設定となるため、Orgを作成している場合、プライマリのOrgで全体の設定を行うことになります)

その他のDB
ThoughtSpot社からチューニングに関する情報も提供されているので、参考にしてみてください。
一般的なクラウドデータウェアハウスについての記事
- Techniques to optimize Google BigQuery performance for AI-Powered Analytics
- Optimizing ThoughtSpot Workloads with Databricks
- How to improve Redshift performance with Embrace
参考URL
運営会社
