尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

定时取消耗时长的sql或事务的shell脚本

定时取消耗时长的sql或事务的shell脚本 文章目录环境文档用途详细信息环境系统平台银河麒麟 海光版本4.5.10文档用途编写取消耗时长的sql或事务的shell脚本。详细信息数据库中长时间未结束的sql或事务、长时间未释放的连接等对数据库的潜在隐患很大出现这些情况往往也是不正常的statement_timeout参数管理的是所有会话超过这个时间的所有会话都会被结束因此如果配置此参数有可能会结束一些不该结束的会话。我们可以使用SQL通过pg_stat_activity中的query字段有效的筛选可以被结束的会话通过定时任务解决以上问题。定时任务shell脚本如下#!/bin/sh HG_BASE/opt/HighGo6.0.4-cluster HGDB_HOME/opt/HighGo6.0.4-cluster PGUSERsysdba PGPORT5866 PGDATABASEhighgo PATH$HGDB_HOME/bin:$PATH #修改以上参数配置环境变量 export LANGen_US.UTF-8 export LC_ALLen_US.UTF-8 export HG_BASE$HG_BASE export HGDB_HOME$HGDB_HOME export PGUSER$PGUSER export PGPORT$PGPORT export PGDATABASE$PGDATABASE export PATH$PATH #从pgpass中读取用户密码通过“localhost”、$PGPORT、$PGUSER 关键字筛选出密码 pgpasswdcat ~/.pgpass|grep localhost|grep $PGPORT|grep $PGUSER|awk -F : {print $5}|tail -n 1 if [ -n $pgpasswd ]; then export PGPASSWORD$pgpasswd #取消管理工具连接的并且是idle状态的 psql -Atc select pg_terminate_backend(pid) from pg_stat_activity where state idle and application_name like %DBeaver %; #取消idle状态大于1小时的 psql -Atc select pg_terminate_backend(pid) from pg_stat_activity where state idle and query_start (now() - interval 60 min); #取消是proxy连接的查询或BEGIN开启的事务并且不是update和insert并且执行超过30分钟的会话 psql -Atc select pg_terminate_backend(pid) from pg_stat_activity where query_start (now() - interval 30 min) and application_name like hgproxy: app% and (query ilike select% or query ilike BEGIN% ) and query not ilike update% and query not ilike insert%; fi将以上内容使用定时任务执行可解决以上问题。
返回列表