Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance PostgreSQL中的表锁定_Performance_Postgresql_Concurrency_Plpgsql_Postgresql Performance - Fatal编程技术网

Performance PostgreSQL中的表锁定

Performance PostgreSQL中的表锁定,performance,postgresql,concurrency,plpgsql,postgresql-performance,Performance,Postgresql,Concurrency,Plpgsql,Postgresql Performance,我有一个PL/pgSQL函数,它将数据从暂存表传送到目标表。这个过程每晚都在执行。有时由于服务器重启或一些维护问题,我们会手动执行该过程 我面临的问题是:每当我们在上午7点之后手动启动流程时,几乎需要2小时才能完成(从暂存表读取并插入到目标表中)。但每当它按照计划执行时,即在上午7点之前,平均需要22-25分钟 可能是什么问题?如果需要,我可以在这里共享我的函数片段。典型的原因是数据库中的一般并发活动,它与您的函数争夺相同的资源,并可能导致锁争用。检查数据库日志,了解从上午7点左右开始的活动

我有一个PL/pgSQL函数,它将数据从暂存表传送到目标表。这个过程每晚都在执行。有时由于服务器重启或一些维护问题,我们会手动执行该过程

我面临的问题是:每当我们在上午7点之后手动启动流程时,几乎需要2小时才能完成(从暂存表读取并插入到目标表中)。但每当它按照计划执行时,即在上午7点之前,平均需要22-25分钟


可能是什么问题?如果需要,我可以在这里共享我的函数片段。

典型的原因是数据库中的一般并发活动,它与您的函数争夺相同的资源,并可能导致锁争用。检查数据库日志,了解从上午7点左右开始的活动

函数始终作为单个事务运行。锁是在过程中获取的,仅在事务结束时释放。这使得长时间运行的函数特别容易发生锁争用

您可以优化并发事务的一般性能和行为,使其运行更快。或者更彻底地说:如果可能的话,将您的大功能拆分为单独的部分,您可以在单独事务中调用这些部分

如何拆分大型更新:

<> P>当将多个大操作打包成单个函数时,还需要考虑其他事项:


您能告诉我在Postgres中查询的空闲状态是什么吗?我所了解到的是,还有其他一些应用程序正在访问上述函数所使用的表。其他表的查询即使在完成后仍保持“空闲”状态?这将如何影响性能?@YousufSultan:idle的状态不一定可疑,只是等待输入的会话<代码>事务中的空闲和
事务中的空闲(中止)
表示存在问题。看,谢谢。。。。通过关闭正在访问表的其他批处理作业的会话,问题得到了解决。“他们在那里开始会议,但会议并没有结束。”优素福苏丹。只要他们关闭事务,打开的会话就不应该是问题。