• PostgreSQL执行超时的问题


    PostgreSQL执行超时的问题

    使用背景

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

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

    参数说明

    statement_timeout

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

    $ 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。

    $ 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进行编辑。

    find / -name "postgresql.conf"
    vi /var/lib/pgsql/9.6/data/postgresql.conf

    修改参数

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

    :/statement_timeout

    重启配置

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

    find / -name "pg_ctl"

    /usr/pgsql-9.6/bin/pg_ctl reload

    PG_CTL用法

    启动服务器

    启动服务器:

    $ pg_ctl start

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

    $ pg_ctl -w start

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

    $ pg_ctl -o "-F -p 5433" start

    停止服务器

    $ pg_ctl stop

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

    重启服务器

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

    $ pg_ctl restart

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

    $ pg_ctl -w restart

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

    $ pg_ctl -o "-F -p 5433" restart

    显示服务器状态

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

    $ 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/ 
    版权所有,欢迎转载,转载请注明原文作者及出处。

  • 相关阅读:
    RR调度(Round-robin scheduling)简单介绍
    iOS 应用内跳转到系统设置
    Python setup.py和MANIFEST.in文件
    HDU 1017 A Mathematical Curiosity (枚举水题)
    安卓获取软硬件信息并上传给server(Socket实现)
    杭电1869六度分离
    【原创】SM4password算法源代码接口具体解释
    MySQL经常使用命令--create命令使用
    移植opencv2.4.9到itop4412开发板
    Esper epl语句实验
  • 原文地址:https://www.cnblogs.com/xifengxiaoma/p/9436112.html
Copyright © 2020-2023  润新知