我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么掌握PostgreSQL Locks的基础知识

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么掌握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;
BEGIN
Time: 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 4
Time: 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                | 2475
locktype           | relation
relation           | t_lock
mode               | RowExclusiveLock
page               | 
tuple              | 
virtualxid         | 
transactionid      | 
virtualtransaction | 3/2
granted            | t
fastpath           | t
Time: 9.013 ms

session 2

[local]:5432 pg12@testdb=# ---- session 2
[local]:5432 pg12@testdb=# begin;
BEGIN
Time: 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             | 2475
backend_xid     | 
wait_event_type | Client
wait_event      | ClientRead
state           | idle
query           | rollback;
-[ RECORD 2 ]---+------------------------------------------
pid             | 2480
backend_xid     | 669312
wait_event_type | Client
wait_event      | ClientRead
state           | idle in transaction
query           | update t_lock set id = 3000 where id = 3;
Time: 5.434 ms

xmax被更新为669312.

感谢各位的阅读,以上就是“怎么掌握PostgreSQL Locks的基础知识”的内容了,经过本文的学习后,相信大家对怎么掌握PostgreSQL Locks的基础知识这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么掌握PostgreSQL Locks的基础知识

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何快速掌握Python的基础知识

本篇内容主要讲解“如何快速掌握Python的基础知识”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何快速掌握Python的基础知识”吧!python函数函数通过def关键字定义,形如pytho
2023-06-27

快速掌握Go语言的基础知识

迅速掌握Go语言的入门要领随着互联网的快速发展,编程语言的选择也越来越多样化。Go语言作为一种新兴的编程语言,由于其简洁、高效和并发特性,受到了越来越多开发者的喜爱。如果你想迅速掌握Go语言的入门要领,本文将为你提供一些基础知识和学习方法
快速掌握Go语言的基础知识
2024-01-30

ASP知识点扫盲:快速掌握ASP基础知识

ASP,HTML,javascript,Session ASP是一种动态网页技术,它允许程序员使用脚本语言(如VBScript或JavaScript)来创建动态的网页。ASP可以用来生成HTML代码、处理数据和与数据库进行交互。
ASP知识点扫盲:快速掌握ASP基础知识
2024-02-05

外贸小白必须掌握的基础知识

学会外贸小白必须具备的基础知识,不仅能更好的开展外贸业务,及时解答各种客户疑难问题,还能借此判断客户是否专业,以防遇到骗取货物的业务骗局。 一、产品展示要规范产品陈列对于外贸业务的开展十分重要,精准全面的产品展示内容,能方便客户快速获取产品
2023-06-04

揭秘ASP基础:掌握ASP的核心知识

Asp是一种简单的通用脚本语言,可在Web服务器上运行或作为CGI二进制文件在Web应用程序中使用。因此,ASP core是构建Web应用程序的强大工具。
揭秘ASP基础:掌握ASP的核心知识
2024-02-05

linux运维需要掌握的基础知识有什么

这期内容当中小编将会给大家带来有关linux运维需要掌握的基础知识有什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。踏入linux运维工程师这一职业,其实有很多工具技能需要掌握,下面我来给大家一一介绍。
2023-06-06

从头学习:掌握Go语言的基础知识

从零开始:学习Go语言的基础知识简介Go语言,又称Golang,是一种由Google开发的开源编程语言。它于2009年发布,并迅速成为一种流行的语言,尤其是在Web开发、分布式系统和云计算等领域。Go语言以其简洁、高效、并发性强等特点而
从头学习:掌握Go语言的基础知识
2024-02-01

如何快速掌握Docker必备基础知识

本篇内容介绍了“如何快速掌握Docker必备基础知识”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!没有虚拟化技术的原始年代我们仔细想想,在没
2023-06-16

HTML语法精要:掌握网页基础知识

HTML 语法精要:网页基础知识的掌握
HTML语法精要:掌握网页基础知识
2024-03-09

怎么掌握Makefile的知识

今天就跟大家聊聊有关怎么掌握Makefile的知识,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。如果你现在使用 macOS 或者 Linux,那么你可以在终端输入命令man make
2023-06-15

Java编程需要必须掌握什么基础知识

这篇文章主要为大家展示了“Java编程需要必须掌握什么基础知识”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java编程需要必须掌握什么基础知识”这篇文章吧。1、掌握静态方法和属性 静态方法和
2023-06-27

超越基础知识:掌握 HTML 元素的复杂性

掌握 HTML 元素的复杂性:超越基础知识
超越基础知识:掌握 HTML 元素的复杂性
2024-03-04

编程热搜

目录