クエリインサイトは、スロークエリログと hg_table_info システムテーブルを組み合わせて、クエリの動作の全体像 (リソース消費、テーブルメタデータ、実行計画、ロックアクティビティ) を提供します。これを使用して、スロークエリの診断、障害の調査、および DDL 競合やテーブルロックがクエリの失敗原因であるかどうかを判断します。
前提条件
開始する前に、次の条件を満たしていることを確認してください。
Hologres インスタンスにログインしていること。詳細については、「インスタンスへのログイン」をご参照ください。
スロークエリログを照会するために必要な権限があること。詳細については、「スロークエリログの表示と分析」をご参照ください。
データ収集のしきい値
クエリインサイトは 2 つのデータソースからデータを取得し、それぞれに独自の収集ルールがあります。クエリを実行する前にこれらのしきい値を確認し、いつデータが利用可能になるかを把握してください。
| データ | 収集ルール | 注意 |
|---|---|---|
| DML ステートメント | 実行時間 > 100 ms | デフォルトのスロークエリログのしきい値 |
| DDL ステートメント | すべての DDL ステートメントを収集 | 実行時間が 1 秒を超えるステートメントのみが検索結果に表示されます |
| 実行計画 | 実行時間 > 10 秒 | プランはスロークエリログの Plan フィールドから取得されます |
| テーブルメタデータ | 毎朝 1 回収集 | データは T+1 (翌日) に利用可能になります。本日作成されたテーブルは、明日から照会可能になります |
| DDL 競合分析 | クエリ実行の前後 1 分間のウィンドウをチェックします | — |
クエリインサイトへのアクセス
クエリインサイトへの直接アクセス
クエリインサイトは HoloWeb の 3 つの場所から利用できます。クエリインサイトページでは、[クエリメタデータ] と [テーブルメタデータ] を表示し、[プランの可視化] と [テーブルロック分析] を実行できます。
[診断と最適化] から直接アクセス:
Hologres 管理コンソールにログインします。
トップメニューバーの左側メニューで、対象のリージョンを選択します。
[Go to HoloWeb] をクリックします。
トップメニューで [診断と最適化] を選択します。次に、左側メニューで、[Metadata Warehouse Analysis] > [クエリインサイト] をクリックします。

