Back to BlogCTOが遅いクエリを見つけて修正する方法 — ファイナンス部門から報告される前に
Analytics8 min read

CTOが遅いクエリを見つけて修正する方法 — ファイナンス部門から報告される前に

NeonEdgeは、証明可能性フェアなクラッシュゲームを中心に構築された、エストニアのタリンに本拠地を置く暗号ネイティブのiGamingプラットフォームであり、ETH、Tron、Polygon、SOLの複数チェーンサポートを実装しています。プラットフォームは約15,000人の月間アクティブユーザーを提供し、週間約$500万のGGRを実行しています。これは技術志向で人員が限定されたショップです — 2人のエンジニアがデータインフラストラクチャ全体を管理し、Priya Desai(CTO兼Head of Data)は、プロダクトとファイナンス部門の両方が、期待されているものが予想より遅い場合、呼びかけます。

利用製品: Query Performance Analytics, Infrastructure Monitor, Cost Optimization

20分 | 完全な調査時間

3 | 冷始から特定された問題クエリ

12倍 | 最適化展開後の平均高速化


チャレンジ

苦情は同じ48時間以内に、2つの異なる方向から到着しました。プロダクトチームはSlackスレッドを提出し、プレイヤーアクティビティレポートが遅く感じる — 「クリックして待つことがあり、その後諦める」と言いました。ファイナンスはより直率でした:週間GGR調整レポートはロード中にタイムアウトし始めており、CFOは半分レンダリングされたページをスクリーンショットするのに頼ってからそれがクラッシュしました。エラーコードなし、明らかな失敗なし — 恥ずかしいから壊れたに静かに越えた遅さだけです。

このような問題のための標準的な診断ツールキットはPriyaにとって高速ではありませんでした。マルチチェーンデータスタック全体でクエリレイテンシを追跡することは、3つの異なるサービスからログを関連付け、クラスターリソース利用率を手動でチェック、その上流変換がどの下流レポートに時間を追加しているかを再構築することを意味していました。良い日に右側のログが既に表示されている場合、これは2時間から3時間かかりました。悪い日 — 遅いクエリが負荷の下でのみ現れる種類の日 — それは一日中最後まで拡張することができました。

構造的な問題は、NeonEdgeのデータスタックが有機的に成長したことでした。初期のエンジニアリング決定 — 5,000 MAUで合理的だった — プラットフォームが15,000を越えるまでに再検討されていませんでした。誰もインデックスをスキップするか、コアレポートにテーブルスキャンを書くという意識的な選択をしていませんでした。それはちょうど起こった、徐々に、プロダクトをシップするのに焦点を当てている間のプラットフォーム全体のデータアクセスパターンを監査するのではなく。

「私たちはデータチーム2人で、15,000人のユーザーと週$500万のGGRのためのインフラストラクチャを実行しています。遅いクエリを追跡するために1日を費やす贅沢はありません。20分以内に私の画面に選択肢が必要です。さもなければ、問題は次のスプリントまで座ります。」

— Priya Desai, CTO, NeonEdge


ソリューション

Priyaはゲーミングマインドを開き、平白な用語で症状を説明しました:レポートはボード全体で遅い、誰がどのクエリが犯人であるかを知らない、問題は2日間エスカレーションされています。Gaming Mind AIはNeonEdgeのインフラストラクチャテレメトリに接続され、最も直接的な診断質問で始まりました — 現在、スタック全体で最も実行時間を消費しているクエリです。

調査がどのように展開されたかここにあります:


Priya: 「レポートはボード全体で遅いです。最初に見るべき場所はどこですか?」

ランク クエリ名 平均実行時間 p99時間 実行回数/日 コーラー クエリ時間の%
1 GGR調整レポート 41.2秒 68.4秒 4 ファイナンス 24%
2 プレイヤーアクティビティレポート 31.0秒 54.1秒 8 プロダクト 22%
3 プレイヤーコホートレポート 28.3秒 47.6秒 6 プロダクト / CRM 12%
4 アフィリエイト収益帰属 5.8秒 11.2秒 12 マーケティング 4%
5 日中アクティブユーザーサマリー 5.1秒 9.7秒 24 オペレーション 4%
6 チェーン決済調整 4.9秒 9.1秒 6 ファイナンス 3%
7 チャーンリスクスコアリフレッシュ 4.4秒 8.3秒 2 CRM 2%
8 ウォレット残高スナップショット 3.8秒 7.2秒 48 オペレーション 2%
9 ボーナス利用率報告書 3.2秒 6.4秒 4 プロダクト 1%
10 新規登録ファネル 2.9秒 5.8秒 24 マーケティング 1%
(その他すべて) — < 2.0秒 < 4.0秒 — その他 25%
上位3計 〜100秒合計 58%
上位10計 71%

