数据库并发队列参数调优

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

全局并发队列

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

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

数据库并发队列参数调优 - 图1 说明:
- 在事务类大并发业务场景下,参数max_active_statements建议设置为-1,即不限制全局并发数。
- 在分析类查询的场景下,参数max_active_statements的值设置为CPU的核数除以数据库节点个数,一般可以设置5~8个。

局部并发队列

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

参数parctl_min_cost数值用于判断执行作业是否是复杂作业。