靓科技解读|PostgreSQL的全局死锁检测原理( 三 )
全局死锁检测器工作原理
下面 , 通过全局等待图 , 让我们看看集群是如何处理全局死锁的 。
基本思路如下:主节点上的BackgroundWorker进程通过查询集群来定期建立全局等待图 。 接着 , 删除与死锁无关的节点和边 。 重复此过程 , 直到无法删除任何节点或边 。 如果仍然存在边 , 则也存在全局死锁 , 我们需要选择一个会话来取消 。
接下来 , 让我们详细介绍上述步骤 。
文章图片
要构建等待图 , 我们需要在每个Segment上收集锁信息 。 这是一个两阶段过程 。
1.构建全局图
首先 , 它使用Postgres内部函数GetLockStatusData从PROCLOCK共享内存中获取锁等待关系 。 我们需要扩展lockInstanceData结构 , 以涵盖分布式事务ID和holdTillEndXact标志 。 之后 , BackgroundWorker进程需要从每个ForeignServer收集本地锁信息 , 并形成一个全局锁等待图 。
文章图片
每个本地锁等待图包括以下属性:SegmentID , 锁等待者和锁持有者的分布式事务ID , 标注其为实边或虚边 , 以及其他属性 , 例如pid , sessionid , 锁类型和锁模式 , 涵盖了之前介绍的节点和边的四个主要属性 。
文章图片
2.消除节点和边
下一步是消除不相关的节点和边 。 我们使用启发式贪婪算法 。
- 科技一哥|荣耀30青春版图集赏析:触觉与视觉的完美享受
- 科技犬君|vs 索尼A9G 谁强?,上半年用户喜爱手机盘点;小米电视大师65英寸OLED
- 精选泛科技|结果如何?,一加8续航遭质疑:上半年最全机型横评出炉
- HAO懂科技|小米“神机”要来了?,小米正式“反击”!上下对折+骁龙865
- 阿拉图图科技说|而给华为仅仅是800万枚!,台积电为苹果准备8000万枚芯片
- 网罗说科技|三星note10一夜成“中端机”,还是256GB+3500mAh,三星扛不住了
- 科技数码迷|华为+荣耀别不报!入门级机型你们真没有Redmi良心
- 「小米科技」小米11Pro宣布新技术!首发骁龙875+屏下镜头,米粉:价格有点小贵
- 小熊科技|你会考虑吗?,三星顶级旗舰清仓!5G网络+45W快充+2k屏幕
- 简简科技|联想:国内同步上市,支持5G,界读丨摩托罗拉折叠手机Razr2曝光