Hologres はスロークエリログを提供します。デフォルトでは、100 ミリ秒以上かかるデータ操作言語 (DML) クエリと、すべてのデータ定義言語 (DDL) クエリを収集します。Hologres はこのログデータを SQL 診断機能に使用し、傾向と詳細を分析して、インスタンスの使用状況を理解し、最適化を実行するのに役立てます。このトピックでは、SQL 診断機能の使用方法について説明します。
機能と提案
SQL 診断機能は、以下の情報を提供します。
診断項目 | 説明 |
合計クエリ数 | 選択した時間範囲内の合計クエリ数。 |
成功したクエリ数 | 選択した時間範囲内の成功したクエリの合計数。 |
失敗したクエリ数 | 選択した時間範囲内の失敗したクエリの合計数。 |
失敗したクエリの詳細 | エラーコードとそれに対応する失敗回数を表示し、失敗したクエリの管理を支援します。このセクションには、典型的なクエリとエラーの詳細も表示されます。 Query Insight に移動して、詳細を表示できます。また、「エラーコードリファレンス表」で詳細なエラー原因を確認し、インスタンスの安定性を向上させることができます。 |
成功/失敗クエリの傾向 | 選択した時間範囲内での成功クエリと失敗クエリの比率を表示します。これにより、インスタンスの全体的なクエリ実行状況を把握できます。 |
クエリ時間消費率の傾向 | 選択した時間範囲内のクエリ時間消費率の傾向を表示します。 デフォルトでは、この分析には |
DML の傾向 | DML クエリの実行傾向を表示します。 デフォルトでは、この分析には |
DDL の傾向 | DDL クエリの実行傾向を表示します。 この分析には、次の DDL 文のみが含まれます: |
アプリケーションソース別のクエリ比率/傾向 |
比率が高いアプリケーションを分析できます。異なるタスクタイプには関連する |
ユーザー別のクエリ比率/傾向 |
これにより、ユーザーのクエリ実行をより明確に分析できます。単一のアカウントではなく、異なるタスクに異なるユーザー名を使用することを推奨します。この習慣により、問題のトラブルシューティングが容易になります。 |
実行エンジン別のクエリ傾向 | 選択した時間範囲内での異なる実行エンジンに対するクエリ実行傾向を表示します。 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 診断よりも少ない場合、これは通常、hologres.hg_query_logテーブルが実行時間が1 秒を超えるクエリのみを記録するためです。クエリの収集対象を実行時間が100 ミリ秒を超えるものに変更するには、log_min_duration_statementパラメーターを変更できます。詳細については、「スロークエリログの表示と分析」をご参照ください。スロークエリログと同様に、SQL 診断データは過去 1 か月分のみ利用可能です。
データは T+1 ベースで更新されます。前日 (T-1) およびそれ以前の 1 か月間のデータをクエリできます。デフォルトでは、前日のデータが表示されます。必要に応じて時間でデータをフィルタリングできます。
SQL 診断データをクエリするために必要な権限は、スロークエリログと同じです。表示権限を付与するには、「表示権限の付与」をご参照ください。
操作手順
HoloWeb を使用して SQL 診断データを表示できます。
-
HoloWeb コンソールにログインします。詳細については、「HoloWeb への接続とクエリの実行」をご参照ください。
-
上部のナビゲーションバーで、Diagnostics and Optimization をクリックします。
左側のナビゲーションウィンドウで、Instance Diagnosis > [SQL 診断] を選択します。
[SQL 診断] ページの上部で、クエリ条件を指定します。
クエリパラメーター:
パラメーター
必須
説明
インスタンス名
はい
スロークエリをクエリしたいインスタンスの名前。デフォルトでは現在のインスタンスが使用されます。
時間範囲
はい
スロークエリの時間範囲。デフォルトは Previous Day です。最大で過去 1 か月間のデータを選択できます。
Submit をクリックしてクエリ結果を表示します。
インテリジェント SQL エラー診断
失敗したクエリに対して、HoloWeb の SQL Editor は [SQL 診断] からの情報を表示します。Query Insight 機能は、インテリジェント SQL 診断をサポートし、失敗の原因と推奨されるソリューションを自動的に SQL Editor に返します。この機能により、失敗したクエリをより簡単に処理できます。
エラーコードリファレンス表
エラーコード | 説明 | 一般的な完全なエラーメッセージ | ソリューション |
HG_ERRCODE_FDW_ERROR | MaxCompute 外部テーブルから Hologres にメタデータをインポート中にエラーが発生しました。このエラーは通常、サポートされていないテーブルタイプが原因で発生します。 |
| 詳細については、「HG_ERRCODE_FDW_ERROR」をご参照ください。 |
ERRCODE_FDW_ERROR | 外部テーブルのクエリ中にエラーが発生しました。 |
| 特定のエラーメッセージに基づいて問題を解決してください。詳細については、「ERRCODE_FDW_ERROR」をご参照ください。 |
| 一意性制約に違反しました。このエラーは、重複したプライマリキーが書き込まれたときによく発生します。 |
|
|
| チェック制約に違反しました。このエラーは、Hologres パーティションテーブルにデータを書き込む際に、パーティション値が定義されたパーティションと一致しない場合によく発生します。たとえば、 |
| パーティションデータが定義されたパーティション値と一致するかどうかを確認します。一致しない場合は、データを変更します。 |
| 非 NULL 制約に違反しました。このエラーは、非 NULL 制約を持つフィールドに NULL データが書き込まれたときによく発生します。 |
| ダーティデータをクレンジングします。 |
ERRCODE_UNDEFINED_TABLE | テーブルが存在しません。このエラーは通常、テーブル作成後にメタデータが更新されていない場合や、クエリ実行中にテーブルが切り捨てられたり削除されたりした場合に発生します。 |
| Query Insight を使用して、同時実行されている TRUNCATE または DROP タスクを確認し、タスクを再試行します。詳細については、「Query Insight」をご参照ください。 |
| 予期しない内部エラーが発生しました。インスタンスがダウンしていたか、クエリが予期せず中断された可能性があります。 |
| なし。 |
| クエリがキャンセルされました。このエラーは通常、クライアントのタイムアウト、またはテーブルが切り捨てられたり削除されたりしたことが原因で発生します。 |
| 解決策については、「クエリの管理」をご参照ください。 |
| 要求された機能はサポートされていません。 |
| 解決策については、「Hologres SQL 文に関するよくある質問」をご参照ください。 |
ERRCODE_UNDEFINED_OBJECT | オブジェクトが定義されていません。このエラーは通常、指定された列またはテーブルグループが存在しない場合に発生します。 |
|
|
| 現在のアカウントには権限が不十分です。アカウントに必要な権限を付与する必要があります。 |
| 解決策については、「Hologres の権限に関する問題」をご参照ください。 |
| メモリ不足のため、クエリがメモリ不足 (OOM) エラーを引き起こしました。 |
| 解決策については、「OOM エラーのトラブルシューティングガイド」をご参照ください。 |
| データ型の不一致が発生しました。このエラーは通常、フィールドの実際のデータ型が式の要求するデータ型と一致しない場合に発生します。 |
| SQL 文の列が一致するかどうかを確認します。 |
| SQL 文に |
| ダーティデータをクレンジングするか、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 構文を確認します。集計関数を使用する場合、他のすべてのフィールドは |
| 無効なトランザクション状態が発生しました。トランザクションに関連する操作が無効です。たとえば、CALL SET_TABLE_PROPERTY を使用して分散キーを作成する際、操作がテーブル作成と同じトランザクション内にない場合などです。 |
|
|
ERRCODE_AMBIGUOUS_COLUMN | あいまいな列参照が行われました。このエラーは通常、SQL 文内の同じ列名が異なる列を参照できる場合に発生します。たとえば、文 |
| 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 | このエラーは通常、ロックの取得に失敗したことが原因です。高同時実行クエリとドロップ操作が同じテーブルを対象とする場合、バックエンドノードでデッドロックが発生する可能性があります。これにより、そのテーブルに対するすべての操作がスタックし、エラーが報告されます。 |
| 解決策については、「ロックとロックのトラブルシューティング」をご参照ください。 |
| 予期しないエラー。 |
| これは予期しないエラーです。問題をトラブルシューティングするためにチケットを送信できます。 |