插入, 更新, 和删除数据

您所在的位置:网站首页 greenplum数据类型怎么查 插入, 更新, 和删除数据

插入, 更新, 和删除数据

2023-09-02 07:31| 来源: 网络整理| 查看: 265

Greenplum数据库全局死锁检测器后端进程会收集所有segment上的锁信息,并使用有向算法来检测本地死锁和全局死锁是否存在。 该算法使Greenplum数据库放宽对堆表的并发更新和删除限制。 (Greenplum数据库仍然在AO / CO表上使用表级锁定,对UPDATE, DELETE, 和 SELECT...FOR UPDATE的并发操作进行限制。)

默认情况下,全局死锁检测器是被禁用的,Greenplum数据库以串行方式对堆表执行并发更新和删除操作。 可以通过设置配置参数gp_enable_global_deadlock_detector,开启并发更新并让全局死锁检测器检测死锁是否存在。

启用全局死锁检测器后,当启动Greenplum数据库时,master 主机上会自动启动一个后端进程。可以通过 gp_global_deadlock_detector_period配置参数,来设置采集和分析锁等待数据的时间间隔。

如果全局死锁检测器发现了死锁,它会通过取消最新的事务所关联的一个或多个后端进程来避免死锁。

当全局死锁检测器发现了以下事物类型的死锁时,只有一个事务将成功。其他事务将失败,并打印错误指出不允许对同一行进行并发更新。 在同一行堆表的并发事务中,第一个事务是更新操作,下一个事务执行更新或删除,并且查询计划包含一个动作操作符。 堆表的同一分发键上的并发更新事务由Greenplum Database Postgres查询优化器执行 哈希表的同一行上的并发事务更新由GPORCA优化器执行。 Note: Greenplum数据库通过配置参数 deadlock_timeout 指定本地死锁检测的间隔。由于本地死锁检测和全局死锁检测算法的不同,被死锁检测器终止的进程也不同,这取决于本地死锁检测和全局死锁检测哪个先被触发。 Note: 若打开配置参数 lock_timeout ,且将数值设定为小于deadlock_timeout 和 gp_global_deadlock_detector_period,查询会在死锁检测被触发之前就被终止。

用户可以通过自定义函数,pg_dist_wait_status() 查看所有segment上的锁等待信息:哪些事务在等待锁,哪些事务在持有锁,以及事务运行在哪个segment上。 pg_dist_wait_status() 的输出如下例所示:

SELECT * FROM pg_dist_wait_status(); segid | waiter_dxid | holder_dxid | holdTillEndXact -------+-------------+-------------+----------------- -1 | 29 | 28 | t 0 | 28 | 26 | t 0 | 27 | 29 | t 1 | 26 | 27 | t (4 rows)

全局死锁检测器会终止某个事务以打破死锁,并且打印如下的错误信息:

ERROR: canceling statement due to user request: "cancelled by global deadlock detector"


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3