Postgres 超时 (Timeout) 详解

news2024/11/25 20:16:58

原文地址 https://www.bytebase.com/blog/postgres-timeout/

PostgreSQL 提供各种超时 (Timeout) 设置,通过控制某些进程的持续时间来帮助管理和优化数据库操作。这些超时对于确保系统的稳定性和性能至关重要,尤其是在高流量或复杂查询的环境中。让我们一一回顾。

(一)语句超时 (statement_timeout)
statement_timeout 设置了单个查询允许执行的最长时间限制。如果查询超过了这个时间限制,PostgreSQL 将自动终止查询并返回错误信息。

ERROR:  canceling statement due to statement timeout
错误:由于语句超时而取消语句

如果单个 simple-Query 消息中出现多个 SQL 语句,则超时将分别应用于每个语句。statement_timeout 可有效防止长时间运行的查询占用过多资源或导致数据库出现性能问题。

(二)锁超时 (lock_timeout)
lock_timeout 控制一个事务为获得数据库对象(如表或行)上的锁而等待的时间,然后才会放弃并返回错误。

ERROR:  canceling statement due to lock timeout
错误:由于锁超时而取消语句

在 Postgres 中,等待获取资源锁的事务会阻塞需要在同一资源上获取冲突锁的传入事务。对于获取重量级锁(如运行 DDL 语句)的事务,建议设置 lock_timeout。常见的做法是创建一个单独的 Postgres 用户来运行 DDL,并为该用户设置一个较短的 lock_timeout。

ALTER ROLE ddl_user SET lock_timeout = 10000; -- 10 秒

(三)事务会话空闲超时 (idle_in_transaction_session_timeout)
idle_in_transaction_session_timeout 控制会话在事务中空闲的最长时间。如果会话在事务中的空闲时间超过指定的超时时间,PostgreSQL 将自动终止会话并回滚正在进行的事务。

ERROR:  terminating connection due to idle-in-transaction timeout
错误:由于事务中的空闲超时而终止连接

假设您有一个应用程序,在等待用户输入或执行一些与数据库无关的处理时,偶尔会让事务处于进行状态。如果一个事务处于进行和空闲状态的时间过长,它可能会持有表或行上的锁,从而阻止其他事务访问这些资源。通过设置 idle_in_transaction_session_timeout 可以自动终止这些空闲会话,确保资源不会被不必要地占用。即使没有重要的锁,一个进行中的事务会阻止清理( vacumm)已经被删除,但在当前事务仍然可见的元组;因此,长时间处于空闲状态会导致表膨胀。

(四)空闲会话超时 (idle_session_timeout)
idle_session_timeout 控制会话在被自动终止前的最长空闲时间。与 idle_in_transaction_session_timeout 不同的是,idle_session_timeout 只适用于在事务中处于空闲状态的会话,而 idle_session_timeout 则适用于任何处于空闲状态的会话,无论它是否在事务中。

ERROR:  terminating connection due to idle session timeout
错误:由于空闲会话超时而终止连接

在使用连接池或其他中间件时要小心,因为这样的层可能不会对意外的连接关闭做出很好的反应。好的做法是为交互式处理创建一个单独的 Postgres 用户,并相应地设置 idle_session_timeout。

ALTER ROLE interactive_user SET idle_session_timeout = 600000; -- 10 分钟

(五)事务超时 (transaction_timeout)
在这里插入图片描述

即将发布的 Postgres 17 版本将引入新的 transaction_timeout。从文档中可以看到
在一个事务中终止任何超过指定时间的会话。该限制既适用于显式事务(以 BEGIN 开始),也适用于与单条语句相对应的隐式事务。
一个典型的网络服务由 3 个主要部分组成:

  • 网络服务器
  • 应用程序服务器
  • 数据库服务器

为防止长时间连接,通常会在网络服务器和应用程序服务器上设置连接超时。当网络服务器/应用服务器已经终止连接时,再处理事务就太浪费了。在引入事务超时(transaction_timeout)之前,没有防止长时间事务的可靠方法。即使同时设置了 statement_timeout 和 idle_in_transaction_session_timeout,如果事务是由短语句和中间的短暂停顿组成的,那么该事务仍然是开放的。
你可能想知道,为什么 PostgreSQL 花了这么长时间才推出一个直接的事务超时功能 – 迟到总比不到好 😁!顺便说一句,MySQL 也没有这个功能 😜。

参考资料:
官方文档 (https://www.postgresql.org/docs/current/runtime-config-client.html)
pgsql-hackers 关于引入 transaction_timeout 的讨论 (https://www.postgresql.org/message-id/flat/f508267d1ba8f0bfd7b93181d10511dc%40oss.nttdata.com#2506da45ff92aaea65c30996fbf19c85)


💡 更多资讯,请关注 Bytebase 公号:Bytebase

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2045493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

脱胎于 S 语言的R语言,它何为成为各行业数据分析师的首选?

下面内容摘录自《R 语言与数据科学的终极指南》专栏文章的部分内容,每篇文章都在 5000 字以上,质量平均分高达 94 分,看全文请点击下面链接: 1章3节:R 语言的产生与发展轨迹(更新2024/08/14)-C…

积木报表导出数据量太大报错

积木报表导出数据量太大报错问题处理 问题背景解决方案运行结果关键代码 问题背景 积木报表在导出大量数据时可能会遇到报错‌,‌这通常是由于数据量大导致的性能问题或数据处理方式不当引起的。‌以下是一些可能导致报错的原因及相应的解决方法:‌ …

Redis13-多级缓存

目录 概述 JVM进程缓存 Caffeine 实现进程缓存 Lua语法 初识Lua 变量和循环 Lua的数据类型 声明变量 循环 条件控制、函数 函数 条件控制 实现多级缓存 安装OpenResty OpenResty快速入门 请求参数处理 查询Tomcat 发送http请求的API 封装http工具 CJSON工…

传感器灯光与避障系统的详细作用!

传感器灯光 视觉指示:传感器灯光为无人机提供了直观的视觉指示,帮助飞行员或地面操作人员清晰地识别无人机的飞行状态、方向和位置。 通信与警示:通过特定的灯光颜色和闪烁模式,传感器灯光能够传达无人机的特定状态或警告信息&a…

Gato:A Generalist Agent

发表时间:11 Nov 2022 论文链接:https://readpaper.com/pdf-annotate/note?pdfId4689785740490440705&noteId2412686834489472512 作者单位:DeepMind 前言:近日,DeepMind发布了文章《A Generalist Agent》&#…

jenkins配置+vue打包多环境切换

jenkins配置流水线过程 1.新建item 加入相关的参数就行了。 流水线脚本设置 后端脚本 node {stage checkoutsh"""#每次打包清空工作空间目录rm -rf $workspace/*cd $workspace#到工作空间下从远端svn服务端拉取代码svn co svn://10.1.19.21/repo/技术中台/低…

深度学习基础之循环神经网络

目录 基本概念与特点 定义与工作原理 结构组成 应用领域 自然语言处理 语音识别 时间序列分析 优缺点 优点 缺点 改进方法 总结 循环神经网络在自然语言处理中的最新应用和研究进展是什么? 长短期记忆网络(LSTM)与门控循环单元…

国内首个非遗数字人智能体,AI让传统文化“活”起来

在数字化与智能化时代,文化传承正迎来全新的机遇。河南省非物质文化遗产保护和智慧化中心基于百度文心智能体平台,成功推出了国内首个非遗数字人(智能体)——「河南非遗数字人」,开启了非遗文化传播的新篇章。 河南非遗…

vue3中引入高德地图初始化,并添加、删除marker

目录 先上图 1.npm引入插件(高德地图官方推荐) 2.页面中引入使用 3.地图初始化 4.标记marker的添加和删除 先上图 1.npm引入插件(高德地图官方推荐) npm install amap/amap-jsapi-loader 2.页面中引入使用 import AMapLoad…

Therabody™明星产品TheragunⓇ筋膜枪,以科技健康助力舞台高光时刻

(2024 年 8月16日,中国上海)近日,热门音乐竞演综艺《披荆斩棘》携最新一季热血回归,节目邀请三十四位知名男艺人走上舞台,带来精彩绝伦的表演,受到广大观众的喜欢。Therabody™的明星产品Therag…

科目一满分刷题技巧(三)

十六、三超扣分★常考 口诀:高速扣分,上扣12下扣6; 普路扣分,普车3下6上;校中危记住9/6/1 口诀:校客旅,上扣12,下扣6 普车超载100%扣12,(50%基准,3下6上)…

本地连接腾讯云服务器

本地连接腾讯云服务器 1 查看服务器信息1.1 登录腾讯云官网1.2 打开开发者控制台1.3 打开已购买的服务器1.4 查看系统类型和 IP 2 本地连接服务器 1 查看服务器信息 1.1 登录腾讯云官网 官网链接 1.2 打开开发者控制台 控制台链接 1.3 打开已购买的服务器 1.4 查看系统类型…

企业图纸要怎么加密?2024年最好用的十款图纸加密软件排行榜

在数字化进程不断加速的2024年,企业图纸的安全保护愈发重要。如何有效地对企业图纸进行加密,成为了众多企业关注的焦点。为了帮助您找到最佳的解决方案,我们精心整理了2024年最好用的十款图纸加密软件排行榜。 1. 安秉图纸加密软件 安秉图纸…

AI编程工具合集

GPT-4o (OpenAI) 这里是一些知名和广泛使用的AI编程工具及其简要介绍: 1. 框架和库 (Frameworks and Libraries) - TensorFlow: 由谷歌开发的开源深度学习框架,支持多种平台,适合构建和训练复杂神经网络。 - PyTorch: 由Facebook的人工智能研…

Unity Recttransform操作

1、拉伸铺满 RectTransform rect GetComponent<RectTransform>();rect.anchorMin Vector2.zero;rect.anchorMax Vector2.one;rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Screen.width);rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Verti…

3-3 红外人体感应模块(智能应用篇)

3-3 红外人体感应模块&#xff08;智能应用篇&#xff09; 3-3 红外人体感应模块介绍红外人体感应传感器模块&#xff08;HC-SR501原理&#xff09;电路连接示例程序效果演示人体感应传感器模块调节控制&#xff08;1&#xff09;调节感应距离&#xff08;2&#xff09;调节感应…

COMSOL碱性电解槽

记录下COMSOL案例库里面的碱性电解槽对应的文献资料和心得 文献资料参考&#xff1a; 1&#xff1a;Multiphase Fluid Dynamics and Mass Transport Modeling in a Porous Electrode toward Hydrogen Evolution Reactionhttps://pubs.acs.org/doi/10.1021/acs.iecr.2c00990# 2&…

one-shot 序列图像红外小目标分割

one-shot 序列图像红外小目标分割 IEEE TRANSACTIONS ON GEOSCIENCE AND REMOTE SENSING 代码还未开源 GitHub - D-IceIce/one-shot-IRSTS few-shot&#xff1a;利用少量标注样本进行学习 one-shot: 属于few-shot的特殊情况&#xff0c;只用一个样本进行学习 zero-shot&am…

利用Proxy302构建高效代理IP平台:从功能到架构解析

在现代互联网环境中&#xff0c;代理IP已成为企业和个人在隐私保护、网络爬虫、广告验证等场景中的关键工具。在众多代理IP平台中&#xff0c;如何选择一个高效且易用的平台&#xff1f;怎么搭建企业自己的代理IP平台&#xff0c;本文将从多个维度对进行深度分析与简易架构拆解…

你的 “可爱” 同事 justify-content 还在写 left、right 吗??

据 w3c 文档记录&#xff1a; 所以&#xff1a; justify-content 的取值只有这几种&#xff1a; flex-start | flex-end | center | space-between | space-around 千万不要向我 “可爱” 的同事一样这么写&#xff1a; 和他说了还在那里狡辩说来说去不是她 结果一…