このトピックでは、ベクトル化エンジンとそのソリューションを使用するときに発生する可能性のある問題について説明します。
IMCIを作成するときにこのメッセージが表示されるのはなぜですか: ERROR: アクセスメソッド "csi" は存在しません
polar_csi拡張子は作成されません。 polar_csi
拡張子を作成するには、次のステートメントを実行する必要があります。
CREATE EXTENSION polar_csi;
IMCIの作成に非常に時間がかかるのはなぜですか?
パラメーター値を調整して、インデックスの作成を高速化できます。 詳細については、「パフォーマンスの最適化: インデックス作成の高速化」をご参照ください。
IMCI作成ブロックデータが元のテーブルに書き込むのはなぜですか?
ビジネスへの影響を避けるため、pg_cancel_backendまたはpg_terminate_backendを使用してインデックス作成プロセスをキャンセルできます。 詳細については、「インデックス作成のキャンセル」をご参照ください。
CREATE INDEX CONCURRENTLY
ステートメントを実行して、IMCIを同時モードで作成します。 詳細については、「IMCIの作成」をご参照ください。
IMCIが最新の書き込みデータを返さないのはなぜですか?
現在のクエリがIMCIを使用しているかどうかを確認します。 詳細については、「SQL文でIMCIが使用されているかどうかの確認」をご参照ください。
現在のクエリがIMCIを使用している場合、ベクトル化されたエンジンが行指向データをIMCIに適時に同期させることに失敗する可能性があります。 関連パラメーターを調整して、行指向データからIMCIへの同期のパフォーマンスを向上させることができます。 詳細については、「IMCIのリアルタイムパフォーマンス」をご参照ください。
デフォルトでは、ベクトル化エンジンは最終的な整合性レベルを使用します。 したがって、クエリに対して返されるデータは古いデータである可能性があります。 強い整合性読み取り機能を有効にして、IMCIデータが返される前に行指向のデータと整合していることを確認できます。 詳細については、「クエリの整合性レベル」をご参照ください。
強力な一貫性を有効にすると、クエリのパフォーマンスが低下するのはなぜですか。
現在のクエリがIMCIを使用しているかどうかを確認します。 詳細については、「SQL文でIMCIが使用されているかどうかの確認」をご参照ください。
現在のクエリがIMCIを使用している場合、ベクトル化されたエンジンが行指向データをIMCIに適時に同期させることに失敗する可能性があります。 関連パラメーターを調整して、行指向データからIMCIへの同期のパフォーマンスを向上させることができます。 詳細については、「IMCIのリアルタイムパフォーマンス」をご参照ください。
行指向テーブルの書き込み負荷が重く、行指向データからIMCIへの同期のパフォーマンスが要件を満たさない場合は、強力な一貫性を無効にして、最終的な一貫性を有効にすることができます。
SET polar_csi.forward_replay_wait = off;
ベクトル化エンジンとIMCIを使用してクエリを高速化できないのはなぜですか?
以下の手順を実行します。
ベクトル化されたエンジン拡張がインストールされているか確認します。 詳細については、「polar_csi拡張機能のインストール」をご参照ください。
テーブルにIMCIが作成されているかどうかを確認します。 詳細については、「IMCIの作成」をご参照ください。
クエリに関連するすべての列がIMCIに追加されているかどうかを確認します。 たとえば、
CREATE INDEX csi_idx_t ON t USING CSI(id,name);
ステートメントを使用してインデックスを作成する場合、クエリSELECT, name,age FROM t;
はIMCIを使用できません。 これは、クエリステートメントのageフィールドがIMCIに含まれていないためです。ベクトル化エンジンがクエリに対して有効になっているかどうかを確認します。
SHOW polar_csi.enable_query
ステートメントを実行して、ベクトル化エンジンが有効になっているかどうかを確認します。 結果がオフの場合、ベクトル化エンジンはSQL文に対して無効になります。 ベクトル化エンジン機能を有効にする方法の詳細については、「パラメーター設定」をご参照ください。クエリの実行コストが小さいかどうかを確認します。 行指向のストレージエンジンは、単純なクエリのパフォーマンスを向上させます。 EXPLAINやEXPLAIN ANALYZEなどのステートメントを実行して、クエリプランを表示し、ステートメントのクエリコストを確認できます。 クエリのコストに関係なくクエリに強制的にIMCIを使用する場合は、
polar_csi.cost_threshold
を0に設定します。 詳細は、「パラメーター設定」をご参照ください。それでもベクトル化されたエンジン機能を使用できない場合は、トラブルシューティングのために
SET client_min_messages = debug5
ステートメントを実行してください。
ベクトル化されたエンジン機能は、PolarDB ePQ機能とどのように関連していますか?
PolarDB for PostgreSQLのePQ機能は、1つのプライマリノードと複数の読み取り専用ノードのクラウドネイティブアーキテクチャに基づいています。 すべての読み取り専用ノードのコンピューティングリソースを使用して、マルチノード並列クエリを実装します。 PolarDB for PostgreSQLでは、クエリ文をすべての読み取り専用ノードに配布して実行できます。 ただし、ネイティブPostgreSQLは、1つのノードのコンピューティングリソースのみを並行して使用できます。 したがって、PolarDB for PostgreSQLのePQ機能は、ネイティブPostgreSQLよりも優れたスケールアウト
機能を備えています。
PolarDB for PostgreSQLのベクトル化エンジン機能は、ePQ機能とは異なるテクノロジを使用します。 前者は同じハードウェアリソースでコンピューティング効率を向上させるように設計されていますが、後者はクラスタ内のすべてのコンピューティングリソースを最大限に活用するように設計されています。