事务提交会通过delayChkpt阻塞checkpoint
Postgresql事务在事务提交时(执行commit的最后阶段)会通过加锁阻塞checkpoint的执行,尽管时间非常短,分析为什么需要这样做:
首先看提交堆栈
#1 0x0000000000539175 in CommitTransaction () at xact.c:2079
#2 0x0000000000539e04 in CommitTransactionCommand () at xact.c:2824
#3 0x000000000087d1ea in finish_xact_command () at postgres.c:2482
#4 0x000000000087af27 in exec_simple_query (query_string=0x24050e0 "insert into t1 values (1,1);") at postgres.c:1154
函数调用过程
关键函数如下:
CommitTransaction
...
latestXid = RecordTransactionCommit();
...
BufmgrCommit()
START_CRIT_SECTION()
【关键流程】
END_CRIT_SECTION()
latestXid = TransactionIdLatest(xid, nchildren, children);
SyncRepWaitForLSN(XactLastRecEnd, true);
return latestXid;
...
ProcArrayEndTransac
标签:postgressql,...,事务,checkpoint,提交,xact,delayChkpt,latestXid
From: https://blog.csdn.net/Re_view/article/details/139346853