解决PostgreSQL执行超时的问题
最近在行使PostgreSQL的时辰,在执行一些数据库事宜的时辰,先后呈现了statement timetout 和idle-in-transaction timeout的题目,导致数据库操纵失败。 经研究查找,PostgreSQL有关于SQL语句执行超时和事宜执行超时的相干设置,而默认超时时刻是10000毫秒,即10秒钟的时刻,这样会导致执行时刻稍长的使命执行失败。可以通过修改PostgreSQL处事器设置文件的方法修改默认设置。 参数声名 statement_timeout 默认是0,暗示语句可以一向执行下去。 假如配置为10000,那就意味着语句最多可以执行 10000ms = 10s。 提议配置为0,禁用该参数。 1idle_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 默认是0,暗示语句可以一向执行下去。超时会报 FATAL: terminating connection due to idle-in-transaction timeout。 修改要领 查找设置 通过呼吁查找到postgresql设置文件的位置,用vi举办编辑。 1 2find / -name "postgresql.conf"vi /var/lib/pgsql/9.6/data/postgresql.conf 修改参数 进入vi编辑界面,可以通过vi查找呼吁定位到相干参数,修改成吻合的时刻,生涯退出。 :/statement_timeout 重启设置 通过以下呼吁,查找pg_ctl的位置,然后执行 pg_ctl reload从头加载设置。 1 2find / -name "pg_ctl"/usr/pgsql-9.6/bin/pg_ctl reload PG_CTL用法 启动处事器 启动处事器: 1$ pg_ctl start 启动处事器的一个例子,等随处事器启动了才退出: 1$ pg_ctl -w start 处事器行使 5433 端口,并且不带 fsync 运行,行使: 1$ pg_ctl -o "-F -p 5433" start 遏制处事器 1$ pg_ctl stop 行使 -m 选项遏制处事器应承用户节制怎样封锁后端。 重启处事器 这个呼吁险些便是先遏制处事器然后再启动它,只不外 pg_ctl 生涯并从头行使上一次运行处事器的呼吁行参数。重启处事器的最简朴的要领是: 1$ pg_ctl restart 重启处事器,守候其遏制和重启: 1$ pg_ctl -w restart 行使 5433 端口重启而且重启后封锁 fsync : 1$ pg_ctl -o "-F -p 5433" restart 表现处事器状态 下面是来自 pg_ctl 的状态输出的例子: $ pg_ctl statuspg_ctl: server is running (pid: 13718) 这就是在 restart 模式中被挪用的呼吁行。 增补:PostgreSQL 配置单条SQL的执行超时 - 防雪崩 配景 配置单条SQL的执行超时,防雪崩。 凡是来说可以在SQL提倡前配置事宜级超时参数,SQL执行竣事,重置。(假如SQL非常退出,会自动重置事宜级参数) (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |