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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: [TOC]概述PostgreSQL9.6 版本较之前版本新增了一个参数:idle_in_transaction_session_timeout ,该参数是为了自动查杀存在的空闲事物idle in transaction。

[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;
BEGIN

postgres=# create table test03(id int, name text);
CREATE TABLE

postgres=# 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 unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.
postgres=# 

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

结语

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

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
18天前
|
关系型数据库 Serverless 分布式数据库
【公测】PolarDB PostgreSQL版Serverless功能免费使用​!
【公测】PolarDB PostgreSQL版Serverless功能免费使用​,公测于2024年3月28日开始,持续三个月,公测期间可以免费使用!
|
3月前
|
存储 关系型数据库 MySQL
PolarDB优势功能
PolarDB优势功能
|
6月前
|
存储 关系型数据库 数据库
深入了解 PostgreSQL:功能、特性和部署
PostgreSQL,通常简称为Postgres,是一款强大且开源的关系型数据库管理系统(RDBMS),它在数据存储和处理方面提供了广泛的功能和灵活性。本文将详细介绍 PostgreSQL 的功能、特性以及如何部署和使用它。
224 1
深入了解 PostgreSQL:功能、特性和部署
|
7月前
|
SQL 关系型数据库 测试技术
PolarDB的Online DDL功能验证实验
本场景带您体验如何在PolarDB-X中进行Online DDL。
951 0
|
1月前
|
关系型数据库 Serverless 分布式数据库
PolarDB PostgreSQL版Serverless功能上线公测啦,公测期间免费使用!
Serverless数据库能够使得数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。PolarDB PostgreSQL版 Serverless提供了CPU、内存、存储、网络资源的实时弹性能力,构建计算与存储分离架构下的 PolarDB PostgreSQL版产品新形态。
|
2月前
|
SQL 关系型数据库 分布式数据库
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能,而不是使用IF函数
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能,而不是使用IF函数
42 7
|
2月前
|
关系型数据库 Linux Shell
Centos系统上安装PostgreSQL和常用PostgreSQL功能
Centos系统上安装PostgreSQL和常用PostgreSQL功能
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL企业版与标准版功能对比:如何选择适合您的版本?
随着数字化时代的到来,企业对于数据处理的需求越来越高,而数据库作为数据处理的核心,其性能和成本成为了企业关注的焦点。阿里云全新推出的PolarDB MySQL企业版和标准版,以全新的架构和优化,为企业提供了高性能、低成本的数据库解决方案。但在功能上,这两个版本有很多差异,我们该如何选择呢?
55 2
|
3月前
|
SQL 关系型数据库 分布式数据库
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能【1月更文挑战第13天】【1月更文挑战第65篇】
30 2
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL版:强大功能,超高性能,满足企业级需求
PolarDB MySQL版:强大功能,超高性能,满足企业级需求 在当今信息化社会,企业对于数据处理的需求日益增长,如何选择一款高性能、高可靠性且成本合理的数据库成为了一大挑战。阿里巴巴的PolarDB MySQL版应运而生,它不仅兼容MySQL,还具备传统数据库所不具备的优势,为企业提供了更高效、更可靠的数据处理方案。
107 3