前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostgreSQL执行超时的问题

PostgreSQL执行超时的问题

作者头像
朝雨忆轻尘
发布2019-06-19 16:00:35
5K0
发布2019-06-19 16:00:35
举报
文章被收录于专栏:朝雨忆轻尘朝雨忆轻尘

PostgreSQL执行超时的问题

使用背景

最近在使用PostgreSQL的时候,在执行一些数据库事务的时候,先后出现了statement timetout 和idle-in-transaction timeout的问题,导致数据库操作失败。

经研究查找,PostgreSQL有关于SQL语句执行超时和事务执行超时的相关配置,而默认超时时间是10000毫秒,即10秒钟的时间,这样会导致执行时间稍长的任务执行失败。可以通过修改PostgreSQL服务器配置文件的方式修改默认配置。

参数说明

statement_timeout

statement_timeout 在 postgresql 被用来控制语句执行时长,单位是ms。

代码语言:ruby
复制
$ vi postgresql.conf 
#statement_timeout = 0                  # in milliseconds, 0 is disabled
  • 1
  • 2

默认是0,表示语句可以一直执行下去。

如果设置为10000,那就意味着语句最多可以执行 10000ms = 10s。  建议设置为0,禁用该参数。

idle_in_transaction_session_timeout

PostgreSQL 9.6版本开始支持自动查杀超过指定时间的 idle in transaction 空闲事务连接,用于清理应用代码中忘记关闭已开启的事务,或者系统中存在僵死进程等。

idle_in_transaction_session_timeout 在 postgresql 被用来控制事务执行时长,单位是ms。

代码语言:ruby
复制
$ vi postgresql.conf 
#idle_in_transaction_session_timeout = 0                  # in milliseconds, 0 is disabled
  • 1
  • 2

默认是0,表示语句可以一直执行下去。超时会报 FATAL: terminating connection due to idle-in-transaction timeout。

修改方法

查找配置

通过命令查找到postgresql配置文件的位置,用vi进行编辑。

代码语言:javascript
复制
find / -name "postgresql.conf"
vi /var/lib/pgsql/9.6/data/postgresql.conf

修改参数

进入vi编辑界面,可以通过vi查找命令定位到相关参数,修改成合适的时间,保存退出。

代码语言:javascript
复制
:/statement_timeout

重启配置

通过以下命令,查找pg_ctl的位置,然后执行 pg_ctl reload重新加载配置。

代码语言:javascript
复制
find / -name "pg_ctl"

/usr/pgsql-9.6/bin/pg_ctl reload

PG_CTL用法

启动服务器

启动服务器:

代码语言:javascript
复制
$ pg_ctl start

启动服务器的一个例子,等到服务器启动了才退出:

代码语言:javascript
复制
$ pg_ctl -w start

服务器使用 5433 端口,而且不带 fsync 运行,使用:

代码语言:javascript
复制
$ pg_ctl -o "-F -p 5433" start
停止服务器
代码语言:javascript
复制
$ pg_ctl stop

使用 -m 选项停止服务器允许用户控制如何关闭后端。

重启服务器

这个命令几乎等于先停止服务器然后再启动它,只不过 pg_ctl 保存并重新使用上一次运行服务器的命令行参数。重启服务器的最简单的方法是:

代码语言:javascript
复制
$ pg_ctl restart

重启服务器,等待其停止和重启:

代码语言:javascript
复制
$ pg_ctl -w restart

使用 5433 端口重启并且重启后关闭 fsync :

代码语言:javascript
复制
$ pg_ctl -o "-F -p 5433" restart
显示服务器状态

下面是来自 pg_ctl 的状态输出的例子:

代码语言:javascript
复制
$ pg_ctl statuspg_ctl: server is running (pid: 13718)
Command line was:
/usr/local/pgsql/bin/postgres '-D' '/usr/local/pgsql/data' '-p' '5433' '-B' '128'

这就是在 restart 模式中被调用的命令行。


作者:朝雨忆轻尘 出处:https://www.cnblogs.com/xifengxiaoma/  版权所有,欢迎转载,转载请注明原文作者及出处。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PostgreSQL执行超时的问题
  • 使用背景
  • 参数说明
    • statement_timeout
      • idle_in_transaction_session_timeout
        • 查找配置
        • 修改参数
        • 重启配置
        • PG_CTL用法
    • 修改方法
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档