怎么掌握PostgreSQL Locks的基础知识
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章主要讲解了"怎么掌握PostgreSQL Locks的基础知识",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么掌握PostgreSQL Lo
千家信息网最后更新 2025年01月21日怎么掌握PostgreSQL Locks的基础知识
这篇文章主要讲解了"怎么掌握PostgreSQL Locks的基础知识",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么掌握PostgreSQL Locks的基础知识"吧!
如下例所示,session 1执行update语句,session 2 update相同的rows,session 3查询locktype为transactionid的信息.
session 1
[local]:5432 pg12@testdb=# begin;ere relation=295053;BEGINTime: 1.430 ms[local]:5432 pg12@testdb=#* -- SELECT * from t_lock where id < 10 FOR UPDATE;[local]:5432 pg12@testdb=#* select pg_backend_pid(); pg_backend_pid ---------------- 2475(1 row)Time: 2.619 ms[local]:5432 pg12@testdb=#* update t_lock set id = 3000 where id = 3;UPDATE 4Time: 7.892 ms[local]:5432 pg12@testdb=#* select pid,locktype,relation::regclass,mode,page,tuple,virtualxid,transactionid,virtualtransaction,granted,fastpath from pg_locks where relation=295053;-[ RECORD 1 ]------+-----------------pid | 2475locktype | relationrelation | t_lockmode | RowExclusiveLockpage | tuple | virtualxid | transactionid | virtualtransaction | 3/2granted | tfastpath | tTime: 9.013 ms
session 2
[local]:5432 pg12@testdb=# ---- session 2[local]:5432 pg12@testdb=# begin;BEGINTime: 1.117 ms[local]:5432 pg12@testdb=#* select pg_backend_pid(); pg_backend_pid ---------------- 2480(1 row)Time: 1.825 ms[local]:5432 pg12@testdb=#* update t_lock set id = 3000 where id = 3;-- 阻塞/挂起
session 3
[local]:5432 pg12@testdb=# select * from pg_locks where pid <> pg_backend_pid() and locktype = 'transactionid'; locktype | database | relation | page | tuple | virtualxid | transactionid | classid | objid | objsubid | virtualtransaction | pid | mode | granted | fastpath ---------------+----------+----------+------+-------+------------+---------------+---------+-------+----------+--------------------+------+---------------+---------+---------- transactionid | | | | | | 669310 | | | | 3/2 | 2475 | ExclusiveLock | t | f transactionid | | | | | | 669312 | | | | 4/4 | 2480 | ExclusiveLock | t | f transactionid | | | | | | 669310 | | | | 4/4 | 2480 | ShareLock | f | f(3 rows)Time: 1.243 ms
可以看到,进程2475中的事务669310和进程2480中的669312分别持有transactionid的ExclusiveLock,进程2480在等待事务ID=669310的lock(granted=f).
为什么会等待669310的ShareLock呢?回过头来查看t_lock表的xmax信息:
[local]:5432 pg12@testdb=# select xmin,xmax,ctid from t_lock where id = 3; xmin | xmax | ctid --------+--------+--------- 669246 | 669310 | (0,3) 669247 | 669310 | (4,99) 669248 | 669310 | (8,195) 669252 | 669310 | (13,65)(4 rows)Time: 4.715 ms
可以看到 : 待更新的tuple.xmax = 669310.
回滚事务669310,再次查看xmax:
[local]:5432 pg12@testdb=# select xmin,xmax,ctid from t_lock where id = 3; xmin | xmax | ctid --------+--------+--------- 669246 | 669312 | (0,3) 669247 | 669312 | (4,99) 669248 | 669312 | (8,195) 669252 | 669312 | (13,65)(4 rows)Time: 1.182 ms[local]:5432 pg12@testdb=# SELECT pid,backend_xid,wait_event_type,wait_event,state,query FROM pg_stat_activity WHERE pid IN (2475,2480);-[ RECORD 1 ]---+------------------------------------------pid | 2475backend_xid | wait_event_type | Clientwait_event | ClientReadstate | idlequery | rollback;-[ RECORD 2 ]---+------------------------------------------pid | 2480backend_xid | 669312wait_event_type | Clientwait_event | ClientReadstate | idle in transactionquery | update t_lock set id = 3000 where id = 3;Time: 5.434 ms
xmax被更新为669312.
感谢各位的阅读,以上就是"怎么掌握PostgreSQL Locks的基础知识"的内容了,经过本文的学习后,相信大家对怎么掌握PostgreSQL Locks的基础知识这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
知识
基础
基础知识
事务
进程
学习
信息
内容
更新
相同
再次
就是
思路
情况
文章
更多
知识点
篇文章
语句
跟着
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
2018年网络安全竞赛题库
益阳网络技术优化公司
嵌入式软件开发作品
数据库双写 解决方案
网络安全教育内容简洁
阿里服务器租赁
崇明区智能化软件开发概念设计
如何查看云服务器配置
阿里云 如何导出数据库
c 时间服务器时间
计算机网络技术理科和文科的区别
地铁网络技术支持
wifi采集大数据库
越南软件开发 应届
学生网络安全应对措施
智能互联网络技术专业怎么样
rust加入服务器
高斯数据库迁移方案
网络安全广告怎么去除
服务器如何输入指令进入桌面
软件开发项目配置控制和变更控制
湖南衡阳网络安全陈丹丹
现代数据库技术实验指导书
网络安全演讲稿题目大全
银行网络安全 股票
计算机网络技术理科和文科的区别
如何去数据库的前十条
建立学校社团数据库
聚沙服务器不在线
在网络安全中安全攻击主体