View a markdown version of this page

InfluxDB 2 の Timestream のモニタリングと設定の最適化 - Amazon Timestream

Amazon Timestream for LiveAnalytics に類似した機能をご希望の場合は Amazon Timestream for InfluxDB をご検討ください。リアルタイム分析に適した、シンプルなデータインジェストと 1 桁ミリ秒のクエリ応答時間を特徴としています。詳細については、こちらを参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

InfluxDB 2 の Timestream のモニタリングと設定の最適化

概要:

Timestream for InfluxDB デプロイで最適なパフォーマンス、信頼性、コスト効率を維持するには、効果的なモニタリングと設定の最適化が不可欠です。このガイドでは、InfluxDB インスタンスをプロアクティブに管理するための CloudWatch メトリクス、パフォーマンスしきい値、および設定調整戦略に関する包括的なガイダンスを提供します。

CloudWatch メトリクスリファレンス

Amazon CloudWatch は、Timestream for InfluxDB インスタンスをモニタリングするための詳細なメトリクスを提供します。これらのメトリクスとそのしきい値を理解することは、システムのヘルスとパフォーマンスを維持する上で不可欠です。

リソース使用率メトリクス

CloudWatch メトリクス名 ディメンション 説明 Unit 推奨しきい値
CPUUtilization DbInstanceName 使用中の CPU の割合 割合 (%)
  • 開発/成長: < 70%

  • 本番稼働: < 80%

  • クリティカルアラート: 5 分以上 > 90%

MemoryUtilization DbInstanceName 使用されているメモリの割合 割合 (%)
  • 開発/成長: < 70%

  • 本番稼働: < 80%

  • 重大なアラート: > 90%

HeapMemoryUsage DbInstanceName 使用中のヒープメモリの量 バイト
  • 安定した増加またはスパイクをモニタリングする

  • アラート: 最大ヒープサイズに近づいています

ActiveMemoryAllocation DbInstanceName 現在のアクティブなメモリ割り当て バイト
  • 予期しないスパイクをモニタリングする

  • 使用可能なメモリの合計と比較する

DiskUtilization DbInstanceName 使用されているディスク容量の割合 割合 (%)
  • 開発/成長: < 70%

  • 本番稼働: < 75%

  • 重大なアラート: > 85%

I/O オペレーションメトリクス

CloudWatch メトリクス名 ディメンション 説明 Unit 推奨しきい値
ReadOpsPerSec DbInstanceName 1 秒あたりの読み取りオペレーションの数 Count/Second

プロビジョニングされた IOPS より ≥ 30% ヘッドルームを維持する

例: 12K IOPS → 合計 < 8,400 IOPS を維持する

WriteOpsPerSec DbInstanceName 1 秒あたりの書き込みオペレーションの数 Count/Second

プロビジョニングされた IOPS より ≥ 30% ヘッドルームを維持する

例: 12K IOPS → 合計 < 8,400 IOPS を維持する

TotalIOpsPerSec DbInstanceName 1 秒あたりの合計 I/O オペレーション (読み取り + 書き込み) Count/Second

プロビジョニングされた IOPS より ≥ 30% ヘッドルームを維持する

インスタンスクラスの機能に対するモニタリング

スループットメトリクス

CloudWatch メトリクス名 ディメンション 説明 Unit 推奨しきい値
ReadThroughput DbInstanceName データ読み取りスループット Bytes/Second ストレージスループット制限に対するモニタリング
WriteThroughput DbInstanceName データ書き込みスループット Bytes/Second ストレージスループット制限に対するモニタリング

API パフォーマンスメトリクス

CloudWatch メトリクス名 ディメンション 説明 Unit 推奨しきい値
APIRequestRate DbInstanceName、Endpoint、Status ステータスコード (2xx、4xx、5xx) を持つ特定のエンドポイントへの API リクエストのレート Count/Second

エラー率:

  • 4xx エラー: < 1% のリクエスト

  • 5xx エラー: < 0.1% のリクエスト

  • アラート: エラー率の急増

QueryResponseVolume DbInstanceName、Endpoint、Status エンドポイントとステータスコード別のクエリレスポンスの量 バイト
  • 異常に大きいレスポンスをモニタリングする

  • アラート: レスポンス > 10MB 一貫して

クエリ実行メトリクス

CloudWatch メトリクス名 ディメンション 説明 Unit 推奨しきい値
QueryRequestsTotal DbInstanceName、結果 結果タイプ別のクエリリクエストの合計数 (成功、runtime_error、 compile_error、queue_error) カウント

成功率: > 99%

エラー率:

  • runtime_error: < 0.5%

  • compile_error: < 0.1%

  • queue_error: < 0.1%

データ組織のメトリクス

CloudWatch メトリクス名 ディメンション 説明 Unit 重要なしきい値
SeriesCardinality DbInstanceName、バケット バケット内の一意の時系列の数 カウント
  • < 100K: 優れたパフォーマンス

  • < 1M: 優れたパフォーマンス

  • 1M0 万~5M: 中程度の影響、調整が必要

  • 5M0 万~10M: 大きな影響、慎重な最適化が必要

  • > 10M: CRITICAL - InfluxDB 3.0 を検討

TotalBuckets DbInstanceName インスタンス内のバケットの合計数 カウント
  • 時間の経過に伴う増加をモニタリングする

  • > 100 バケットの場合は統合を検討する

システムヘルスメトリクス

CloudWatch メトリクス名 ディメンション 説明 Unit 推奨しきい値
EngineUptime DbInstanceName InfluxDB エンジンが実行された時刻

予期しない再起動をモニタリングする

アラート: 稼働時間が予期せずリセットされる

WriteTimeouts DbInstanceName タイムアウトした書き込みオペレーションの数 カウント

アラート: 書き込みオペレーションの > 0.1%

重大: 増加傾向

タスク管理メトリクス

CloudWatch メトリクス名 ディメンション 説明 Unit 推奨しきい値
ActiveTaskWorkers DbInstanceName アクティブなタスクワーカーの数 カウント

設定されたタスクワーカーの制限に対してモニタリングする

アラート: 一貫して最大

TaskExecutionFailures DbInstanceName 失敗したタスク実行の数 カウント

アラート: タスク実行の > 1%

重大: 障害率の増加

主要なメトリクス関係について

IOPS とスループットの関係

30% ヘッドルームルール: 1 秒あたりの持続的なオペレーションとプロビジョニングされた IOPS の間で、少なくとも 30% のヘッドルームを常に維持します。これにより、以下のバッファが提供されます。

  • 圧縮オペレーション (IOPS を大幅にスパイクできる)

  • スムーズに実行するためのデータベースの再起動

  • ピーク時のクエリバースト

  • バッチ取り込みからの書き込みスパイク

  • インデックスメンテナンスオペレーション

