我的应用程序中有一个实用程序,我需要执行INSERT,UPDATE&的批量加载。删除操作。我正在尝试围绕此创建事务,以便一旦调用此系统并将数据提供给它,就可确保将全部或全部添加到数据库中。
关注的是这里的边界条件是什么?有多少INSERT,UPDATE&我可以在一次交易中使用DELETE吗?交易规模是否可配置?
任何帮助都将不胜感激。
-Thanks
答案 0 :(得分:21)
我认为在交易中可以执行的工作量最大。数据不断添加到表文件中,最终事务提交或回滚:AIUI此结果存储在pg_clog中;如果它回滚,空间最终将被真空回收。因此,就好像正在进行的事务工作保存在内存中并在提交时刷新,例如。
答案 1 :(得分:21)
单个事务可以在其中运行大约20亿个命令(2 ^ 31,减去IIRC的一小部分开销。实际上,想到它,可能是2 ^ 32 - 我认为命令计数器是无符号的)。
当然,每个命令都可以修改多行。
答案 2 :(得分:18)
对于我正在进行的项目,我执行了2000万次INSERT。我尝试了一次大型交易,并且每一百万次INSERT都有一次交易,而且表现看起来完全相同。
PostgreSQL 8.3
答案 3 :(得分:-2)
我认为最大工作量受日志文件大小的限制。数据库永远不会允许自己无法回滚,因此如果您在事务期间消耗所有日志空间,它将暂停,直到您为其提供更多空间或回滚。这通常适用于所有数据库。
我建议将您的更新分成可管理的块,这些块需要花费大约几分钟的执行时间,这样您就知道早期是否存在问题(例如,通常需要1分钟的时间仍然在10分钟后运行...嗯有人丢了指数吗?)