[TOC]

概述

PostgreSQL9.6 版本较之前版本新增了一个参数:idle_in_transaction_session_timeout ,该参数是为了自动查杀存在的空闲事物
idle in transaction。下面我们详细了解下这个参数

参数简介

PG在日常使用中会有 ‘idle in transaction’ 进程,引发这个进程的原因一般都是 代码中忘记关闭已开启的事物,或是系统中存在僵死的进程等。
‘idle in transaction’ 会阻止vacuum,造成数据膨胀,又有可能引起PG的事物ID wraparound的危险

为解决这个问题。9.6新增超时自动查杀空闲事物的功能
默认:idle_in_transaction_session_timeout = 20000
单位毫秒,也就是20秒就会自动查杀空闲事物

这个参数的设置,可以先仔细观察自己系统中是否经常存在空闲事物,要是存在的多,可以设置一下
如果自己的业务逻辑上,在事物开启后需要等待一些时间的话。需要考虑下这个超市设置多少合适,根据自己业务而定。
如果设置的过短,可能会对一些业务产生影响

简单测试

打开参数

该参数并不是默认开启,需要手动配置才能开启此功能。在postgresql.conf文件中找到添加 一行

idle_in_transaction_session_timeout = 20000 

修改此参数无需重启数据库,reload即可。应用连接也无需重连

pg_ctl reload 

设置之后在命令行可查看该参数设置

postgres=# show idle_in_transaction_session_timeout;idle_in_transaction_session_timeout
-------------------------------------20s
(1 row)

即表示已经启用

测试事物

开启一个事物,创建一张表插入一条数据

postgres=# begin;
BEGINpostgres=# create table test03(id int, name text);
CREATE TABLEpostgres=# insert into test03 values (1,'dasd');
INSERT 0 1

此时查看事物状态,可以看到 state 为 idle in transaction,此时就触发了上述参数控制的内容。若在超时时间内继续事物操作,则无任何报错。但是一旦超过超时时间。事物就会被强制中断。

select * from pg_stat_activity where pid<>pg_backend_pid();
-[ RECORD 3 ]----+--------------------------------------
datid            | 13285
datname          | postgres
pid              | 2015
usesysid         | 10
usename          | postgres
application_name | psql
client_addr      |
client_hostname  |
client_port      | -1
backend_start    | 2019-04-23 19:16:30.454131+08
xact_start       | 2019-04-23 21:25:04.850255+08
query_start      | 2019-04-23 21:25:46.20997+08
state_change     | 2019-04-23 21:25:46.210208+08
wait_event_type  | Client
wait_event       | ClientRead
state            | idle in transaction
backend_xid      | 606
backend_xmin     |
query            | insert into test03 values (1,'dasd');
backend_type     | client backend

超时等待

我们等待20s至事物超时。
再在原事物中随便执行一个命令
可以发现已经报错

postgres=# select 1;
FATAL:  terminating connection due to idle-in-transaction timeout
server closed the connection unexpectedlyThis probably means the server terminated abnormallybefore or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.
postgres=# 

我们在看下之前我们创建的表和插入的一条数据,已经不存在了,说明此参数杀事物时采用回滚的方式

结语

该参数在复杂的应用场景中可能会满足客户的业务需求。具体的超时时间需要客户根据自己的业务类型来做出选择。但是宜多不宜少,过少的话会将一些正在进行的事物回滚,导致出错。过多的话只会让清理慢一些。影响相对小一点。