計算例:

  • プロビジョンド IOPS: 12,000

  • ターゲット最大持続 IOPS (TotalIOpsPerSec): 8,400 (使用率 70%)

  • リザーブドヘッドルーム: 3,600 IOPS (30%)

TotalIOpsPerSec が一貫して 8,400 を超える場合: → ストレージ階層をアップグレードするか、ワークロードを最適化する

モニタリング式:

IOPS 使用率 % = (ReadOpsPerSec + WriteOpsPerSec) / プロビジョンド IOPS × 100

  • ターゲット: IOPS 使用率 < 70% を維持する

  • 警告: IOPS 使用率 > 70%

  • 重大: IOPS 使用率 > 90%

シリーズカーディナリティのパフォーマンスへの影響について

シリーズ基数には、システムリソースに対する乗算効果があります。

シリーズ数 メモリへの影響 クエリパフォーマンスへの影響 インデックスサイズの影響 レコメンデーション
< 100K Minimal ごくわずか Small 標準設定
100K000~1M 10~20% 遅い キャッシュ設定を調整する
1M 万~5M 重大 30~50% 遅い 積極的な最適化が必要
5M 万~10M 50~70% 遅い 非常に大きい 最大チューニング、再設計を検討
> 10M Severe 70% 以上遅い 過剰 InfluxDB 3.0 への移行

10Mが重要なしきい値である理由:

  • InfluxDB 2.x アーキテクチャがインメモリインデックス作成を使用する

  • 10Mシリーズを超えると、インデックス操作は過度に高価になります

  • メモリ要件が非線形に増加

  • クエリ計画のオーバーヘッドが大幅に増加

  • InfluxDB 3.0 は、高基数用に設計された列指向ストレージエンジンを使用します。

インスタンスのサイズ設定とパフォーマンスのガイドライン

次の表は、系列のカーディナリティとワークロードの特性に基づいて、適切なインスタンスのサイズ設定に関するガイダンスを示しています。

最大シリーズ数 書き込み (行/秒) 読み取り (クエリ/秒) 推奨インスタンス ストレージタイプ ユースケース
< 100K 約 50,000 < 10 db.influx.large Influx IO 込み 3K 小規模なデプロイ、開発、テスト
< 1M 約 150,000 < 25 db.influx.2xlarge Influx IO 込み 3K 中小規模の本稼働ワークロード
~100 万 約 200,000 約 25 db.influx.4xlarge Influx IO 込み 3K 中規模の本稼働ワークロード
< 5M 約 250,000 約 35 db.influx.4xlarge Influx IO 込み 12K 大規模な本稼働ワークロード
< 10M 約 500,000 約 50 db.influx.8xlarge Influx IO 込み 12K 非常に大規模な本稼働ワークロード
~1,000 万 < 750,000 < 100 db.influx.12xlarge Influx IO 込み 12K InfluxDB 2.x の最大容量
> 10M 該当なし 該当なし InfluxDB 3.0 への移行 該当なし InfluxDB 2.x の最適範囲を超える

メトリクスによる設定の最適化

CPU 使用率が高い (CPUUtilization > 70%)

症状:

  • CPUUtilization > 70% 持続

  • QueryRequestsTotal (大量のクエリまたはスロークエリ)

  • ActiveTaskWorkers (タスク負荷が高い)

設定の調整:

優先度 1: クエリの同時実行を制御する

  • query-concurrency: vCPU 数の 50~75% に設定する

  • 例: 8 vCPU インスタンス → query-concurrency = 4-6

優先度 2: クエリの複雑さを制限する

  • influxql-max-select-series: 10000 (無制限クエリの防止)

  • influxql-max-select-point: 100000000

  • query-queue-size: 2048 (キューの蓄積を防止)

優先度 3: クエリ分析を有効にする

  • flux-log-enabled: TRUE (一時的にデバッグ用)

  • ログレベル: info (または詳細分析用のデバッグ)

重要な考慮事項:

減らすquery-concurrencyと、同時に実行できるクエリの数が制限されるため、キューに入れられたクエリが増加し、ピーク時のクエリレイテンシーが高くなる可能性があります。クエリの需要が同時実行数の制限を超えた場合、ダッシュボードのロードが遅くなったり、タイムアウトが報告されたりすることがあります。

保護制限 (influxql-max-select-seriesinfluxql-max-select-point) を設定すると、これらのしきい値を超えるクエリは、QueryRequestsTotalcompile_error または runtime_error で失敗します。これにより、システムはリソースの枯渇から保護されますが、以前に機能していた既存のクエリが破損する可能性があります。

ベストプラクティス: これらの変更を適用する前に、QueryResponseVolume および QueryRequestsTotal メトリクスを使用してクエリパターンを分析します。最も高価なクエリを最初に特定して最適化する - 時間範囲フィルター、高カーディナリティシリーズにまたがるクエリ、過剰なデータポイントを要求するクエリがないクエリを探します。機能を損なう可能性のあるハード制限を適用するよりも、常にアプリケーションレベルでクエリを最適化することをお勧めします。

ハードウェアアクション:

  • より多くの vCPUs

  • 最適化の機会のクエリパターンを確認する

メモリ使用率が高い (MemoryUtilization > 70%)

症状:

  • MemoryUtilization > 70% 持続

  • HeapMemoryUsage が上昇傾向

  • スパイクを示す ActiveMemoryAllocation

  • SeriesCardinality (カーディナリティが高いとメモリ使用量が増加する)

設定の調整:

優先度 1: キャッシュメモリを減らす

  • storage-cache-max-memory-size: 合計 RAM の 10~15% に設定

  • 例: 32GB RAM → 3,355,443,200~5,033,164,800 バイト

  • storage-cache-snapshot-memory-size: 26,214,400 (25 MB)

優先度 2: クエリメモリの制限

  • query-memory-bytes: 合計 RAM の 60~70% に設定

  • query-max-memory-bytes: query-memory-bytes と同じ

  • query-initial-memory-bytes: query-memory-bytes の 10%

優先度 3: シリーズキャッシュを最適化する

  • storage-series-id-set-cache-size: カーディナリティが高い場合は減らす

  • ハイメモリ: 100~200

  • 正常: 500-1000

重要な考慮事項:

これらの変更によりメモリ負荷は軽減されますが、アプリケーションのパフォーマンスに直接悪影響を及ぼします。削減storage-cache-max-memory-sizeすると、メモリにキャッシュされるデータが少なくなり、ディスクの読み取りが多くなり、クエリのレイテンシーが増加します。ReadOpsPerSec が増加し、QueryResponseVolume の応答時間が遅くなる可能性があります。

