openGauss/MOGDB与PG等待事件

原作者:阎书利

数据库版本:PG12.1 openGauss/MOGDB 2.1.0

最近看到了许多关于PG等待事件的文章,对等待事件这部分也有了很大的兴趣。

等待事件是一个累计的统计信息,表明一个server process要继续完成作业,必须等待一个时间的结束;因为系统资源有限,那么完成某些工作,所需资源就要轮流使用,那么在这个过程当中,就会产生等待资源的情况。数据库会用不同类型的定义,来描述这个事情,称之为等待事件。

openGauss/MOGDB数据库是基于PG研发的,PG是从9.6版本加入了等待事件特性,可以通过查询pg_stat_activity中的wait_event_type和wait_event了解到每个sql进程在当前更详细的执行状态 。openGauss/MOGDB在PG的基础上有许多优化及改动,把一些等待事件重新定义,等待事件在保留了部分原等待事件的基础上也增加了一部分。

在分析问题的时候,等待事件对于我们还是较为重要的,我们可以根据等待事件,初步定位问题,并结合相关测试进行验证,看到了熟悉的等待事件,我们甚至能大概猜出问题所在。相对于ORACLE来说,PG以及openGauss/MOGDB的等待事件种类和数量较少。在等待事件这方面可能还有极大优化的空间,如果能把等待事件的细粒程度增加,应该会帮助我们更好的了解数据库状态,解决数据库问题。

一般来说产生等待事件的几种情况:
1.请求的资源忙,需要资源释放
2.会话处于空闲状态,等待任务
3.会话被阻塞,需要等待阻塞解除

以下内容对比可能根据PG版本有变化,如果有误,欢迎帮我指正交流。

一、ORACLE与PG与openGauss/MOGDB等待事件种类