我是相当新的postgresql。 我检查了文档,找不到有关如何进行页面级locking的任何信息。
我明白,我可以设置一个表,像这样的locking模式:LOCK TABLE myTable IN LOCKMODE ROW EXCLUSIVE;
我将如何实现页面级locking我的会话? 让我知道,如果我似乎有一个误解的基本面。
你为什么要做明确的页面级别locking? 你不能控制每个页面上的内容,所以你会locking一些任意的数据集合。 这有什么用途?
我想你正在寻找行级locking ,这是使用SELECT ... FOR UPDATE
或SELECT ... FOR SHARE
。
PostgreSQL将行级锁升级到一些内部的页级锁,比如可序列化的快照谓词跟踪,缓冲区pipe理等等。当行级锁太多时,PostgreSQL会执行此操作,并且会成为性能问题。 你不需要关心这个,因为这在SQL级别对你几乎没有影响。 正常的行锁 – 通过UPDATE
, DELETE
, SELECT ... FOR UPDATE
, SELECT ... FOR SHARE
– AFAIK从未升级到页级锁,因为这样做会增加死锁的可能性。
如果你确信你想要页面级locking,请详细解释你想要解决的问题,以及为什么行级或表级locking不能完成这项工作。
看到:
SELECT ... FOR [UPDATE|SHARE]
– 行级locking LOCK
– 表级locking