制限すると、メモリを大量に消費するクエリquery-memory-bytesは、QueryRequestsTotalruntime_error で失敗します。特に、大きなデータセットを集約したり、大量の結果セットを返したりするクエリです。ユーザーは、以前に成功したクエリに対して「メモリ不足」エラーが発生する可能性があります。

削減すると、システムがキャッシュから取得するのではなく、より頻繁に系列結果を再計算する必要があるため、高カーディナリティデータに対するクエリのパフォーマンスstorage-series-id-set-cache-sizeが低下します。これは特に、同じ系列の組み合わせを繰り返しクエリするダッシュボードに影響します。

ベストプラクティス: これらの制限的な変更を適用する前に、クエリパターンを分析し、最初に最適化します。

  • QueryResponseVolume を確認して、過剰なデータを返すクエリを特定する

  • QueryRequestsTotal を使用して、最適化の恩恵を受ける可能性のある頻繁に実行されるクエリを検索する

  • 時間範囲フィルターを追加して、ワークロードに必要なデータスキャンを減らす

  • アプリケーションレベルでクエリ結果キャッシュを実装する

  • ダウンサンプリングタスクを使用してデータを事前集約することを検討する

  • SeriesCardinality を確認し、データモデルを最適化して不要なタグを減らす

クエリの最適化は常に最初のアプローチである必要があります。最適化が不十分な場合は、設定制限を最後の手段にする必要があります。

ハードウェアアクション:

  • インスタンスサイズを増やして RAM を増やす

ストレージ使用率が高い (DiskUtilization > 70%)

モニタリングする CloudWatch メトリクス:

  • DiskUtilization > 70%

  • WriteThroughput パターン

  • TotalBuckets (多くのバケットでオーバーヘッドが増加する)

設定の調整:

優先度 1: ログ記録設定を確認する

  • ログレベル: 「情報」 (「デバッグ」ではない) に設定されていることを確認します。

  • flux-log-enabled: アクティブにデバッグしない限り FALSE に設定します

優先度 2: 積極的な保持

  • storage-retention-check-interval: 15m0s (クリーンアップの頻度が高い)

優先度 3: 圧縮の最適化

  • storage-compact-full-write-cold-duration: 2h0m0s (より頻繁)

  • storage-cache-snapshot-write-cold-duration: 5m0s

優先度 4: インデックスサイズを縮小する

  • storage-max-index-log-file-size: 524,288 (高速圧縮用に 512 KB)

重要な考慮事項:

重要な最初のステップ - ログ記録設定を確認する: その他の変更を行う前に、ログ記録設定を確認します。デバッグログと Flux クエリログは、実際の時系列データと同じかそれ以上のディスク容量を消費する可能性があります。これは、予期しないストレージの枯渇の最も一般的な原因の 1 つです。

ログ記録の影響:

  • log-level: debug は、1 時間あたり数百 MB の可能性のある非常に詳細なログを生成します。

  • flux-log-enabled: TRUE は、すべての Flux クエリ実行を完全な詳細でログに記録し、大量のログファイルを作成します。

  • これらのログは急速に蓄積され、キャパシティプランニング中に見落とされることがよくあります。

  • ログファイルは、特に小さなインスタンスでは、データインジェストよりも速くディスク容量を埋めることができます。

  • 時系列データとは異なり、ログは削除前に 24 時間ローカルストレージに保持されます。

ログが大きい場合の即時アクション:

  1. 設定 log-level: info (デバッグから)

  2. flux-log-enabled: FALSE を設定する

  3. DiskUtilization をモニタリングしてすぐに改善する

圧縮設定のトレードオフ:

これらの設定変更は、ディスク使用量が大幅に変動する取り込みスループットが高く、保持期間が短いワークロード向けに特別に設計されています。圧縮エンジンをより積極的に動作させるため、特定のシナリオでのみ有益です。

重大なトレードオフ: 圧縮頻度を増やすと、リソースの消費量が大幅に増加します。

  • 圧縮オペレーションが CPU サイクルを消費すると、CPUUtilization は増加します

  • MemoryUtilization は、データのロードと処理に伴って圧縮中に増加します

  • WriteOpsPerSecWriteThroughput は圧縮ウィンドウ中に急増し、30% IOPS ヘッドルームを超える可能性があります

  • 圧縮 I/O がアプリケーションの書き込みと競合すると、WriteTimeouts が増加する可能性があります

これらの変更により、積極的な圧縮がクエリおよび書き込みオペレーションに必要なリソースを消費し、ディスク使用量を減らしてもシステム全体のパフォーマンスを低下させる、カスケードパフォーマンスの問題が発生する可能性があります。

ベストプラクティス: 圧縮設定を調整する前に、データとログ管理に重点を置いてください。

  1. Check Logging First (Most Common Issue): Verify log-level is "info" and flux-log-enabled is FALSE

  2. データモデルの確認: 実際に必要のないデータを記述していますか? 測定またはフィールドの詳細度を減らすことができますか?

  3. 保持ポリシーの最適化: TotalBuckets をチェックし、各バケットの保持設定を確認する

  4. 圧縮の影響のモニタリング: 変更前に CPUUtilizationMemoryUtilizationWriteOpsPerSec のベースラインを設定します。

代替アプローチ:

  • ストレージ容量を増やす (多くの場合、シンプルでコスト効率が高い)

  • データダウンサンプリングまたは集約戦略を実装する

  • バケットの統合 (TotalBuckets の削減) によるオーバーヘッドの削減

  • 保持ポリシーをより厳密に確認して適用する

データ管理を最適化し、増加した負荷を処理するのに十分な CPU、メモリ、IOPS ヘッドルームがインスタンスにあることを確認した場合にのみ、積極的な圧縮設定を適用します。

ハードウェアアクション:

  • ストレージ容量を増やす

高 IOPS 使用率 (ReadIOPS/WriteIOPS/TotalOperationsPerSecond > プロビジョニングの 70%)

モニタリングする CloudWatch メトリクス:

  • ReadOpsPerSec + WriteOpsPerSec = TotalIOpsPerSec

  • ReadThroughputWriteThroughput

  • プロビジョニングされた IOPS (3K、12K、または 16K) と比較する

設定の調整:

優先度 1: 圧縮 I/O を制御する

  • storage-max-concurrent-compactions: 2~3 (同時圧縮の制限)

  • storage-compact-throughput-burst: ディスク機能に基づいて調整する

  • 3K IOPS: 25,165,824 (24 MB/秒)

  • 12K IOPS: 50,331,648 (48 MB/秒)

