并发控制(pg_concurrency_control)

RDS PostgreSQL提供pg_concurrency_control插件,用于对SQL进行并发控制。

您可以加入RDS PostgreSQL插件交流钉钉群(103525002795),进行咨询、交流和反馈,获取更多关于插件的信息。

前提条件

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)
    说明

    慢查询执行完毕后,排队信息会自动清空。