RDS PostgreSQL提供pg_concurrency_control插件,用于對SQL進行并發控制。

前提條件

RDS PostgreSQL實例版本為PostgreSQL 10或11。

參數說明

參數 默認值 說明
pg_concurrency_control.query_concurrency 0 設置Select類型SQL并發控制的排隊個數限制。取值范圍為0~1024,默認值為0,表示關閉Select類型SQL并發控制。
pg_concurrency_control.bigquery_concurrency 0 設置慢查詢類型SQL并發控制的排隊個數限制。取值范圍為0~1024,默認值為0,表示關閉慢查詢類型SQL并發控制。

您可以使用hint "/*+bigsql*/"的方式來指定一個請求為慢查詢。例如:

/*+bigsql*/select * from test;

此時select * from test;被認為是一個慢查詢。

pg_concurrency_control.transaction_concurrency 0 設置事務塊并發控制的排隊個數限制。取值范圍為0~1024,默認值為0,表示關閉事務塊并發控制。
pg_concurrency_control.autocommit_concurrency 0 設置DML類型SQL并發控制的排隊個數限制。取值范圍為0~1024,默認值為0,表示關閉DML類型SQL并發控制。
pg_concurrency_control.control_timeout 1秒 設置Select類型SQL、DML類型SQL和事務塊的并發控制排隊等待時間。最小值為30毫秒(ms),最大值為3秒(s)。
pg_concurrency_control.bigsql_control_timeout 1秒 設置慢查詢并發控制排隊等待時間。最小值為30毫秒(ms),最大值為3秒(s)。
pg_concurrency_control.timeout_action TCC_break 設置Select類型SQL、DML類型SQL和事務塊的并發控制等待超時后的行為。取值:
  • TCC_break:跳過等待繼續執行。
  • TCC_rollback:超時后報錯,事務回滾。
  • TCC_wait:超時后重置時間戳繼續等待。
pg_concurrency_control.bigsql_timeout_action TCC_wait 設置慢查詢并發控制等待超時后的行為。取值:
  • TCC_break:跳過等待繼續執行。
  • TCC_rollback:超時后報錯,事務回滾。
  • TCC_wait:超時后重置時間戳繼續等待。

使用方法

  1. 使用如下命令創建插件:
    create extension pg_concurrency_control;
  2. 設置并發控制排隊個數限制大于0,即開啟插件排隊功能。

    例如設置pg_concurrency_control.query_concurrency=10,即開啟Select類型SQL并發控制功能。其余功能開啟方式類似。

使用示例

對自定義SQL操作進行并發控制。

  1. 使用如下命令查看排隊視圖:
    select * from pg_concurrency_control_status();

    系統輸出類似如下結果:

     autocommit_count | bigquery_count | query_count | transaction_count 
    ------------------+----------------+-------------+-------------------
                    0 |              0 |           0 |                 0 
    (1 row)
  2. 設置pg_concurrency_control.query_concurrency大于0,例如10。
  3. 執行慢查詢語句:
    /*+ bigsql */ select pg_sleep(10);
  4. 再次查看排隊視圖:
    select * from pg_concurrency_control_status();

    系統輸出類似如下結果:

     autocommit_count | bigquery_count | query_count | transaction_count 
    ------------------+----------------+-------------+-------------------
                    0 |              1 |           0 |                 0 
    (1 row)
    說明 慢查詢執行完畢后,排隊信息會自動清空。