Hologres はスロークエリログを提供しており、デフォルトでは実行に 100 ミリ秒以上かかる DML 文と、すべての DDL 文が記録されます。Hologres はこのログデータを利用して SQL 診断機能を提供します。この機能により、さまざまなディメンションからトレンドや詳細を分析し、インスタンスの使用状況を把握してパフォーマンス向上のための最適化を行うことができます。本トピックでは、SQL 診断の使用方法について説明します。
機能と推奨事項
SQL 診断は、以下の項目をサポートしています。
|
診断項目 |
説明 |
合計クエリ数 |
選択した時間範囲内の合計クエリ数です。 |
成功したクエリ |
選択した時間範囲内に成功したクエリの合計数です。 |
失敗したクエリ |
選択した時間範囲内に失敗したクエリの合計数です。 |
失敗したクエリの詳細 |
エラーコードとそれに対応する失敗回数を表示し、問題のあるクエリのトラブルシューティングに役立ちます。また、代表的なクエリと詳細なエラー情報も表示します。 詳細については Query Insight にアクセスするか、「エラーコードリファレンス」を参照して具体的な原因を特定し、インスタンスの安定性を向上させることができます。 |
クエリの成功/失敗トレンド |
選択した時間範囲における成功したクエリと失敗したクエリの比率を表示し、全体的なクエリパフォーマンスの評価に役立ちます。 |
クエリ実行時間の分布トレンド |
選択した時間範囲におけるクエリ実行時間の分布トレンドを表示します。 デフォルトでは、 |
DML トレンド |
DML クエリの実行トレンドを表示します。 デフォルトでは、 |
DDL トレンド |
DDL クエリの実行トレンドを表示します。 以下の DDL 文のみが含まれます: |
クエリソースアプリケーションの分布またはトレンド |
最も多くのクエリを生成しているアプリケーションを分析します。異なるタスクタイプに別々の |
ユーザーベースのクエリ分布またはトレンド |
ユーザーのクエリ動作を明確に分析します。1 つのアカウントを共有するのではなく、異なるタスクに別々のユーザー名を使用することで、異常検出を簡素化します。 |
実行エンジンのクエリトレンド |
選択した時間範囲における実行エンジン別のクエリ実行トレンドを表示します。 Hologres は、HQE、PQE、SDK、FixedQE など、クエリの特性に基づいて異なる実行エンジンを使用します。詳細については、「サービスアーキテクチャ」をご参照ください。可能な限り PQE クエリを避け、HQE クエリに書き換えることで、パフォーマンスを向上させることができます。 |
注意事項
-
SQL 診断では、以下のフィルターを使用してシステム関連の SQL 文が除外されます。
WHERE usename != 'system' AND client_addr != '127.0.0.1' AND (application_name IS NULL OR application_name NOT IN ('AutoPartition', 'holoweb_system', 'HgGenInQuery')) -
デフォルトでは、
hologres.hg_query_logテーブルは実行に 1 秒以上かかる DML 文とすべての DDL 文のみをキャプチャします。SQL 診断は、実行に 100 ミリ秒以上かかるすべての DML 文と DDL 文を分析します。hologres.hg_query_logテーブルのクエリ数が SQL 診断よりも少ない場合、これはテーブルに 1 秒を超えるクエリのみが含まれているためです。log_min_duration_statementパラメーターを調整して、実行に 100 ミリ秒以上かかるクエリをキャプチャできます。詳細については、「スロークエリログの表示と分析」をご参照ください。 -
スロークエリログと同様に、SQL 診断は過去 1 か月分のデータのみを保持します。
-
データは T+1 ベースで更新されます。過去 1 か月以内の T-1 (前日) 以前のデータをクエリできます。デフォルトでは、前日のデータが表示されます。必要に応じて時間範囲を調整できます。
-
SQL 診断は、スロークエリログと同じ権限を使用します。権限の付与方法の詳細については、「表示権限の付与」をご参照ください。
操作手順
HoloWeb を使用して SQL 診断を表示できます。
-
HoloWeb コンソールにログインします。詳細については、「HoloWeb への接続とクエリの実行」をご参照ください。
-
上部のナビゲーションバーで、[診断と最適化] をクリックします。
-
左側のナビゲーションウィンドウで、Instance Diagnosis > [SQL 診断] を選択します。
-
[SQL 診断] ページの上部で、クエリ条件を設定します。
クエリパラメーター:
パラメーター
必須
説明
インスタンス名
はい
スロークエリを照会するインスタンスの名前。デフォルトは現在ログインしているインスタンスです。
時間範囲
はい
スロークエリの時間範囲。デフォルトは Previous Day です。最大 1 か月分の履歴データを選択できます。
-
Submit をクリックして結果を表示します。
インテリジェント SQL エラー診断
クエリが失敗すると、HoloWeb の SQL Editor に [SQL 診断] 情報が表示されます。さらに、Query Insight はインテリジェントな診断を提供し、失敗の原因とソリューションを自動的に SQL Editor に返します。この機能により、失敗したクエリをより効率的に解決できます。
エラーコードリファレンス
|
エラーコード |
説明 |
一般的な完全なエラーメッセージ |
ソリューション |
|
HG_ERRCODE_FDW_ERROR |
このエラーは、MaxCompute の外部テーブルのメタデータを Hologres にインポートするときに発生します。通常、サポートされていないテーブルタイプが原因で発生します。 |
|
詳細については、「HG_ERRCODE_FDW_ERROR」をご参照ください。 |
|
ERRCODE_FDW_ERROR |
このエラーは、外部テーブルのクエリ中に発生します。 |
|
特定のエラーメッセージに基づいて問題を解決します。詳細については、「ERRCODE_FDW_ERROR」をご参照ください。 |
|
このエラーは、一意性制約の違反を示します。通常、重複するプライマリキーの値を挿入するときに発生します。 |
|
|
|
このエラーは、CHECK 制約の違反を示します。通常、Hologres のパーティションテーブルにデータを書き込む際に、パーティション値が定義されたパーティション分割スキームと一致しない場合に発生します。たとえば、パーティション |
|
パーティションデータが定義されたパーティション値と一致していることを確認し、一致しないデータを修正します。 |
|
このエラーは、非 NULL 制約の違反を示します。通常、NULL 値を許可しないフィールドに NULL 値を挿入するときに発生します。 |
|
ダーティデータをクリーンアップします。 |
|
ERRCODE_UNDEFINED_TABLE |
テーブルが存在しません。このエラーは通常、テーブルが最近作成されたがメタデータが更新されていない場合、またはクエリ実行中にテーブルが切り捨てられたり削除されたりした場合に発生します。 |
|
Query Insight を使用して、同時実行されている TRUNCATE または DROP 操作を確認し、タスクを再試行できます。詳細については、「Query Insight」をご参照ください。 |
|
予期しない内部エラーが発生しました。インスタンスが故障したか、クエリが予期せず中断された可能性があります。 |
|
利用可能なものはありません。 |
|
クエリがキャンセルされました。このエラーは通常、クライアント側のタイムアウト設定、またはテーブルに対する TRUNCATE または DROP 操作によって発生します。 |
|
ソリューションの詳細については、「クエリの管理」をご参照ください。 |
|
この機能はサポートされていません。 |
|
ソリューションの詳細については、「Hologres SQL 文の一般的な問題」をご参照ください。 |
|
ERRCODE_UNDEFINED_OBJECT |
未定義のオブジェクトが存在します。このエラーは通常、列またはテーブルグループが見つからないことが原因で発生します。 |
|
|
|
現在のアカウントには必要な権限がありません。アカウントに必要な権限を付与する必要があります。 |
|
ソリューションの詳細については、「Hologres の権限」をご参照ください。 |
|
Out-of-Memory (OOM) エラーのため、クエリが失敗しました。 |
|
ソリューションの詳細については、「OOM トラブルシューティングガイド」をご参照ください。 |
|
データ型の不一致が発生しました。このエラーは通常、式で期待されるデータ型がフィールドの実際のデータ型と異なる場合に発生します。 |
|
SQL 文の列が一致していることを確認します。 |
|
SQL 文に、除数が |
|
ダーティデータをクリーンアップするか、Grand Unified Configuration (GUC) パラメーターを設定してゼロ除算エラーを抑制できます。詳細については、「関数の使用法」をご参照ください。 |
|
ERRCODE_STRING_DATA_RIGHT_TRUNCATION |
VARCHAR フィールドの値がテーブル作成時に指定された長さを超えると、文字列の右側切り捨てエラーが発生します。 |
|
テーブルを再作成し、VARCHAR フィールドに大きな長さを指定するか、フィールドのデータ型を TEXT に変更します。 |
|
クエリが Hologres によって課せられた制限を超えています。このエラーは通常、外部テーブルからスキャンされるパーティション、行、またはバイト数が多すぎる場合に発生します。 |
|
外部テーブルクエリの制限を超えています。ソリューションの詳細については、「MaxCompute 連携:一般的な問題と診断」をご参照ください。 |
|
ERRCODE_SYNTAX_ERROR |
SQL 文に構文エラーがあります。 |
|
SQL 文の構文を確認してください。 |
|
ERRCODE_UNDEFINED_FUNCTION |
このエラーは通常、サポートされていない関数が使用されていることを示します。エラーの原因として、関数の構文が正しくない、拡張機能が欠落している、または関数がサポートされていないなどが考えられます。 |
|
拡張機能の欠落などのエラーを避けるために、正しい関数の構文を使用してください。詳細については、「関数リファレンス」をご参照ください。 |
|
ERRCODE_E_R_E_READING_SQL_DATA_NOT_PERMITTED |
外部テーブルに対する読み取り権限がありません。 |
|
ソリューションの詳細については、「MaxCompute の権限」をご参照ください。 |
|
重複したオブジェクトが存在します。このエラーは通常、重複した拡張機能、パブリケーション、またはロールを作成しようとしたときに発生します。 |
|
オブジェクトが既に存在する場合は、再度作成しないでください。 |
|
無効なテキスト表現が使用されています。このエラーは通常、空の文字列 ("") を INT に変換するなど、無効なデータを含む文字列を他のデータ型に変換するときに発生します。 |
|
ダーティデータをクリーンアップします。 |
|
ERRCODE_BAD_COPY_FILE_FORMAT |
COPY コマンドの実行中にファイルまたはデータ形式が正しくありません。このエラーは、データに COPY コマンドで指定されたデリミタ (スペースなど) が含まれていることが原因で発生することが多く、列数の不一致を引き起こします。 |
|
ダーティデータをクリーンアップします。 |
|
ERRCODE_UNDEFINED_COLUMN |
クエリが存在しない列を参照しています。 |
|
SQL 文の構文を確認してください。 |
|
ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE |
数値が有効範囲外です:
|
|
ダーティデータまたは不正な型定義を確認し、列の型を調整します。 |
|
ERRCODE_DATETIME_FIELD_OVERFLOW |
timestamp、timestamptz、date、time、timetz などの時間関連フィールドに、範囲外の値が含まれています。たとえば、timestamptz 列に |
|
ダーティデータをクリーンアップします。 |
|
ERRCODE_INVALID_PARAMETER_VALUE |
パラメーター値が無効です。このエラーは通常、パラメーターが要件を満たしていない場合に発生します。特定のエラーメッセージに基づいて問題を解決できます。たとえば、エラーメッセージ |
|
SQL 文の構文を確認してください。 |
|
ERRCODE_INVALID_DATETIME_FORMAT |
日付形式が無効です。日付データが |
|
ダーティデータをクリーンアップします。 |
|
ERRCODE_CHARACTER_NOT_IN_REPERTOIRE |
文字がエンコーディング範囲外です。このエラーは通常、無効な文字が UTF-8 エンコーディング範囲外である場合に発生します。 |
|
ダーティデータをクリーンアップします。 |
|
ERRCODE_DUPLICATE_TABLE |
重複したテーブルが存在します。このエラーは通常、既に存在するテーブルを作成しようとしたときに発生します。 |
|
テーブルが既に存在する場合は、再度作成しないでください。 |
|
ERRCODE_UNTRANSLATABLE_CHARACTER |
文字をターゲット形式に変換できません。 |
説明
このメッセージは、UTF-8 でエンコードされた文字が、ターゲットの GBK エンコーディングに対応するものがないことを示します。 |
ダーティデータをクリーンアップします。 |
|
ERRCODE_GROUPING_ERROR |
グループ化エラーが発生しました。このエラーは GROUP BY 句に関連しています。 |
|
SQL 文の構文を確認してください。集計関数で使用されるフィールドは、GROUP BY 句に含める必要があります。 |
|
トランザクションが無効な状態です。トランザクション関連の操作は許可されていません。たとえば、CREATE TABLE 文が実行されたトランザクションの外で SET_TABLE_PROPERTY を呼び出して分散キーを作成する場合などです。 |
|
|
|
ERRCODE_AMBIGUOUS_COLUMN |
列参照があいまいです。このエラーは、列名が複数の列を参照できる場合に発生します。たとえば、 |
|
SQL 文の構文を確認してください。 |
|
ERRCODE_DUPLICATE_COLUMN |
重複した列が存在します。このエラーは通常、テーブルを作成するときに同じフィールドを複数回宣言した場合に発生します。 |
|
SQL 文の構文を確認してください。 |
|
ERRCODE_AMBIGUOUS_FUNCTION |
関数参照があいまいです。このエラーは、関数が複数の入力型をサポートしているが、渡された引数のデータ型が明示的に指定されていない場合に発生します。 |
たとえば、`to_char` 関数の構文は
|
SQL 文の構文を確認してください。 |
|
ERRCODE_INVALID_COLUMN_DEFINITION |
列定義が無効です。Hologres では、このエラーは通常、Numeric または Decimal 型の精度が指定されていない場合に発生します。 |
|
ダーティデータをクリーンアップします。 |
|
ERRCODE_INVALID_CATALOG_NAME ERRCODE_UNDEFINED_DATABASE |
指定されたデータベースが存在しません。 |
利用可能なものはありません |
データベースが存在することを確認します。 |
|
ERRCODE_CANNOT_COERCE |
このエラーは、2 つの型の間でデータを変換できない場合に発生します。 |
|
SQL 文の構文を確認してください。 |
|
ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST |
依存オブジェクトがまだ存在します。このエラーは通常、他のオブジェクトが依存しているオブジェクトを削除するときに発生します。たとえば、テーブルを含むスキーマを削除しようとする場合などです。 |
利用可能なものはありません |
まず依存関係を解決します。詳細については、「アカウントの削除」をご参照ください。 |
|
ERRCODE_UNDEFINED_SCHEMA or ERRCODE_INVALID_SCHEMA_NAME |
指定されたスキーマが存在しません。 |
|
スキーマが存在することを確認します。存在しない場合は作成します。 |
|
ERRCODE_DUPLICATE_DATABASE |
重複したデータベースが存在します。このエラーは、既に存在するデータベースを作成しようとしたときに発生します。 |
利用可能なものはありません |
データベースが既に存在する場合は、再度作成しないでください。 |
|
AutoAnalyze-Failed |
特定の理由により、自動分析機能が失敗しました。 |
|
自動分析の失敗は通常、バックエンドに関連しています。調査のためにチケットを送信できます。 |
|
Import Foreign Table Not Found |
外部テーブルが見つかりません。 |
|
アクセスしたい外部テーブルが存在することを確認します。 |
|
Cannot Acquire Lock In Time |
このエラーは通常、ロックの取得に失敗した場合に発生します。同じテーブルに対する高同時実行クエリと DROP 操作は、バックエンドノードでデッドロックを引き起こす可能性があります。これにより、そのテーブルに対するすべての操作がブロックされます。 |
|
ソリューションの詳細については、「ロックとロックのトラブルシューティング」をご参照ください。 |
|
予期しないエラーが発生しました。 |
|
これは予期しないエラーです。調査のためにチケットを送信できます。 |