クエリインサイトへの移動
[SQL エディター] から移動:
HoloWeb の SQL エディターでは、実行時間が 1 秒を超え、クエリ ID を含む SQL ステートメントにクエリインサイトへのリンクが表示されます。リンクをクリックすると、クエリインサイトで直接クエリが開きます。
[過去の低速クエリ] から移動:
[過去の低速クエリ] ページのクエリリストで、対象クエリの [Actions] 列にある
アイコンをクリックしてクエリインサイトに移動します。
クエリメタデータ
クエリメタデータは Hologres のスロークエリログから取得されます。 [クエリメタデータ] タブで、[Instance Name] と [クエリ ID] を選択し、[Search] をクリックします。
このタブには、次のセクションが表示されます:
[Basic information]
クエリのインスタンス ID、データベース、および Hologres バージョンを表示します。
[Query information]
スロークエリログから収集された、クエリのユーザー、実行ステータス、および使用された実行エンジンを表示します。
[リソース消費]
スキャン機能や CPU 消費など、クエリ実行中のリソース使用状況をスロークエリログから表示します。
[Other information]
クライアント IP アドレスなど、スロークエリログからの追加のメタデータを表示します。
[SQL]
完全な SQL ステートメントを表示します。より読みやすい表示にするにはフォーマットオプションを使用するか、ステートメントを直接コピーしてください。
[Query details]
クエリがパラメーター付きで実行された場合、このセクションには特定のパラメーター値が表示されます。必要に応じて、パラメーターを SQL ステートメントにマージします。
[実行計画]
スロークエリログの Plan フィールドから実行計画を表示します。
実行計画は、実行時間が 10 秒を超えるクエリに対してのみ収集されます。
プランの可視化機能を使用して、プランをグラフィカルに表示します。実行計画の読み方については、「EXPLAIN と EXPLAIN ANALYZE」をご参照ください。
[Statistics]
スロークエリログの Statistics フィールドから、スキャンされた行数や各オペレーターの実行時間など、オペレーターレベルの消費データを表示します。このデータを使用して、どのオペレーターが最も多くのリソースを消費しているかを特定します。
[読み書きテーブル情報]
クエリによって読み書きされたテーブルを一覧表示します。いずれかのリンクをクリックして、追加の分析に移動します。
[テーブルメタデータ]:選択したテーブルのテーブルメタデータページを開きます。テーブルメタデータは
hg_table_infoテーブルから取得され、T+1 ベースで更新されます。つまり、本日作成されたテーブルは明日まで照会できません。[テーブルロック分析]:テーブルロック分析ページを開き、クエリがデータ操作言語 (DML) 関連のロックを保持しているかどうかを確認します。これは、固定プランのクエリが、Hologres 実行エンジン (HQE) からの同時 DML 操作によって低速になった場合に役立ちます。
[DDL 競合分析]
クエリに関係するテーブルが、クエリの実行時間の前後 1 分以内にデータ定義言語 (DDL) 操作を受けたかどうかを表示します。クエリがエラーメッセージ Query is canceled で失敗した場合、このセクションは DDL 競合が失敗の原因であるかどうかを確認するのに役立ちます。
[Error messages]
クエリが失敗した場合、エラーの詳細がここに表示されます。HoloWeb のクエリインサイトは、SQL エラーの解決に役立つ失敗の原因と修正の提案を自動的に追加します。一般的な SQL エラーについては、「Hologres SQL ステートメントのよくある質問」をご参照ください。
テーブルメタデータ
テーブルメタデータは、毎朝 1 回更新される hg_table_info システムテーブルから取得されます。データは T+1 ベースで利用可能です。
テーブルメタデータに移動するには、クエリメタデータの [読み書きテーブル情報] セクションにある [テーブルメタデータ] リンクをクリックするか、インスタンス名、データベース、スキーマ、およびメタデータ収集時間を直接入力します。
このタブには、次のセクションが表示されます:
[Basic information]:テーブル名、テーブルがパーティション分割されているかどうか、およびパーティションの詳細。
[Table Metadata Information]:テーブルの作成時刻、メタデータの収集時刻、およびストレージ容量。
[Table Property Information]:プライマリキー (PK) やディストリビューションキーなど、テーブルに設定されたインデックス。
[Table Schema Information]:フィールド、フィールドタイプ、null 許容性、およびデフォルト値。
プランの可視化
プランの可視化は、スロークエリログの Plan フィールドをグラフィカルな実行計画として表示します。
プランデータは、10 秒以上実行されるクエリに対してのみ収集されます。
どこから始めるか:まずクエリメタデータの [Statistics] セクションを確認します。ここにはオペレーターレベルの行数と実行時間が表示されるため、完全なプランのグラフを調べる前に、最もリソースを消費するオペレーターを特定できます。
実行計画の概念については、「EXPLAIN と EXPLAIN ANALYZE」をご参照ください。
テーブルロック分析
テーブルロック分析は、クエリが Hologres 実行エンジン (HQE) で DML 操作 (INSERT、UPDATE、または DELETE) を生成したかどうかを確認します。テーブルに SDK または HQE の読み取りクエリと HQE の DML クエリの両方が同時に実行されている場合、ロックが発生します。
テーブルロック分析は DML 関連のロックのみを検出し、DDL ロックは検出しません。
ロック競合が検出された場合は、同じテーブルに対して SDK クエリと HQE DML 操作を同時に実行しないでください。
トラブルシューティング
エラー: relation with OID xxx does not exist
このエラーは、クエリに関係するテーブルが TRUNCATE または DROP 操作の対象となり、テーブルのオブジェクト識別子 (OID) が変更された場合に発生します。
調査するには:クエリインサイトでクエリ ID を入力し、[DDL 競合分析] セクションで、クエリ実行時に DDL ロックが存在したかどうかを確認してください。

エラー: query is canceled
このエラーは、クエリの実行中に、クエリに関係するテーブルが TRUNCATE や DROP などの DDL 操作を受けた場合に発生します。
調査するには:クエリインサイトでクエリ ID を入力します。 [クエリメタデータ] タブで [DDL 競合分析] セクションを開くと、影響を受けるテーブルに対する DDL 操作が表示されます。

SDK SQL ステートメントの高レイテンシー
SDK の SQL ステートメントの実行に想定以上の時間がかかる場合は、ロック競合がないか確認してください。
調査するには: [読み書きテーブル情報] セクションで、[テーブルロック分析] をクリックしてください。

分析の結果、HQE からの同時 DML ステートメントが示された場合、HQE の DML 操作がテーブルロックを取得し、SDK クエリが待機状態になったことを意味します。同じテーブルに対して両方の操作タイプを同時に実行しないでください。
HQE の DML 操作が見つからない場合、レイテンシーはテーブルロックが原因ではありません。詳細な調査については、「書き込みおよび更新パフォーマンスの最適化」をご参照ください。
エラー: Dispatch query failed: The shards are incomplete
このエラーは、Hologres インスタンス内の 1 つ以上のシャードが、通常は coredump の結果として、不整合な状態になったことを示します。この問題は、古いバージョン (r4.1.10 など) のソフトウェアの不具合が原因であり、接続数の問題とは関係ありません。
この問題を解決するには、Hologres インスタンスをバージョン 4.1.12 以降にアップグレードしてください。最高の安定性を得るために、バージョン 4.1.18 以降へのアップグレードを推奨します。手順については、「インスタンスバージョンのアップグレード」をご参照ください。