優先度 2: 書き込みオペレーションの最適化

  • storage-wal-max-concurrent-writes: 8~12

  • storage-wal-max-write-delay: 5m0s

優先度 3: スナップショットのタイミングを調整する

  • storage-cache-snapshot-write-cold-duration: 15m0s (低頻度)

  • storage-compact-full-write-cold-duration: 6h0m0s (低頻度)

重要な考慮事項:

これらの変更により、I/O 使用率とシステムパフォーマンスに大きなトレードオフが生じます。

圧縮 I/O の制限:

  • 減らすと圧縮操作storage-max-concurrent-compactionsが遅くなり、TSM ファイルが蓄積され、DiskUtilization がより迅速に増加します。

  • を小さくすると圧縮時間がstorage-compact-throughput-burst長くなり、コンパクタのアクティブ時間が長くなり、他のオペレーションがブロックされる可能性があります。

  • 圧縮が遅いということは、ストレージエンジンが統合された TSM ファイルではなく、より小さい TSM ファイルから読み取る必要があるため、クエリのパフォーマンスが時間の経過とともに低下することを意味します。

  • I/O の待機中にクエリがタイムアウトすると、QueryRequestsTotal runtime_error レートが増加することがあります。

スナップショットの頻度を減らす:

  • storage-cache-snapshot-write-cold-duration と を増やすstorage-compact-full-write-cold-durationと、データは先行書き込みログ (WAL) に長く保持されます。

  • これにより、ディスクにフラッシュされる前にキャッシュに保持されるデータが増えるため、MemoryUtilization が向上します。

  • キャッシュされたデータが保持される前にインスタンスがクラッシュすると、データ損失のリスクがわずかに増加します。

  • より多くの WAL データを再生する必要があるため、再起動後の復旧時間が長くなる

書き込みオペレーションのチューニング:

  • 削減storage-wal-max-concurrent-writesすると書き込みオペレーションがシリアル化され、高スループット期間中に WriteTimeoutsが増加する可能性があります。

  • 増加storage-wal-max-write-delayは、書き込みが拒否されるまでに時間がかかることを意味します。これにより、容量の問題はマスクされますが、応答が遅いユーザーを苛立たせる可能性があります。

ベストプラクティス: IOPS 使用率が高い場合は、通常、設定の問題ではなくストレージ層を超過したことを示します。I/O を制限する前に、I/O パターンを分析し、制限する前に最適化します。

ハードウェアアクション:

  • より高い IOPS ストレージ階層へのアップグレード (3K → 12K)

  • 30% IOPS ヘッドルームが維持されていることを確認する

ハイシリーズカーディナリティ (SeriesCardinality > 1M)

モニタリングする CloudWatch メトリクス:

  • バケットあたりの SeriesCardinality と合計

  • MemoryUtilization (基数の増加)

  • CPUUtilization (クエリ計画オーバーヘッド)

  • QueryRequestsTotal (runtime_error レートが増加する可能性があります)

設定の調整:

優先度 1: シリーズ処理の最適化

  • storage-series-id-set-cache-size: 1000-2000 (キャッシュを増やす)

  • storage-series-file-max-concurrent-snapshot-compactions: 4~8

優先度 2: 保護制限を設定する

  • influxql-max-select-series: 10000 (ランナウェイクエリの防止)

  • influxql-max-select-buckets: 1000

優先度 3: インデックスオペレーションの最適化

  • storage-max-index-log-file-size: 2,097,152 (2MB)

重要な考慮事項:

高シリーズのカーディナリティは基本的にデータモデリングの問題であり、設定の問題ではありません。設定の変更は症状を軽減することしかできず、根本的な問題を解決することはできません。

設定のトレードオフ:

増加するstorage-series-id-set-cache-sizeと、シリーズルックアップをキャッシュすることでクエリのパフォーマンスが向上しますが、MemoryUtilization の増加が犠牲になります。各キャッシュエントリはメモリを消費し、数百万のシリーズでは、これはかなりの可能性があります。この変更を行った後、HeapMemoryUsageActiveMemoryAllocation をモニタリングします。

保護制限 (influxql-max-select-seriesinfluxql-max-select-buckets) を設定すると、これらのしきい値を超えると、QueryRequestsTotal の compile_error で正当なクエリが失敗します。 QueryRequestsTotal 以前に機能していたダッシュボードが壊れる可能性があるため、ユーザーはクエリを変更する必要があります。これは、次の場合に特に問題があります。

  • 多くのホスト/サービスに集約されるダッシュボードのモニタリング

  • 複数のエンティティを比較する必要がある分析クエリ

  • フリート全体の条件を評価するアラートクエリ

値を小さく調整storage-max-index-log-file-sizeすると、インデックスの圧縮頻度が増加し、システムがインデックスのメンテナンスをより頻繁に実行するにつれて CPUUtilizationWriteOpsPerSec が増加します。

重要な理解:

SeriesCardinality が 5M を超えると、InfluxDB 2.x のアーキテクチャ制限に近づいています。10M以上のシリーズでは、設定に関係なくパフォーマンスが指数関数的に低下します。

  • クエリ計画が過度に高価になる (CPUUtilization が高い)

  • メモリ要件が非線形に増加する (MemoryUtilization が高い)

  • インデックスオペレーションが I/O を支配する (ReadOpsPerSecWriteOpsPerSec)

  • QueryRequestsTotal runtime_error レートが増加する

