PostgreSQL跟踪检查点出现死锁

gdb跟踪检查点进程,出现死锁,马克一下。

跟踪检查点进程,查看共享内存中的信(heckpointerShmem→请求)

 <代码> (gdb) p CheckpointerShmem→请求[150]…16美元={rnode={spcNode=1663, dbNode=16402, relNode=26185}, forknum=MAIN_FORKNUM segno=0} (gdb) p CheckpointerShmem→请求[200]不能访问内存地址0 xf9fb18…… 

然后,请求检查点的进程报错

 <代码>=#更新t_wal_ckpt组c2=testdb的c2 # | | substr (c2 4 40);更新8192 testdb=#检查点;2019-01-07 12:30:32.114中科[1418]恐慌:自旋锁困在RequestCheckpoint发现,检查点。c: 1050 2019-01-07 12:30:32.114中科[1418]声明:检查点;2019-01-07 12:30:37.081中科[1390]恐慌:自旋锁困在FirstCallSinceLastCheckpoint发现,检查点。c: 1376 2019-01-07 12:30:38.610中科[1370]日志:背景的作家进程(PID 1390)被终止信号6:流产2019-01-07 12:30:38.610中科[1370]日志:终止任何其他活动服务器进程2019-01-07 12:30:38.611中科[1392]警告:终止连接因为事故的另一个服务器进程2019-01-07 12:30:38.611中科[1392]细节:邮政人员指挥这个服务器进程回滚当前事务和退出,因为另一个服务器进程异常退出,可能损坏的共享内存。2019-01-07 12:30:38.611中科[1392]提示:一会你应该能够连接到数据库并重复你的命令。2019-01-07 12:30:38.613中科[1558]警告:终止连接因为事故的另一个服务器进程2019-01-07 12:30:38.613中科[1558]细节:邮政人员指挥这个服务器进程回滚当前事务和退出,因为另一个服务器进程异常退出,可能损坏的共享内存。2019-01-07 12:30:38.613中科[1558]提示:一会你应该能够连接到数据库并重复你的命令。恐慌:自旋锁卡发现RequestCheckpoint检查点。c: 1050服务器关闭连接意外这可能意味着服务器异常终止之前或同时处理请求。到服务器的连接丢失。尝试重置:2019-01-07 12:30:54.041中科[1560]致命:数据库系统在恢复模式失败了。!比; 

尝试重新连接,发现DB已coredump。

 <代码> [xdb@localhost ~] [xdb@localhost ~] testdb psql - d 2019-01-07美元14:10:16.114中科[1629]致命:数据库系统在恢复模式psql:致命:数据库系统在恢复模式 

执行恢复

 <代码> [xdb@localhost ~]美元pg_ctl开始pg_ctl:另一个服务器可以运行;试图启动服务器还是等待服务器启动....2019-01-07 14:11:50.821中科[1632]致命:锁文件“邮政局长。pid”已经存在2019-01-07 14:11:50.821中科[1632]提示:是另一个邮政局长(pid 1370)运行在数据目录“/数据/xdb pg111db”?停止等待pg_ctl:无法启动服务器检查日志输出。[xdb@localhost ~]发现美元/数据/xdb - name邮政局长。pid/数据/xdb/pg111db/邮政局长。pid (xdb@localhost ~) $ rm射频/数据/xdb/pg111db/邮政局长。pid (xdb@localhost ~)美元pg_ctl开始等待服务器开始....2019-01-07 14:12:44.578中科[1639]日志:不能绑定IPv6地址::1”:地址已经在使用[xdb@localhost ~]美元ps ef | grep postgres xdb 1370 1 0 12:01分/0 00:00:02/appdb/atlasdb pg11.1/bin/postgres xdb 1389 1370 0中午?就是[postgres] & lt; defunct>xdb 1641 1332 0十四12分/0就是grep——颜色=汽车postgres [xdb@localhost ~] kill - 9美元1370美元[xdb@localhost ~] pg_ctl开始等待服务器开始....2019-01-07 14:13:33.125中科[1648]日志:监听IPv6地址“::1”,端口5432 2019-01-07 14:13:33.125中科[1648]日志:监听IPv4地址127.0.0.1,端口5432 2019-01-07 14:13:33.142中科[1648]日志:/tmp/.s.PGSQL Unix监听套接字”。5432年“.2019-01-07 14:13:34.361中科[1649]日志:数据库系统被打断;最后在2019-01-07 12:26:22 CST 2019-01-07 14:13:34.818中科[1649]日志:数据库系统没有正确关闭;自动复苏进展2019-01-07 14:13:34.863中科[1649]日志:重新开始1/48F9ED08 .2019-01-07 14:13:35.467中科[1649]日志:无效的记录长度1/4914FF58:想24日有0 2019-01-07 14:13:35.467 CST[1649]日志:重做在1/4914FF30 2019-01-07 14:13:35.467中科[1649]日志:去年完成的事务日志时2019-01-07 12:28:37.521542 + 08年2019-01-07 14:13:35.977中科[1648]日志:数据库系统是准备接受连接服务器启动 

经分析,是因为共享内存结构中的CheckpointerShmem→ckpt_lck导致的。
在跟踪检查点进程时,执行

 <代码> SpinLockRelease(和CheckpointerShmem→ckpt_lck); 

释放锁后,不再出现上述问题。

PostgreSQL跟踪检查点出现死锁