千家信息网

怎么理解PostgreSQL中session hang情况

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍"怎么理解PostgreSQL中session hang情况",在日常操作中,相信很多人在怎么理解PostgreSQL中session hang情况问题上存在疑惑,小编查阅了各式资料,
千家信息网最后更新 2025年11月08日怎么理解PostgreSQL中session hang情况

这篇文章主要介绍"怎么理解PostgreSQL中session hang情况",在日常操作中,相信很多人在怎么理解PostgreSQL中session hang情况问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么理解PostgreSQL中session hang情况"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在执行SQL的时候可能会碰到session hang的情况,这时候我们其实不知道是因为SQL本身执行很慢还是因为lock导致hang,因此一般情况下需要通过查询pg_stat_activity、pg_locks等系统表来确认。除之之外,PG还提供了通过statement timeout的超时机制来处理这种情况。

session 1
创建数据表,启动事务,执行查询

testdb=# create table t_timeout(id int);CREATE TABLEtestdb=# testdb=# begin;BEGINtestdb=# testdb=# select count(*) from t_timeout; count -------     0(1 row)testdb=# select * from pg_locks where pid = pg_backend_pid();  locktype  | database | relation | page | tuple | virtualxid | transactionid | classid | objid | objsubid | virtualtransaction | pid  |      mode       | granted | fastpath ------------+----------+----------+------+-------+------------+---------------+---------+-------+----------+--------------------+------+-----------------+---------+---------- relation   |    16384 |    11645 |      |       |            |               |         |       |          | 3/94               | 1719 | AccessShareLock | t       | t virtualxid |          |          |      |       | 3/94       |               |         |       |          | 3/94               | 1719 | ExclusiveLock   | t       | t relation   |    16384 |   286770 |      |       |            |               |         |       |          | 3/94               | 1719 | AccessShareLock | t       | f(3 rows)testdb=#

session 2
执行alter table命令,hang住

testdb=# -- session 2testdb=# alter table t_timeout add column c1 int;-- 挂起

设置50ms超时,SQL返回超时错误

testdb=# begin;BEGINtestdb=# SET statement_timeout = 50;SETtestdb=# alter table t_timeout add column c1 int;ERROR:  canceling statement due to statement timeouttestdb=#

不过这样的设置,需要DBA对SQL的执行时长有初步的估算,比如增加列操作,正常应在10ms内返回,那设置超时50ms是没有问题,但对于vacuum full这样的操作来说,设置为50ms就很不合适了。

testdb=# SET statement_timeout = 50;SETtestdb=# vacuum full;ERROR:  canceling statement due to statement timeouttestdb=#

也就是说,设置超时会存在误伤,需谨慎使用。

到此,关于"怎么理解PostgreSQL中session hang情况"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

情况 学习 更多 问题 帮助 查询 合适 实用 接下来 也就是 也就是说 事务 命令 数据 数据表 文章 方法 时候 时长 机制 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 图片服务器 nginx 数据库账户爆破 无线网络技术第二版习题答案 杭州优翡网络技术有限公司 交通运输部网络安全与信息化 计算机网络技术的集中管理 走网络安全方面需要考什么证 游戏服务器网络优化 足球经理 数据库 大小 centos服务器备份 线下购物商城软件开发 一键搭建云服务器脚本 多媒体技术与网络技术结合 软件服务器地址是什么意思 csol2无法更新服务器 贵州独山软件开发有限公司 服务器管理器角色没有 数据库做压力测试工具 自动化设备在网络安全中的应用 w7网络安全补丁 为什么选者软件开发这个专业 数据库应用技术是什么意思 饥荒服务器怎么给别人管理员 vb界面计算软件开发 服务器阵列卡什么情况会坏 湖州市网络安全宣传 目前数据库的新技术有哪些 网络安全的核心竞争力 松江区创新数据库收费标准 情报及网络安全保卫工作
0