⚠️ Gaming Mind flags: 上位3つのクエリはクエリ実行時間合計の58%を占めます。分布は著しく不均一です — クエリ1–3は平均28–41秒の各、クエリ4–10は平均6秒未満の合計です。上位3つを修正すると、他の何にも触れずにクエリ時間全体が約58%削減されます。

Gaming Mindの最初の応答は、前の7日間のクエリ実行をカバーするランク付けレイテンシリーダーボードでした。上位10の最も遅いクエリはクエリ実行時間合計の71%を占めていたが、分布は著しく不均一でした — 3つの最悪のオフェンダーは平均28から41秒の各、一方、番号4から10は平均6秒未満を合計しました。Gaming Mindは上位3つを即座に調査する価値があることだけとしてフラグを付け、それらを修正するとクエリ時間の合計を約58%削減しますが、何も他に触れずに。Priyaは90秒以内に彼女の開始点を持っていました。


Priya: 「最遅いものについて教えてください。」

クエリ: GGR調整レポート

ステージ 操作 スキャン行 出力行 ステージ時間 累積時間
1 フルテーブルスキャン — transaction_ledger 84,200,000 84,200,000 28.4秒 28.4秒
2 フィルター: 今週のレコード 84,200,000 312,400 6.1秒 34.5秒
3 参加: チェーンメタデータ 312,400 312,400 2.8秒 37.3秒
4 集計: チェーンおよびゲームタイプ別GGR 312,400 48 1.9秒 39.2秒
5 出力形式 48 48 2.0秒 41.2秒
診断 詳細
スキャンされたデータ日付範囲 プラットフォーム起動(18ヶ月)から現在
必要な日付範囲 現在の週のみ
スキャン前に適用された日付フィルタ いいえ
アクセスパターン分類 フィルタリングされていない過去スキャン
重大度 🔴高 — 追加ヘビーレジャーアーキテクチャで既知のパフォーマンスアンチパターン
根本原因 スキャン前のWHERE日付述語なし — 18ヶ月前の設計決定が再検討されていません

⚠️ Gaming Mind flags: GGR調整レポート — ファイナンスが苦情を言った正確なクエリ — 現在の週のみが必要な質問に答えるために、18ヶ月のトランザクション履歴全体でフルテーブルスキャンを実行しています。スキャン前に日付フィルタを適用することは、必要とされる単一の修正です。これは、Finance CFOタイムアウトの根本原因です。

最悪のクエリはGGR調整レポート — ファイナンスが不満を言ったもの。Gaming Mindはその実行計画をステージごとに分解しました:フルテーブルスキャンはレジャーのトランザクション内のすべての行に接触していました、毎回レポートを実行する包括的な記録を含め、プラットフォーム発射にまでさかのぼります。クエリはスキャン前に適用された日付フィルタを持っていなかったため、現在の週のみが必要な質問に答えるために、18ヶ月のトランザクション履歴全体を処理していました。Gaming Mindはこれを高重大度アクセスパターンとして分類し、追加ヘビーレジャーアーキテクチャの既知のパフォーマンスアンチパターンとしてラベル付けしました。根本原因は、18ヶ月前の1つの設計決定で、誰も再検討していませんでした。


Priya: 「第2番目の何が起こっているか?」

クエリ: プレイヤーアクティビティレポート

ステージ 操作 入力行 出力行 ステージ時間 累積時間
1 スキャン: player_sessions 2,100,000 2,100,000 4.2秒 4.2秒
2 参加: game_events(幅広い、フィルター前) 2,100,000 18,700,000 12.8秒 17.0秒
3 参加: wallet_activity 18,700,000 18,700,000 7.1秒 24.1秒
4 フィルター: プレイヤーセグメント + 日付範囲 18,700,000 480,000 4.6秒 28.7秒
5 集計+形式 480,000 920 2.3秒 31.0秒
診断 詳細
ボトルネックステージ ステージ2 — フィルタが狭まる前に参加が拡張します
中間結果セットピーク 18,700,000行(〜3倍必要なサイズ)
原因 参加順序が広い参加を最も狭いフィルタの前に配置します
修正 プレイヤーセグメント + 日付フィルタをgame_eventsとの参加前に適用します
修正後の推定中間サイズ 〜6,200,000行
修正後の推定実行時間 < 5秒
メモリ削減 ~66%