PostgreSQL9.6+新增空闲事务自动查杀功能相关推荐

  1. 一键清理网站木马文件,从此网站拥有专属保镖 ——阿里云虚拟主机推出木马查杀功能

    近日,阿里云推出了云虚拟主机网站木马查杀的新功能,十分适合对网站安全不了解.不熟悉的用户,或网站出现挂马情况不清楚如何处理的用户. 阿里云表示,此次网站木马查杀功能是阿里云安骑士专为虚拟主机推出的安全 ...

  2. 一键清理网站木马文件,从此网站拥有专属保镖 ——阿里云虚拟主机推出木马查杀功能...

    摘要: 近日,阿里云推出了云虚拟主机网站木马查杀的新功能,十分适合对网站安全不了解.不熟悉的用户,或网站出现挂马情况不清楚如何处理的用户. 阿里云表示,此次网站木马查杀功能是阿里云安骑士专为虚拟主机推 ...

  3. 奇虎360安全卫士推出木马程序查杀功能

    奇虎360安全卫士推出木马程序查杀功能[@more@]6月15日,奇虎公司对外宣布,旗下所属的国内最大安全辅助类软件360安全卫士推出木马程序查杀功能.据悉,这是国内首款免费.专业的木马查杀功能,是3 ...

  4. 计算机病毒查杀功能软件有哪些,计算机病毒查杀方法

    面对计算机病毒日益剧增,普通人的电脑中病毒的几率越来越大,学习几招查杀病毒的方法,有助于保持系统安全运行也避免一些不必要的损失.下面是学习啦小编跟大家分享的是计算机病毒查杀方法,欢迎大家来阅读学习. ...

  5. 网站后门查杀工具推荐

    作为一个小站长,对于网站的后门代码肯定是深恶痛绝的,尤其是在建站初期,因为一些原因而使用非正版主题,很容易出现这个问题,而往往一些不良的代码贩子,总喜欢给自己贩卖的主题等源代码贴上完美破解.无后门等标 ...

  6. 【Linux 僵尸进程查杀】 Linux 进程查看,查杀,查询,查询用户归属,stopped、zombie查杀

    一.用top能够查看僵尸进程数量 二.自动查杀 ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill ...

  7. linux服务器杀毒软件命令,悬镜Linux服务器卫士-木马查杀详解

    原标题:悬镜Linux服务器卫士-木马查杀详解 今天悬镜小编详细给大家讲解下悬镜管家中-木马查杀功能的使用情况. 对于WebShell的理解,"Web"显然需要服务器开放Web服务 ...

  8. Python文件自我复制感染病毒及其查杀解毒

    病毒功能 针对当前文件夹下所有的.py文件以及所有下属文件夹内的所有.py文件进行病毒感染,将病毒代码复制到文件的原代码之前,同时病毒操作者还可以对病毒复制感染的次数进行设置. 病毒代码 ## STA ...

  9. d盾web查杀 linux,D盾扫描_D盾_Web查杀 [webshell查杀]

    因为某些特殊目录无法删除,D盾_web查杀 加入了这类目录和文件的删除. 删除目录功能只能删除特殊的目录,如选定的目录不是特殊目录,此功能是无效的,防止误删除! 『D盾_Web查杀』 2015-07- ...

最新文章

  1. pip删除依赖、配置虚拟环境
  2. java-第十三章-类的无参方法(一)-实现客户姓名的添加和显示
  3. DL之DilatedConvolutions:Dilated Convolutions(膨胀卷积/扩张卷积)算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  4. jqPlot图表插件使用说明(一)
  5. php 图片透明,PHP怎么把一张图片透明化
  6. 数据库的流程,制度,安全优化
  7. 针对“零时差”*** 赛门铁克推免费杀毒软件
  8. mysql窗口函数_MySQL8.0窗口函数入门实践及总结
  9. iPhone 12 Pro最新概念图:五摄相机模组也带下巴
  10. 【转】NHibernate集合映射中的set, list, map, bag, array
  11. TCP Timestamp选项
  12. PHP中静态(static)调用非静态方法详解--调用!!!
  13. 15日精读掌握《高德纳:具体数学》计划(2019.5/27-2019/6/10)
  14. day 11 python基础语法学习 ——函数
  15. hexo+yilia修改代码块等样式
  16. 等保2.0落地解读与实践分析
  17. catia制作物料明细_CATIA导出装配文件的部件列表BOM清单到Excel文件 | 坐倚北风
  18. android水印相机,Android 水印相机开发
  19. Quartz的一般配置方法
  20. R语言之主成分回归与偏最小二乘xt8.3xt8.4

热门文章

  1. 五个方面入手 教你如何成为领导型CIO
  2. 我最喜欢的几个苏州美食
  3. 干货!一文读懂人工智能和机器学习有什么关系
  4. 百度开源联邦学习框架 PaddleFL:简化大规模分布式集群部署
  5. 完胜 BERT,谷歌最佳 NLP 预训练模型开源
  6. 如何在算法交易中使用AI?摩根大通发布新版指南
  7. 知乎李大海:AI 不只是噱头,满足需求才是真落地
  8. SAP MM 项目上线库存初始化导入问题 --- 进口物料在途库存之处理
  9. 2022年重大颠覆性科技创新趋势报告(完整版)
  10. 数字孪生:连结现实与数字世界