すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:pg_concurrency_controlプラグインの使用

最終更新日:Jan 11, 2024

ApsaraDB RDS for PostgreSQLは、SQL文の同時実行を制御するpg_concurrency_controlプラグインを提供します。

前提条件

RDSインスタンスはPostgreSQL 10または11を実行します。

パラメーター

パラメーターデフォルト値説明
pg_concurrency_control.query_並行性0SELECT SQL文の同時ジョブの最大数を設定します。 有効値: 0~1024。 デフォルト値:0 デフォルト値は、SELECT SQL文に対して同時実行制御が無効になっていることを示します。
pg_concurrency_control.bigquery_並行性0スロークエリの同時ジョブの最大数を設定します。 有効値: 0~1024。 デフォルト値:0 デフォルト値は、低速クエリに対して同時実行制御が無効になっていることを示します。

hint "/* + bigsql */" を使用して、スロークエリとしてステートメントを指定できます。 例:

/* + bigsql */select * from test;

select * from test; ステートメントは遅いクエリです。

pg_concurrency_control.transaction_並行性0トランザクションブロックの同時ジョブの最大数を設定します。 有効値: 0~1024。 デフォルト値:0 デフォルト値は、トランザクションブロックの同時実行制御が無効になっていることを示します。
pg_concurrency_control.autocomit_concurrency0DML SQL文の同時ジョブの最大数を設定します。 有効値: 0~1024。 デフォルト値:0 デフォルト値は、DML SQL文の同時実行制御が無効になっていることを示します。
pg_concurrency_control.control_タイムアウト1sSELECT SQL文、DML SQL文、およびトランザクションブロックを待機する最大時間を設定します。 最小値は30 msで、最大値は3sです。
pg_concurrency_control.bigsql_control_タイムアウト1s低速クエリを待機する最大時間を設定します。 最小値は30 msで、最大値は3sです。
pg_concurrency_control.timeout_アクションTCC_breakSELECT SQL文、DML SQL文、およびトランザクションブロックのタイムアウト時のアクションを設定します。 有効な値:
  • TCC_break: 待機中のステートメントをスキップし、次のステートメントを実行します。
  • TCC_rollback: エラーを報告し、トランザクションをロールバックします。
  • TCC_wait: タイムアウト後にタイムスタンプをリセットし、待ち続けます。
pg_concurrency_control.bigsql_timeout_アクションTCC_wait低速クエリのタイムアウト時のアクションを設定します。 有効な値:
  • TCC_break: 待機中のステートメントをスキップし、次のステートメントを実行します。
  • TCC_rollback: エラーを報告し、トランザクションをロールバックします。
  • TCC_wait: タイムアウト後にタイムスタンプをリセットし、待ち続けます。

手順

  1. 次のコマンドを実行して、プラグインを作成します。
    拡張子pg_concurrency_controlを作成します。
  2. 同時実行ジョブの数を0より大きい値に設定して、プラグインで同時実行制御を有効にします。

    たとえば、pg_concurrency_control.query_concurrencyパラメーターを10に設定して、SELECT SQL文の同時実行制御を有効にします。 他のタイプのステートメントの同時実行制御を有効にするメソッドも同様です。

例:

カスタムSQL文の同時実行制御を有効にするには、次の操作を実行します。

  1. 次のコマンドを実行して、ステートメントキューの情報を表示します。
    pg_concurrency_control_status() から * を選択します。

    次のような情報が表示されます。

    autocommit_count | bigquery_count | query_count | transaction_count
    ------------------ ---------------- + ----------- -------------------
                    0 | 0 | 0 | 0
    (1行) 
  2. pg_concurrency_control.query_concurrencyパラメーターを0より大きい値 (例: 10) に設定します。
  3. スロークエリを実行します。
    /* + bigsql */ select pg_sleep(10);
  4. 次のコマンドを実行して、ステートメントキューの情報を再度表示します。
    pg_concurrency_control_status() から * を選択します。

    次のような情報が表示されます。

    autocommit_count | bigquery_count | query_count | transaction_count
    ------------------ ---------------- + ----------- -------------------
                    0 | 1 | 0 | 0
    (1行) 
    説明 低速クエリが完了すると、キュー情報は自動的にクリアされます。