⚠️ Gaming Mind flags: プレイヤーアクティビティレポートの参加は、フィルタ前に拡張 — 必要なサイズの約3倍の中間結果セットを生成します。参加シーケンスの2ステップを逆順する(最も狭いフィルタを最初に適用) — 中間メモリ消費を約3分の2削減し、31秒から5秒未満に実行時間をもたらします。

2番目の問題クエリはプロダクトチームがフラグを付けたプレイヤーアクティビティレポートをフィードしました。Gaming Mindは、フィルタ前に拡張していたマルチステージ参加を特定しました — ドロップダウンする前に広い中間結果セットを処理し、プレイヤーセグメントおよび日付範囲によって狭くなります。参加順序は必要以上に約3倍大きい中間テーブルを生成していました。Gaming Mindは、結果セットが膨張する正確なステージに注釈を付け、参加シーケンスの2ステップを逆順する — 最初に最も狭いフィルタを適用 — 中間メモリ消費を約3分の2削減し、30秒から5秒未満に実行時間をもたらします。


Priya: 「そして第3番目?」

クエリ: プレイヤーコホートレポート

列 個々のインデックス存在 複合インデックスの一部 カーディナリティ 交差解決に費やされた時間
chain_identifier はい いいえ 低(4値) —
registration_date はい いいえ 高(540日) —
game_category はい いいえ 中(12値) —
chain_identifier + registration_date + game_category いいえ いいえ — 実行あたり〜19秒
診断 詳細
欠落インデックスタイプ (chain_identifier, registration_date, game_category)上の複合インデックス
現在の解決方法 クエリ時間での手動交差
複合インデックスでの推定実行時間 < 3秒
このカラム組み合わせを使用するプラットフォーム全体でのクエリ数 14個の異なるクエリ
1つの複合インデックスを追加して加速されたクエリ数 13
重大度 🔴高 — 単一修正、プラットフォーム全体の影響

⚠️ Gaming Mind flags: このクエリのすべてのバージョンに表示される3つの列 — chain_identifier、registration_date、およびgame_category — 個別にインデックス付けされていますが、複合として決してではありません。1つの複合インデックスを追加すると、手動交差作業が排除され、コホートレポートと同時にプラットフォーム全体で13の他のクエリが加速されます。

3番目の遅いクエリはプレイヤーコホートレポートであり、プロダクトとCRMチームの両方によって週間で使用されました。Gaming Mindは、インデックスカバレッジギャップを表面化させました:このクエリのすべてのバージョンに表示される3つの列 — チェーン識別子、登録日、およびゲームカテゴリ — 個別にインデックス付けされていますが、複合としてはまったくありません。すべての実行は、1つの複合インデックスが完全に排除するであろう作業を、クエリ時に手動で交差を解決していました。Gaming Mindは、この列の組み合わせが、プラットフォーム全体で14の異なるクエリに表示されることに注意し、単一のインデックス追加がコホートレポートと同時にプラットフォーム全体で13の他のクエリを加速することを意味することに注意しました。


Priya: 「これらが実行されている間、クラスター全体のリソース消費を示してください。」

14日間のリソース利用 — スケジュールされたレポートウィンドウピーク

日付 レポートウィンドウ CPUピーク メモリピーク I/Oピーク 同時遅いクエリ キューカスケード?
日1 09:00–09:45 74% 71% 68% 1 いいえ
日2 09:00–09:45 78% 76% 72% 1 いいえ
日3 09:00–09:45 81% 79% 75% 2 いいえ
日4 09:00–09:45 76% 74% 71% 1 いいえ
日5 09:00–09:45 82% 89% 84% 2 はい
日6 09:00–09:45 77% 75% 73% 1 いいえ
日7 09:00–09:45 79% 77% 74% 1 いいえ
日8 09:00–09:45 83% 89% 85% 2 はい
日9 09:00–09:45 75% 73% 70% 1 いいえ
日10 09:00–09:45 84% 91% 87% 2 はい
日11–14 09:00–09:45 72–78% 70–76% 67–73% 0–1 いいえ

