在Postgres上,我最近看到一个案例,在一次交易中有大量的选择被处理。这真的很慢,因此解决方案是将选择分解为多个事务,这大大缩短了查询时间。
有没有人遇到过这种情况?这似乎反直觉,我想知道为什么多个交易更可取的技术原因?
我唯一的理论是,DB更容易维护具有多个事务的ACID属性,而不是单个庞大的事务。
答案 0 :(得分:0)
如果没有任何内容写入数据库,我不希望选择自己成为问题。纯选择语句中没有任何锁定问题可供使用。有写入时会出现问题。
如果你有写入,你还必须处理这样一个事实:autovacuum无法清理在最早的写入事务开始后写入的项目。
如果你看到这样的问题,调查锁(在pg_locks
中)是至关重要的,这样你就可以查看查询和函数,并找出它们的来源。
请注意,SELECT
并不总是SELECT
,而且很容易对性能问题的来源过多地假设。