Gre*_*der 3 postgresql performance transactions
我试图了解postgres中的锁定,这是我到目前为止所理解的.
根据我的理解,virtualxids不是真正的事务,transactionidxid是表示事务的东西.
当我做一个简单的连接到psql shell,并且我查询pg_locks表时,那里已经存在一个virtualxid.
我没有启动事务或运行查询,为什么要创建这个virtualxid?是因为这个连接可能在将来启动交易吗?
我在这里错过了什么?
select * from pg_locks如果会话已经没有当前打开的事务,则连接不会创建事务,而是隐式发出.这符合您在问题中引用的规则:postgres中的所有语句都在显式/隐式事务内部运行
查询select * from pg_locks不能是中立的观察者,因为它需要自己使用事务和锁定pg_locks.因此,此选择将始终报告至少 两个条目,如下例所示:
test=> \x test=> SELECT relation::regclass AS relname, * FROM pg_locks; -[ RECORD 1 ]------+---------------- relname | pg_locks locktype | relation database | 113270 relation | 11000 page | tuple | virtualxid | transactionid | classid | objid | objsubid | virtualtransaction | 2/5789 pid | 31376 mode | AccessShareLock granted | t -[ RECORD 2 ]------+---------------- relname | locktype | virtualxid database | relation | page | tuple | virtualxid | 2/5789 transactionid | classid | objid | objsubid | virtualtransaction | 2/5789 pid | 31376 mode | ExclusiveLock granted | t
| 归档时间: |
|
| 查看次数: |
4451 次 |
| 最近记录: |