idle_in_transaction_session_timeout
一个配置参数,用于确定在终止具有打开的事务的会话之前的时间长度
idle_in_transaction_session_timeout
是一个 配置参数,用于确定在终止具有打开的事务的会话之前的时间长度。默认情况下,它被禁用。
idle_in_transaction_session_timeout
添加于 PostgreSQL 9.6 中。
默认值
idle_in_transaction_session_timeout
的默认值为:0
(禁用)。
按 PostgreSQL 版本分列的详细信息
idle_in_transaction_session_timeout (PostgreSQL 17)
设置 | 0 |
单位 | 毫秒 |
类别 | 客户端连接默认值 / 语句行为 |
简短描述 | 设置在事务中查询之间允许的最大空闲时间。 |
额外描述 | 值为 0 将关闭超时。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 0 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 0 |
重置值 | 0 |
源文件 | |
源代码行号 | |
待重启 | 否 |
idle_in_transaction_session_timeout (PostgreSQL 16)
设置 | 0 |
单位 | 毫秒 |
类别 | 客户端连接默认值 / 语句行为 |
简短描述 | 设置在事务中查询之间允许的最大空闲时间。 |
额外描述 | 值为 0 将关闭超时。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 0 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 0 |
重置值 | 0 |
源文件 | |
源代码行号 | |
待重启 | 否 |
idle_in_transaction_session_timeout (PostgreSQL 15)
设置 | 0 |
单位 | 毫秒 |
类别 | 客户端连接默认值 / 语句行为 |
简短描述 | 设置在事务中查询之间允许的最大空闲时间。 |
额外描述 | 值为 0 将关闭超时。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 0 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 0 |
重置值 | 0 |
源文件 | |
源代码行号 | |
待重启 | 否 |
idle_in_transaction_session_timeout (PostgreSQL 14)
设置 | 0 |
单位 | 毫秒 |
类别 | 客户端连接默认值 / 语句行为 |
简短描述 | 设置在事务中查询之间允许的最大空闲时间。 |
额外描述 | 值为 0 将关闭超时。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 0 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 0 |
重置值 | 0 |
源文件 | |
源代码行号 | |
待重启 | 否 |
idle_in_transaction_session_timeout (PostgreSQL 13)
设置 | 0 |
单位 | 毫秒 |
类别 | 客户端连接默认值 / 语句行为 |
简短描述 | 设置任何空闲事务允许的最长持续时间。 |
额外描述 | 值为 0 将关闭超时。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 0 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 0 |
重置值 | 0 |
源文件 | |
源代码行号 | |
待重启 | 否 |
idle_in_transaction_session_timeout (PostgreSQL 12)
设置 | 0 |
单位 | 毫秒 |
类别 | 客户端连接默认值 / 语句行为 |
简短描述 | 设置任何空闲事务允许的最长持续时间。 |
额外描述 | 值为 0 将关闭超时。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 0 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 0 |
重置值 | 0 |
源文件 | |
源代码行号 | |
待重启 | 否 |
idle_in_transaction_session_timeout (PostgreSQL 11)
设置 | 0 |
单位 | 毫秒 |
类别 | 客户端连接默认值 / 语句行为 |
简短描述 | 设置任何空闲事务允许的最长持续时间。 |
额外描述 | 值为 0 将关闭超时。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 0 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 0 |
重置值 | 0 |
源文件 | |
源代码行号 | |
待重启 | 否 |
idle_in_transaction_session_timeout (PostgreSQL 10)
设置 | 0 |
单位 | 毫秒 |
类别 | 客户端连接默认值 / 语句行为 |
简短描述 | 设置任何空闲事务允许的最长持续时间。 |
额外描述 | 值为 0 将关闭超时。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 0 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 0 |
重置值 | 0 |
源文件 | |
源代码行号 | |
待重启 | 否 |
idle_in_transaction_session_timeout (PostgreSQL 9.6)
设置 | 0 |
单位 | 毫秒 |
类别 | 客户端连接默认值 / 语句行为 |
简短描述 | 设置任何空闲事务允许的最长持续时间。 |
额外描述 | 值为 0 将关闭超时。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 0 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 0 |
重置值 | 0 |
源文件 | |
源代码行号 | |
待重启 | 否 |
更改历史记录
- PostgreSQL 9.6
- 添加 (提交 c6dda1f4)
源代码
GUC 变量位于 src/backend/storage/lmgr/proc.c 中
int IdleInTransactionSessionTimeout = 0;
GUC 配置位于 src/backend/utils/misc/guc.c 中
{ {"idle_in_transaction_session_timeout", PGC_USERSET, CLIENT_CONN_STATEMENT, gettext_noop("Sets the maximum allowed duration of any idling transaction."), gettext_noop("A value of 0 turns off the timeout."), GUC_UNIT_MS }, &IdleInTransactionSessionTimeout, 0, 0, INT_MAX, NULL, NULL, NULL },
超时在 PostgresMain()
(src/backend/tcop/postgres.c) 中启动和执行。
示例
演示 idle_in_transaction_session_timeout
的效果,使用不切实际的短设置 5s
postgres=# SET idle_in_transaction_session_timeout = '5s'; SET postgres=# SHOW idle_in_transaction_session_timeout; idle_in_transaction_session_timeout ------------------------------------- 5s (1 row)
postgres=# SELECT clock_timestamp(); clock_timestamp ---------------------------- 2019-08-06 16:32:44.603+01 (1 row) postgres=# BEGIN ; BEGIN
... 至少 5 秒钟什么也不做 ...
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=# SELECT clock_timestamp(); clock_timestamp ------------------------------ 2019-08-06 16:32:52.92625+01 (1 row)
服务器的日志文件中将有一条类似于以下内容的条目
[2019-08-06 16:32:50 CET] psql postgres postgres FATAL: 25P03: terminating connection due to idle-in-transaction timeout
参考文献
- PostgreSQL 文档: idle_in_transaction_session_timeout
有用链接
- idle_in_transaction_session_timeout:终止 PostgreSQL 中的空闲事务 - 2018 年 4 月 CyberTec 博客文章