资讯专栏INFORMATION COLUMN

PostgreSQL9.6:新增pg_blocking_pids函数准确定位 Blocking SQ

liuchengxu / 3409人阅读

摘要:创建测试表会话一备注会话一在事务里更新的记录,并不提交。会话二备注会话二删除的记录,此时由于这条记录之前被并没有提交,这句仍然处于等待状态。

PosttgreSQL 的SQL被锁情况在数据库维护过程中非常常见,之前博客 PostgreSQL 锁分析 演示了 PostgreSQL 锁的一些场景,在开始本文的介绍之前特做以下说明,假如会话A堵住会话B,我们称会话B为 blocked 会话,会话A为 blokcing 会话,后续介绍时都用这两个词;当数据库出现锁时,如果对应用有影响,DBA应该在最短的时间内找到 blocking 会话并快速处理,在 9.6 版本前查找 blocking SQL 通常需要查询 pg_stat_activity、 pg_locks 等一系列视图,增加了故障分析的时间,9.6 版本新增 pg_blocking_pids() 函数,能够快速找到 blocking SQL,下面模拟一个简单的场景介绍这个函数的使用。

--创建测试表

francs=> create table test_lock(id int4,name text);
CREATE TABLE

francs=> insert into test_lock values(1,"a"),(2,"b"),(3,"c");
INSERT 0 3

--会话一

francs=> select pg_backend_pid();
 pg_backend_pid 
----------------
          22814
francs=> begin;
BEGIN
          
francs=> update test_lock set name="cc" where id=3;
UPDATE 1

备注:会话一在事务里更新 ID=3 的记录,并不提交。

--会话二

francs=> select pg_backend_pid();
 pg_backend_pid 
----------------
          22845
(1 row)

francs=> delete from test_lock where id=3;

备注:会话二删除ID=3的记录,此时由于这条记录之前被UPDATE并没有提交,这句DELETE仍然处于等待状态。

--监控

备注:从图中看到之前操作的两条 SQL,为什么 22845 会话处于等待状态呢,运行 pg_blocking_pids 函数可以找到 blocking 会话,如下:

--查找 blocking SQL

postgres=# select pg_blocking_pids(22845);
 pg_blocking_pids 
------------------
 {22814}
(1 row)

备注:22814 正是 blocking SQL, 22845 为 blocked SQL。

--总结

这篇博客仅模拟了一个简单场景,并通过 pg_blocking_pids 函数查找 blocking
SQL,真实生产环境锁的案例远比这复杂,具体情况具体分析。

--参考
PostgreSQL 锁分析

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38976.html

相关文章

  • Pandas之旅(二): 有关数据清理的点点滴滴

    摘要:数据清洗大家好,这一期我将为大家带来我的学习心得第二期数据清理。这一期我会和大家分享一些比较好用常见的清洗方法。首先还是让我们来简单看一下本文将会用到的数据源这是一个超小型的房地产行业的数据集,大家会在文章最后找到下载地址。 数据清洗 大家好,这一期我将为大家带来我的pandas学习心得第二期:数据清理。这一步非常重要,一般在获取数据源之后,我们紧接着就要开始这一步,以便为了之后的各种...

    wenyiweb 评论0 收藏0
  • PostgreSQL9.6:Parallel sequential scans 初体验

    摘要:一关于参数这个参数配置决定了每个并行操作允许的最大后台进程数,这个值的设置受后台进程数参数限制。查看并行顺序扫描进程备注图中可看到出现了四个进程。三测试测试之前先把的数据库关了,在确保相等情况下进行测试。 Oracle 支持强大的并行功能,创建索引,表分析,数据加载时可以开启并行,这项功能让很多数据库产品垂涎, 作为开源数据库 PostgreSQL 在并行方面也在努力尝试,很早之前 P...

    wangdai 评论0 收藏0
  • PostgreSQL9.6新增加“idle in transaction”超时空闲事务自动查杀功能

    摘要:以上出自发行说明,这段指出版本支持自动查杀超过指定时间的空闲事务连接,下面演示下。修改以下参数备注参数单位为毫秒,这里设置超时空闲事务时间为秒。数据库日志备注数据库日志里清晰地记录了进程的连接由于空闲事务超时被断开连接。 熟悉 PostgreSQL 的朋友应该知道 idle in transaction 进程,引发 idle in transaction 的原因很多,例如应用代码中忘记...

    meislzhua 评论0 收藏0
  • 论坛评论提取论坛内容提取论坛用户信息提取

    摘要:何况不影响我们提取评论内容,只需分类出来考虑就行黑体注意下面余弦相似度这个是我开始的时候想多了大部分情况就是日期评论用户名,后来我没有考虑余弦相似度分类,代码少了,精度也没有下降。 背景 参加泰迪杯数据挖掘竞赛,这次真的学习到了不少东西,最后差不多可以完成要求的内容,准确率也还行。总共的代码,算上中间的过程处理也不超过500行,代码思想也还比较简单,主要是根据论坛的短文本特性和楼层之间...

    Wuv1Up 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<