ベストプラクティス: 設定の変更は一時的なバンドエイドです。根本原因に対処する必要があります。

  1. データモデルを分析する:

    • バケットあたりの SeriesCardinality を確認して問題領域を特定する

    • 一意の値数が多いタグを特定する

    • 無制限のタグ値 (UUIDs、タイムスタンプ、ユーザー IDs、セッション IDsを探す

    • 代わりにフィールドとなるタグを検索する

データモデルアクション:

  • タグ設計を確認して不要な基数を減らす

  • 類似シリーズの統合を検討する

  • > 10M シリーズの場合: InfluxDB 3.0 への移行を計画する

クエリパフォーマンスの問題

モニタリングする CloudWatch メトリクス:

  • QueryRequestsTotal 結果タイプ別 (成功、runtime_error、 compile_error、queue_error)

  • Status=500 または Status=499 の APIRequestRate

  • QueryResponseVolume (大きなレスポンスは高価なクエリを示す)

設定の調整:

優先度 1: クエリリソースを増やす

  • クエリ同時実行数: vCPUs の 75% に増加

  • query-memory-bytes: 合計 RAM の 70% を割り当てる

  • query-queue-size: 4096

優先度 2: クエリ実行の最適化

  • storage-series-id-set-cache-size: 1000 (キャッシュを改善するために増加)

  • http-read-timeout: 60 秒 (早期タイムアウトの防止)

優先度 3: 妥当な制限を設定する

  • influxql-max-select-point: 100000000

  • influxql-max-select-series: 10000

  • influxql-max-select-buckets: 1000

重要な考慮事項:

クエリリソースを増やすと、リソースの競合と潜在的なシステムの不安定性が生じます。

リソース割り当てのトレードオフ:

増加すると、より多くのクエリを同時に実行query-concurrencyできますが、各クエリは CPU とメモリで競合します。

  • CPUUtilization が増加し、ピーククエリ期間中に飽和に達する可能性があります

  • MemoryUtilization は、より多くのクエリがメモリを同時に割り当てると増加します

  • 適切なリソースなしで同時実行数を増やすと、キューイングではなくすべてのクエリが遅くなります。

  • 同時クエリで使用可能なリソースが枯渇した場合のカスケード失敗のリスク

割り当てるメモリを増やすquery-memory-bytesと、キャッシュやその他のオペレーションで使用できるメモリが少なくなります。

  • HeapMemoryUsage が増加

  • storage-cache-max-memory-size 補償のために減らす必要がある場合があります

  • キャッシュヒットが少ないほど、ReadOpsPerSec が高くなり、クエリのパフォーマンスが遅くなります。

  • クエリが全割り当てを使用する場合、システムはメモリ枯渇に対してより脆弱になる

増加query-queue-sizeしても問題は遅延します。容量の問題は解決されません。

  • クエリがキューで待機時間が長くなり、end-to-endレイテンシーが増加する

  • スループットが変わらない場合でも、ユーザーはシステムを遅く認識する

  • キューが大きいと、基盤となる容量の問題をマスクできる

  • QueryRequestsTotal queue_error レートは低下しますが、ユーザーエクスペリエンスは向上しない可能性があります

を増やすと、クエリの早期キャンセルhttp-read-timeoutは防止されますが、次のようになります。

  • 長時間実行されるクエリはリソースをより長く消費し、他のクエリの容量を削減します。

  • ユーザーがタイムアウトエラーを受信するまで待機時間が長くなる

  • 最適化する必要がある非効率的なクエリを非表示にできる

  • 多くのスロークエリが蓄積されると、リソースが枯渇する可能性があります

ベストプラクティス: クエリのパフォーマンスの問題は通常、リソース不足ではなく、非効率的なクエリによって発生します。リソース割り当てを増やす前に:

  1. クエリパターンを分析する:

    • QueryResponseVolume を確認して、過剰なデータを返すクエリを特定する (> 1MB)

    • QueryRequestsTotal runtime_error パターンを確認する - 障害の原因は何ですか?

    • Status=499 (クライアントのタイムアウト) の APIRequestRate を探す - クエリが遅すぎる

    • 頻繁に実行される高価なクエリを特定する

  2. 最初にクエリを最適化する:

    一般的なクエリのアンチパターン:

    • 時間範囲フィルターがない → 明示的な時間制限を追加する

    • すべてのシリーズのクエリ → 特定のタグフィルターを追加する

    • 過剰な集計ウィンドウ → 適切な間隔を使用する

    • SELECT の不要なフィールド → 必要なデータのみをリクエストする

    • LIMIT 句なし → 妥当な制限を追加する

  3. アプリケーションレベルのソリューション:

    • クエリ結果キャッシュを実装する (Redis、Memcached)

    • タスクを使用して一般的なパターンを事前集計する

    • 大きな結果セットのページ分割を追加する

    • ユーザー/ダッシュボードごとにクエリレート制限を実装する

    • 履歴クエリにダウンサンプリングされたデータを使用する

  4. リソースの可用性を検証する:

    • CPUUtilization を確認する - すでに > 70% の場合、同時実行数を増やすと事態が悪化する

    • MemoryUtilization を確認する - すでに > 70% の場合、より多くのクエリメモリを割り当てると OOM が発生します

    • クエリ負荷を増やす前にTotalIOpsPerSec のヘッドルームが 30% であることを確認します。

推奨されるアプローチ:

  1. 最もコストの高いクエリの上位 10 件を最適化することから始める (QueryResponseVolume による)

  2. アプリケーションレベルでクエリ結果キャッシュを実装する

  3. クエリが最適化され、メトリクスにヘッドルームが表示される場合にのみ、リソース割り当てを増やす

  4. ワークロードの現在の容量が増加した場合に、より大きなインスタンスクラスにスケールする

ハードウェアアクション:

  • コンピューティング容量をスケールし、クエリは追加の処理能力 (vCPUsの恩恵を受ける

Flux クエリの RegEx パフォーマンスの落とし穴

Flux でデータをフィルタリングするときは、完全一致または単純なパターンマッチングに正規表現を使用しないでください。これにより、パフォーマンスに対する重大なペナルティが発生するためです。Flux の RegEx オペレーションはシングルスレッドであり基盤となる TSM インデックスを完全にバイパスします。InfluxDB の最適化されたタグインデックスを高速ルックアップに使用する代わりに、RegEx フィルターはクエリエンジンがストレージから一致するすべてのシリーズを取得し、各値に対してテキスト比較を順番に実行するように強制します。これは、次の場合に特に問題になります。

  • 正確なタグ値のフィルタリング - のような RegEx パターンの代わりに等価演算子 (==) または contains()関数を使用します。 /^exact_value$/

  • 複数の特定の値の一致 - のような変更パターンではなく、値の配列で in演算子を使用します。 /(value1|value2|value3)/

  • 単純なプレフィックスまたはサフィックスマッチング - RegEx アンカーよりも効率的な strings.hasPrefix()関数または strings.hasSuffix()関数の使用を検討してください。

複数のパターン一致が必要なシナリオでは、複数のフィルター述語を論理演算子と組み合わせて使用するか、より複雑な文字列オペレーションを適用する前にタグの等価性を使用して事前フィルタリングするようにクエリを再構築します。RegEx は、単純な比較演算子では表現できない真のパターンマッチングが必要な場合にのみ予約します。

パフォーマンスの問題の書き込み

モニタリングする CloudWatch メトリクス:

  • WriteTimeouts (カウントの増加)

  • WriteOpsPerSecWriteThroughput

  • 書き込みエンドポイントのステータスが 500 の APIRequestRate

  • 書き込み中の result=runtime_error を含む QueryRequestsTotal

設定の調整:

優先度 1: WAL 書き込みの最適化

  • storage-wal-max-concurrent-writes: 12-16

  • storage-wal-max-write-delay: 10m0s

  • http-write-timeout: 60 秒

優先度 2: キャッシュスナップショットの最適化

  • storage-cache-snapshot-memory-size: 52,428,800 (50 MB)

  • storage-cache-snapshot-write-cold-duration: 10m0s

優先度 3: コントロールフィールドの検証

  • storage-no-validate-field-size: TRUE (データソースが信頼されている場合)

重要な考慮事項:

書き込みパフォーマンスの調整には、スループット、信頼性、リソース消費の慎重なトレードオフが含まれます。

WAL 設定のトレードオフ:

を増やすstorage-wal-max-concurrent-writesと、並列書き込みオペレーションが増えますが、次のようになります。

  • CPUUtilizationは、より多くの書き込みスレッドが CPU と競合するにつれて増加します。

  • MemoryUtilization は、WAL フラッシュの前にメモリにバッファされるデータが増えるにつれて増加します

  • WriteOpsPerSec が急増し、30% IOPS ヘッドルームを超える可能性があります

  • ディスク I/O の競合が増加すると、実際には個々の書き込みが遅くなる可能性があります

  • ディスク I/O 容量を超えると、WriteTimeouts が減少するのではなく増加する可能性があります。

増加は、書き込みがタイムアウトするまでの待機時間が長くなるstorage-wal-max-write-delayことを意味します。

  • 書き込みをすぐに失敗させるのではなく待機させることで、容量の問題をマスクします

  • 書き込みが最終的に成功しても、ユーザーの書き込み応答時間が遅くなる

  • 書き込みキューの蓄積とメモリ負荷につながる可能性がある

  • 実際に容量を増やさない - タイムアウトを遅らせるだけ

増加してもhttp-write-timeout同様にタイムアウトエラーが遅延します。

  • より大きなバッチ書き込みの完了を許可する

  • ただし、書き込みが遅いとリソースをより長く消費できます。

  • 基盤となるパフォーマンス問題を非表示にできる

  • 多くのスロー書き込みが蓄積されると、リソースが枯渇する可能性があります

キャッシュスナップショットのトレードオフ:

増加するstorage-cache-snapshot-memory-sizeと、フラッシュする前により多くのデータがメモリに蓄積されます。

  • MemoryUtilization が大幅に増加

  • スナップショットの前にインスタンスがクラッシュすると、データ損失のリスクが増加する

  • スナップショットが大きいほど書き込みに時間がかかり、WriteOpsPerSec のスパイクが大きくなります

  • より多くのデータをバッチ処理することで書き込みスループットを向上させることができますが、メモリと信頼性のコストがかかります

storage-cache-snapshot-write-cold-duration 遅延スナップショットの増加:

  • データがキャッシュに保持される時間が長くなると、MemoryUtilization がさらに増加します

  • データ損失リスクウィンドウを増やす

  • WriteOpsPerSec の頻度を減らしますが、スナップショットが発生するとスパイクが大きくなります

  • より多くの WAL を再生する必要があるため、再起動後の復旧時間が長くなる

フィールド検証のトレードオフ:

を設定すると、フィールドサイズの検証storage-no-validate-field-size: TRUEが無効になります。

  • 検証チェックをスキップして書き込みスループットを改善

  • 重大なリスク: 不正な形式または悪意のあるデータの書き込みを許可する

  • 書き込みに無効なフィールドサイズが含まれていると、データの破損につながる可能性があります

  • データ問題のデバッグをはるかに困難にする

  • データソースを完全に制御し、信頼している場合にのみ使用します。

ベストプラクティス: 書き込みパフォーマンスの問題は通常、容量制限または非効率的な書き込みパターンを示します。設定を調整する前に:

  1. 書き込みパターンの分析:

    • WriteThroughputWriteOpsPerSec の傾向を確認する

    • WriteTimeouts と書き込み負荷の相関を確認する

    • ステータスコードによる書き込みエンドポイントの APIRequestRate のモニタリング

    • 書き込みバッチのサイズと頻度を特定する

  2. 書き込みオペレーションを最初に最適化します。

    一般的な書き込みアンチパターン:

    • 個々のポイントの書き込み → バッチ書き込み (5,000~10,000 ポイント)

    • 書き込みの頻度が高すぎる → バッファとバッチ

    • 同期書き込み → 非同期書き込みキューを実装する

    • 無制限の書き込みバースト → レート制限を実装する

    • 不要な精度の記述 → タイムスタンプを適切に丸める

  3. I/O 容量の確認:

    • TotalIOpsPerSec を確認する - 既に > 70% の場合、WAL 同時実行数を増やすと事態が悪化する

    • ピーク期間中に WriteOpsPerSec を確認する

    • 書き込み設定を調整する前に、30% IOPS ヘッドルームが存在することを確認します。

    • 3K IOPS で十分か、12K IOPS 階層が必要かを検討する

  4. アプリケーションレベルの改善:

    • 設定可能なバッチサイズで書き込みバッファリングを実装する

    • エクスポネンシャルバックオフを使用して書き込み再試行ロジックを追加する

    • 非同期書き込みオペレーションを使用する

    • ピーク期間中に書き込みレート制限を実装する

    • 書き込みキューの深さをモニタリングし、バックプレッシャーを適用する

推奨されるアプローチ:

  1. まず、アプリケーションレベルで書き込みバッチサイズを最適化します (バッチあたり 5,000~10,000 ポイントを目指します)

  2. 書き込みバッファリングと非同期オペレーションを実装する

  3. TotalIOpsPerSec に十分なヘッドルームがあることを確認する

  4. 使用率が一貫して 70% を超える場合、次のストレージ階層 (3K IOPS → 12K IOPS → 16K IOPS) にアップグレードする

  5. 書き込みが最適化され、I/O 容量が十分である場合にのみ WAL 設定を調整する

  6. データソースを完全に制御していない限り、フィールド検証を無効にしないでください

ハードウェアアクション:

  • より高い IOPS ストレージへのアップグレード (3K → 12K → 16K)

  • I/O ヘッドルームが適切であることを確認する

  • CPU またはメモリに制約がある場合は、より大きなインスタンスクラスにスケールする

モニタリングのベストプラクティス

CloudWatch アラーム設定

重大なアラーム (即時アクションが必要):

CPUUtilization:

  • しきい値: > 90%、5 分間

  • アクション: トラフィック修復対策またはコンピューティングスケーリングを実装する

MemoryUtilization:

  • しきい値: > 90%、5 分間

  • アクション: トラフィック修復対策またはコンピューティングスケーリングを実装する

DiskUtilization:

  • しきい値: > 85%

  • アクション: 古いバケットの削除、保持設定の更新、または Storage Scaling によるスペースの解放を試みる

TotalIOpsPerSec:

  • しきい値: 10 分間にプロビジョニングされた の > 90%

  • アクション: トラフィック修復対策を実装する、または IOPS を増やす

SeriesCardinality:

  • しきい値: > 10,000,000

  • アクション: データモデルを確認し、変更できない場合は、InfluxDB 3 への移行またはデータのシャードを検討してください。

EngineUptime:

  • しきい値: 予期しないリセット (< 300 秒)

  • アクション: Timestream サポートへのチケットを作成しない場合は、メンテナンスウィンドウと一致するかどうかを確認します。

警告アラーム (調査が必要):

CPUUtilization:

  • しきい値: > 70%、15 分間

  • アクション: ワークロードまたはトラフィックの変更を確認する

MemoryUtilization:

  • しきい値: > 70%、15 分間

  • アクション: ワークロードまたはトラフィックの変更を確認する

DiskUtilization:

  • しきい値: > 70%

  • アクション: 保持ポリシーを確認する

TotalIOpsPerSec:

  • しきい値: 15 分間にプロビジョニングされた の > 70%

  • アクション: ワークロードまたはトラフィックの変更を確認する

QueryRequestsTotal (runtime_error):

  • しきい値: 合計クエリの > 1%

  • アクション: ワークロードまたはトラフィックの変更を確認する

WriteTimeouts:

  • しきい値: 書き込みオペレーションの > 1%

  • アクション: ワークロードまたはトラフィックの変更を確認する

SeriesCardinality:

  • しきい値: > 5,000,000

  • アクション: データモデルの最適化を確認する

プロアクティブモニタリングチェックリスト

毎日:

  • APIRequestRate でエラースパイク (400、404、499、500) を確認する

  • runtime_error および queue_error レートの QueryRequestsTotal を確認する

  • WriteTimeouts カウントが最小限であることを確認する

  • 重要なアラームがないか確認する

  • EngineUptime を検証する (予期しない再起動なし)

毎週:

  • CPUUtilization、MemoryUtilization、および DiskUtilization の傾向を確認する

  • QueryRequestsTotal パターンを結果タイプ別に分析する

  • バケットあたりの SeriesCardinality 増加率を確認する

  • TotalIOpsPerSec 使用率の傾向を確認する

  • 設定パラメータが最適であることを確認する

  • TaskExecutionFailures パターンを確認する

毎月:

  • キャパシティプランニングレビュー (3~6 か月前にプロジェクト)

  • 現在のメトリクスをサイジングテーブルと比較する

  • 保持ポリシーの確認と最適化

  • APIRequestRate と QueryResponseVolume からクエリパターンを分析する

  • SeriesCardinality とデータモデルの効率を確認する

  • インスタンスのスケーリングまたは設定変更の必要性を評価する

  • TotalBuckets と統合の機会を確認する

トラブルシューティングガイド

シナリオ: 突然のパフォーマンス低下

調査ステップ:

最近の変更を確認する:

  • AWS マネジメントコンソールの設定パラメータの変更

  • アプリケーションのデプロイの変更

  • クエリパターンの変更

  • データモデルの変更

  • インフラストラクチャの変更 (インスタンスタイプ、ストレージ)

CloudWatch メトリクスを確認します。

  • CPU スパイク? → CPUUtilization、QueryRequestsTotal を確認する

  • メモリプレッシャー? → MemoryUtilization、HeapMemoryUsage、ActiveMemoryAllocation を確認する

  • IOPS 飽和度 → TotalIOpsPerSec、ReadOpsPerSec、WriteOpsPerSec を確認する

  • シリーズ基数ジャンプ? → SeriesCardinality の増加を確認する

  • エラー率の増加 → QueryRequestsTotal (runtime_error)、APIRequestRate (Status=500) を確認する

  • 予期しない再起動ですか? → EngineUptime を確認する

詳細ログ記録を有効にする:

設定の変更:

  • ログレベル: デバッグ

  • flux-log-enabled: TRUE

1~2 時間モニタリングし、ログを確認する

ログレベルに戻る: 調査後の情報

解決ステップ:

  • 検出結果に基づいて適切な設定変更を適用する

  • 制限に達した場合のリソースのスケーリング

  • 必要に応じてクエリまたはデータモデルを最適化する

  • 突然負荷が増加する場合はレート制限を実装する

シナリオ: メモリの枯渇

症状:

  • MemoryUtilization > 90%

  • HeapMemoryUsage が最大値に近づいています

  • runtime_error (メモリ不足) を示す QueryRequestsTotal

  • Status=500 を示す APIRequestRate

解決ステップ:

即時アクション (緊急の場合):

  1. インスタンスを再起動してメモリをクリアする (安全である場合)

  2. クエリの同時実行数を一時的に減らす

  3. 可能な場合は長時間実行されるクエリを排除する

設定の変更:

優先度 1: キャッシュメモリを減らす

  • storage-cache-max-memory-size: RAM を 10% に減らす

  • 例: 32GB → 3,355,443,200 バイト

  • storage-cache-snapshot-memory-size: 26,214,400 (25 MB)

優先度 2: クエリメモリの制限

  • query-memory-bytes: 合計 RAM の 60% に設定

  • query-max-memory-bytes: query-memory-bytes の一致

  • query-initial-memory-bytes: query-memory-bytes の 10%

優先度 3: 保護制限を設定する

  • influxql-max-select-series: 10000

  • influxql-max-select-point: 100000000

  • クエリ同時実行数: vCPUs

長期ソリューション:

  • データモデルを最適化して SeriesCardinality を減らす

  • アプリケーションレベルでクエリ結果のサイズ制限を実装する

  • クエリタイムアウトの適用を追加する

  • 最も一般的なクエリを確認して、 セクションで説明されているベストプラクティスに従っていることを確認します。 クエリパフォーマンスの問題

シナリオ: ハイシリーズカーディナリティの影響

CloudWatch メトリクスを確認します。

  • SeriesCardinality > 5M

  • MemoryUtilization

  • runtime_error の増加を示す QueryRequestsTotal

  • クエリ計画のオーバーヘッドによる CPUUtilizationの向上

調査ステップ:

Cardinality Growth を分析する:

  • SeriesCardinality 成長率 (毎日/毎週)

  • 10Mのしきい値への射影

  • 高基数の原因を特定する

  • タグの設計と使用を確認する

パフォーマンスへの影響を評価する:

  • QueryRequestsTotal成功率

  • MemoryUtilization の相関を確認する

  • CPUUtilization パターンを確認する

  • QueryResponseVolume の傾向を分析する

Cardinality ソースを特定する:

データモデルを確認します。

  • SeriesCardinality が最も高いバケットはどれですか?

  • 一意の値数が多いタグはどれですか?

  • 不要なタグはありますか?

  • タグ値は無制限ですか (UUIDs、タイムスタンプなど)?

現在の設定を確認する:

最適化パラメータを確認します。

  • storage-series-id-set-cache-size: 現在の値?

  • influxql-max-select-series: ランナウェイクエリを制限していますか?

  • storage-max-index-log-file-size: 基数に適していますか?

解決ステップ:

設定の即時変更:

優先度 1: シリーズ処理の最適化

  • storage-series-id-set-cache-size: 1500-2000

  • storage-series-file-max-concurrent-snapshot-compactions: 6~8

  • storage-max-index-log-file-size: 2,097,152 (2MB)

優先度 2: 保護制限を設定する

  • influxql-max-select-series: 10000

  • influxql-max-select-buckets: 1000

  • query-concurrency: メモリが制約されている場合は減らす

優先度 3: リソースを増やす

  • 次のインスタンス階層にスケールする

  • メモリ割り当てを増やす

  • 12K IOPS ストレージ層を検討する

移行計画 (> 10Mシリーズの場合):

  • InfluxDB 3.0 は優れた高カーディナリティパフォーマンスを提供します

  • 移行タイムラインを計画する (2~3 か月)

  • 最初にデータのサブセットを使用してテストする

  • 移行用のアプリケーションを準備する

  • InfluxDB 3.0 は、数十億のシリーズに最適化された列指向ストレージを使用します。

シナリオ: クエリキューのビルドアップ

CloudWatch メトリクスを確認します。

  • result=queue_error の増加を伴う QueryRequestsTotal (クエリは拒否されます)

  • Status=429 または Status=503 の APIRequestRate (サービスが利用できない/リクエストが多すぎる)

  • CPUUtilization が上昇する (> 70%) 可能性があり、リソースの飽和を示す

  • MemoryUtilization が高い (> 70%) クエリ容量を制限する可能性があります

  • 大きなレスポンスサイズを示す QueryResponseVolume (クエリに過剰なリソースがかかる)

調査ステップ:

キューと同時実行メトリクスを分析する:

  • QueryRequestsTotal内訳を確認します。

    • queue_error 数が多い場合は、クエリが拒否されていることを示します。

    • 成功率をベースラインと比較します - 低下していますか?

    • runtime_error の増加を確認する (起動後にクエリが失敗する)

  • APIRequestRate パターンをモニタリングします。

    • Status=429 (リクエストが多すぎる) または Status=503 (サービスを利用できない) を探します。

    • 拒否が発生しているエンドポイントを特定する

    • 時間の経過に伴うリクエストレートの傾向を確認する

リソース使用率の確認:

  • 高キュー期間中の CPUUtilization:

    • > 70% の場合、クエリは CPU バインドされており、より速く実行できない

    • < 50% の場合、キューの制限が制限しすぎる可能性があります

  • MemoryUtilization の相関関係:

    • メモリが多いとクエリの同時実行が制限されている可能性があります

    • HeapMemoryUsageActiveMemoryAllocation でメモリ負荷を確認する

  • TotalIOpsPerSec パターン:

    • I/O が高いとクエリの実行が遅くなる可能性があります

    • クエリが I/O バインドされているかどうかを確認する

クエリパターンを特定する:

  • QueryResponseVolume を確認します。

    • クエリは過剰なデータを返していますか (> 1MB)?

    • レスポンスボリュームが最大のエンドポイントを特定する

    • 高価なクエリのパターンを探す

  • QueryRequestsTotal レートを分析する:

    • 1 秒あたりのクエリレートはどれくらいですか?

    • バーストパターンや持続的な高負荷はありますか?

    • サイズ表からインスタンス容量と比較する

  • エンドポイント別に APIRequestRate を確認します。

    • トラフィックが最も高いクエリエンドポイントはどれですか?

    • 重複または冗長なクエリはありますか?

リソースの可用性を確認する:

  • 現在のメトリクスをサイジングテーブルのレコメンデーションと比較します。

    • SeriesCardinality とインスタンスクラスの容量

    • クエリレートと 1 秒あたりの推奨クエリ数

    • CPUUtilizationMemoryUtilization ヘッドルーム

  • IOPS 容量を確認します。

    • TotalIOpsPerSec には 30% のヘッドルームが必要です

    • クエリがディスク I/O で待機しているかどうかを確認する

解決ステップ:

設定の変更:

優先度 1: キュー容量を増やす

  • query-queue-size: 4096 (デフォルト 1024 から)

優先度 2: 同時実行数を増やす (リソースで許可されている場合)

  • クエリ同時実行数: vCPUs の 75% に増加

  • 例: 16 vCPU → query-concurrency = 12

  • CPUUtilization が変更後も < 80% のままであることを確認する

  • MemoryUtilization が変更後も < 80% のままであることを確認する

優先度 3: クエリ実行の最適化

  • query-memory-bytes: 適切な割り当てを確保する

  • storage-series-id-set-cache-size: 1000-1500

  • http-read-timeout: 120s (早期タイムアウトの防止)

優先度 4: 保護制限を設定する

  • influxql-max-select-series: 10000

  • influxql-max-select-point: 100000000

アプリケーションレベルのソリューション:

  • クエリ結果キャッシュを実装する (Redis、Memcached)

    • 頻繁に実行されるクエリの結果をキャッシュする

    • データ鮮度要件に基づいて適切な TTLs を設定する

    • キャッシュヒットレートをモニタリングする

  • 連続クエリを使用して一般的なパターンを事前集計する

    • 一般的な集計を事前計算する

    • raw データの代わりに事前集計データをクエリする

  • 大きな結果セットのページ分割を追加する

    • 初期クエリサイズを制限する

    • オンデマンドで追加データをロードする

  • ユーザー/ダッシュボードごとにクエリレート制限を実装する

    • シングルユーザーがシステムに負担をかけないようにする

    • 公平使用クォータを設定する

  • 履歴クエリにダウンサンプリングされたデータを使用する

    • 古い時間範囲の低解像度データをクエリする

    • 最近のデータ用にフル解像度クエリを予約する

スケーリングの決定:

  • CPUUtilization > 70% が持続する場合: より大きなインスタンスにスケールする

  • MemoryUtilization > 70% が持続している場合: メモリ最適化インスタンスにスケールする

  • クエリレートがインスタンス容量を超える場合: サイジングテーブルごとに次の階層にスケールする