更新时间:2022-06-13 GMT+08:00

数据库并发队列参数调优

数据库提供两种手段进行并发队列的控制,全局并发队列和局部并发队列。

全局并发队列

全局并发队列采用GUC参数max_active_statements控制单个CN上运行并发执行的作业数量。采用全局并发队列机制将控制所有普通用户的执行作业,不区分复杂度,即执行语句都将作为一个执行单元,当并发执行的作业数量达到此参数阈值时,将进入队列等待。对于管理员执行的作业,不走全局并发控制逻辑。

设置该GUC参数数值时,需要考虑系统的承受能力,主要关注内存的使用情况及IO的使用情况,综合判断。若普通用户关联资源池,并且资源池中的优先级比例不同,全局并发队列在数据库内部将使用两维队列,即优先级高低排队和同一优先级进行排队。在唤醒时,将优先唤醒高优先级队列的作业。

  • 如果参数max_active_statements设置为-1,也就是不限制全局并发数,会导致通信大并发下存在连接断开报错。
  • 在点查询的场景下,参数max_active_statements建议设置为100。
  • 在分析类查询的场景下,参数max_active_statements的值设置为CPU的核数除以DN个数,一般可以设置5~8个。

局部并发队列

采用资源池局部并发控制机制的目的是控制在一个CN上同一资源池内的并发作业数量。局部并发控制机制根据执行作业的cost,控制复杂查询的并发作业数量。