Performance PostgreSQL中的表锁定
我有一个PL/pgSQL函数,它将数据从暂存表传送到目标表。这个过程每晚都在执行。有时由于服务器重启或一些维护问题,我们会手动执行该过程 我面临的问题是:每当我们在上午7点之后手动启动流程时,几乎需要2小时才能完成(从暂存表读取并插入到目标表中)。但每当它按照计划执行时,即在上午7点之前,平均需要22-25分钟Performance PostgreSQL中的表锁定,performance,postgresql,concurrency,plpgsql,postgresql-performance,Performance,Postgresql,Concurrency,Plpgsql,Postgresql Performance,我有一个PL/pgSQL函数,它将数据从暂存表传送到目标表。这个过程每晚都在执行。有时由于服务器重启或一些维护问题,我们会手动执行该过程 我面临的问题是:每当我们在上午7点之后手动启动流程时,几乎需要2小时才能完成(从暂存表读取并插入到目标表中)。但每当它按照计划执行时,即在上午7点之前,平均需要22-25分钟 可能是什么问题?如果需要,我可以在这里共享我的函数片段。典型的原因是数据库中的一般并发活动,它与您的函数争夺相同的资源,并可能导致锁争用。检查数据库日志,了解从上午7点左右开始的活动
可能是什么问题?如果需要,我可以在这里共享我的函数片段。典型的原因是数据库中的一般并发活动,它与您的函数争夺相同的资源,并可能导致锁争用。检查数据库日志,了解从上午7点左右开始的活动 函数始终作为单个事务运行。锁是在过程中获取的,仅在事务结束时释放。这使得长时间运行的函数特别容易发生锁争用 您可以优化并发事务的一般性能和行为,使其运行更快。或者更彻底地说:如果可能的话,将您的大功能拆分为单独的部分,您可以在单独事务中调用这些部分
事务中的空闲(中止)
表示存在问题。看,谢谢。。。。通过关闭正在访问表的其他批处理作业的会话,问题得到了解决。“他们在那里开始会议,但会议并没有结束。”优素福苏丹。只要他们关闭事务,打开的会话就不应该是问题。