千家信息网

怎么理解PostgreSQL中session hang情况

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,这篇文章主要介绍"怎么理解PostgreSQL中session hang情况",在日常操作中,相信很多人在怎么理解PostgreSQL中session hang情况问题上存在疑惑,小编查阅了各式资料,
千家信息网最后更新 2025年01月22日怎么理解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安全错误 数据库的锁怎样保障安全 软件开发子模块划分 华为云服务器多少钱 企业网络安全优化方案 网络安全职责分离 网络安全工程师北上广工资 数据库安全性语言 深圳软件开发工工资 网络硬件服务器与工作站 下载视频提示连接服务器视频 打印服务器和局域网共享哪个稳定 美国网络安全概念股实时行情 手机软件开发需要学习什么 pg数据库升级注意事项 python跨平台桌面软件开发 漳平做小程序软件开发定制 普陀区优势软件开发产品介绍 软件开发职位具体有哪些 数据库的字符集校对选什么 怎样修改表的数据库 数字湾区网络安全创新大会 互联网科技公司福利报告 黄山市文旅局网络安全培训 服务器数据怎么存到存储磁盘 零基础学炒股软件开发 服务器冷却液龙头股票 数据库应用技术教程实践报告 oracle数据库岗位有 软件开发自已能做事 综合软件开发实践简易报告 csgo进不了服务器
0