リスクサマリー

メトリック 値
同時遅いクエリ実行中のメモリ天井 89–91%
過去10日間のカスケードイベント 3
カスケードトリガー GGR調整+プレイヤーアクティビティ同時実行
リスク分類 🔴クラスター安定性リスク

⚠️ Gaming Mind flags: すべてのCPUおよびI/O利用スパイクはスケジュールされたレポート実行と一致します。3つの場合で過去10日間、GGR調整とプレイヤーアクティビティレポートの同時実行は、他のワークロードにカスケードした遅延をトリガーしたメモリを89%上に押しやりました — Finance CFOタイムアウトを含む。これは単なる遅いクエリの問題ではありません。これはクラスター安定性リスクです。

Gaming Mindは、過去2週間のNeonEdgeのクラスターリソースヒートマップに3つの遅いクエリウィンドウをオーバーレイしました。パターンは間違いなかったです:すべてのCPUおよびI/O利用スパイクはスケジュールされたレポート実行と一致し、クラスターは最初の2つのクエリの同時実行中にメモリのほぼ容量に達していました。過去10日間で3つの場合、GGR調整とプレイヤーアクティビティレポートの同時実行は、他のワークロード(Finance CFOが経験したタイムアウトを含む)にカスケードしたクエリキュー遅延をトリガーしたメモリ89%以上を押しやりました。これは単なる遅いクエリの問題ではありませんでした。それはクラスター安定性リスクでした。


Priya: 「これら3つの修正を優先する方法? どれを最初にしますか?」

修正 クエリ 推定高速化 実装労力 展開リスク 影響を受けるクエリ 推奨順序
複合インデックスを追加(chain_id + reg_date + game_cat) プレイヤーコホートレポート ~9倍 低(< 1時間) 非常に低い 14クエリ 1番目 — 今日展開
参加順序を書き直す(拡張前のフィルタ) プレイヤーアクティビティレポート ~6倍 中(3–4時間) 低(ステージングテスト) 1クエリ 2番目 — ステージング後に展開
スキャン前に日付述語を追加 GGR調整 ~12倍 中(2–3時間) 中(ファイナンススケジュール依存性) 1クエリ+キャッシング適格性 3番目 — 次のファイナンスメンテナンスウィンドウ

スコアリング詳細

修正 高速化スコア 労力スコア リスクスコア 影響幅スコア 総優先度スコア
複合インデックス 3/5 5/5 5/5 5/5 18/20
参加の書き直し 4/5 3/5 4/5 2/5 13/20
日付述語 5/5 3/5 3/5 3/5 14/20

⚠️ Gaming Mind flags: 複合インデックスを最初に展開 — 最も低いリスク、最速の実装、プラットフォームクエリ全体で最も広い正の影響。GGR参加の書き直しは最高の個々の高速化(推定12倍)を持っていますが、展開前にファイナンスの正確なレポートパラメータに対してステージング検証が必要です。テーブルスキャン修正は、展開前にファイナンスのメンテナンスウィンドウと調整される必要があります。

Gaming Mindは、優先行列を生成し、4つの次元で各修正をスコアリング:推定高速化、実装複雑性、展開リスク、および下流の影響の幅。複合インデックスは最初にランク付けされました — 最も低いリスク、最速展開、およびプラットフォームの14の影響を受けたクエリ全体の最も広い正の影響。GGR参加の書き直しは2番目にランク付けされました:12倍の推定改善での最高の個々の高速化、しかし展開前のファイナンスの正確なレポートパラメータに対する慎重なテスト。フィルタリングされていないテーブルスキャン修正は3番目にランク付けされました — また高い影響、しかし固定週間スケジュール上で実行されるレポートファイナンスへの日付フィルタ変更を含み、展開ウィンドウと調整される必要があることを意味します。Gaming Mindは、インデックスを最初に展開し、参加の書き直しをステージングテストし、次のファイナンスメンテナンスウィンドウに対するテーブルスキャン修正をスケジュールすることを推奨しました。


Priya: 「3つすべてを修正した場合、推定合計高速化は何ですか?」

予測最適化後のパフォーマンス

クエリ 前 後 高速化
GGR調整レポート 41.2秒 3.4秒 ~12倍
プレイヤーアクティビティレポート 31.0秒 4.8秒 ~6倍
プレイヤーコホートレポート 28.3秒 3.1秒 ~9倍
平均レポート生成を合わせた 45.0秒 < 4.0秒 > 11倍

クラスターリソースヘッドルーム

メトリック 修正前 修正後 変化
メモリ利用(同時レポート実行) 89%(天井) ~34% -55pp
キューカスケードイベント(10日あたり) 3 0(予測) 排除
CFOレポートタイムアウトリスク アクティブ なし 排除

2次利益 — GGR調整キャッシング

詳細 値
修正後のキャッシング適格性 はい(日付述語を事前計算に対応)
推定月間計算コスト削減 ~60%
このメリットをフラグするモジュール Cost Optimization

⚠️ Gaming Mind flags: 3つの修正は、平均レポート生成時間を45秒から4秒未満に削減すると予測されます — 90%以上の削減。ピークスケジュール実行中のクラスターメモリは89%から~34%に落ちるため、カスケードキューリスクを完全に排除します。GGR調整修正はまた、事前計算キャッシング適格性を解放し、Gaming Mind's Cost Optimizationモジュールは、その報告書の月間計算支出を約60%削減することを推定しています。

Gaming Mindはその複合効果をモデル化しました。3つの修正は、平均レポート生成時間を45秒から4秒未満に削減すると予測されます — 90%以上の削減。ピークスケジュール実行中のクラスターメモリ利用は89%の現在の天井から~34%まで落ちると予想され、キューカスケードリスクを完全に排除します。予測はまた2次利益をフラグしました:フィルタリングされていないテーブルスキャンが解決され、GGR調整レポートは事前計算キャッシング対応になるだろう、Gaming Mind's Cost Optimizationモジュールは月単位で約60%だけその報告書の計算支出を削減することを推定しています。

「ログファイルで午後を費やすことを期待して歩いて来ました。Gaming Mindは3つのクエリをランク付け、プロファイル、そして20分以内に優先度を付けていました。コードを書く必要があっただけです。」

— Priya Desai


結果

冷始から20分で完了した調査

Priyaはテレメトリ前に3つのクエリをランク付けし、冷始から単一の会話のデプロイメント命令修正リストを生成しました。ログファイルなし、サポートチケットなし、他の仕事から引き出されたエンジニアなし。

3つの異なる問題型全体で特定された3つの根本原因

各遅いクエリは構造的に異なる原因を持っていました — フィルタリングされていない過去スキャン、最適でない参加順序、および欠落した複合インデックス。Gaming Mindはすべて3つを診断し、平白な用語で各々を説明しました。調査は過去48時間にわたって報告された症状だけではなく、数ヶ月間蓄積されていた問題を表面化させました。

修正がデプロイされた後の12倍平均高速化

複合インデックスは同じ午後ライブになりました。参加の書き直しはステージングテストを完成させ、次の朝に展開されました。テーブルスキャン修正はファイナンスと調整され、次のメンテナンスウィンドウに展開されました。すべての3つの変更の後、平均レポート生成時間は45秒から3秒40秒に落ちました — プラットフォームの独自のテレメトリに対して測定された12倍の改善。

クラスター安定性リスクがインシデントになる前に排除

メモリ利用の天井 — 同時レポート実行中に静かに89%を押していた — 修正後34%に落ちました。過去10日間で発生した3つのカスケードイベントは、高トラフィックの週末セッション中に完全なレポート停止の初期警告兆候でした。Gaming Mindはリソースヒートマップ分析からこのリスクを表面化させました;それなしで、次のインシデントは、それが我々を捕らえる前に我々を捕まえ始めてあったかもしれません。

月間計算コストが調整レポート用に60%低下すると予測

Cost OptimizationモジュールはそれがGGR調整レポート用の事前計算キャッシング対応になることを、修正後のフラグを付けました。Priyaのチームは初期修正の2週間後にキャッシング層を実装し、翌月のそのレポートワークロードのインフラストラクチャ料金は、前のベースラインの38%で来ました — 予測より少し良い。

「クラスターは、実在のアウタージから3つ悪い日曜日でした。データ管理は遅いクエリを見つけたが、リソースヒートマップがリスク を見つけました。それはその部分が実際に怖かった — そして部分は、我々はそれが我々を計算する前に捕まえて最も幸せなことであった。」

— Priya Desai, CTO, NeonEdge

Want to see how Gaming Mind AI can help your operation?

Get a Demo