开发者社区> 问答> 正文

PostgreSQL如何监控系统中是否有长事务?

已解决

如题

展开
收起
明虚 2015-12-18 00:45:12 6845 0
1 条回答
写回答
取消 提交回答
  • 公益是一辈子的事, I am digoal, just do it. 阿里云数据库团队, 擅长PolarDB, PostgreSQL, DuckDB, ADB等, 长期致力于推动开源数据库技术、生态在中国的发展与开源产业人才培养. 曾荣获阿里巴巴麒麟布道师称号、2018届OSCAR开源尖峰人物.
    采纳回答

    例子:
    长事务 30 min

    select datname,usename,query,xact_start,now()-xact_start xact_duration,query_start,now()-query_start query_duration,state from pg_stat_activity where state<>
    $$
    idle
    $$
     and (backend_xid is not null or backend_xmin is not null) and now()-xact_start > interval 
    $$
    30 min
    $$
     order by xact_start;

    2PC长事务 30 min

    select name,statement,prepare_time,now()-prepare_time,parameter_types,from_sql from pg_prepared_statements where now()-prepare_time > interval 
    $$
    30 min
    $$
     order by prepare_time;

    可以写成脚本
    https://github.com/digoal/pgsql_admin_script/blob/master/generate_report.sh

    echo "----->>>---->>>  长事务, 2PC: "
    psql -h $PGHOST -p $PGPORT -U $PGUSER -d $PGDATABASE --pset=pager=off -q -x -c 'select datname,usename,query,xact_start,now()-xact_start xact_duration,query_start,now()-query_start query_duration,state from pg_stat_activity where state<>
    $$
    idle
    $$
     and (backend_xid is not null or backend_xmin is not null) and now()-xact_start > interval 
    $$
    30 min
    $$
     order by xact_start'
    psql -h $PGHOST -p $PGPORT -U $PGUSER -d $PGDATABASE --pset=pager=off -q -x -c 'select name,statement,prepare_time,now()-prepare_time,parameter_types,from_sql from pg_prepared_statements where now()-prepare_time > interval 
    $$
    30 min
    $$
     order by prepare_time'
    echo "建议: "
    echo "    长事务过程中产生的垃圾, 无法回收, 建议不要在数据库中运行LONG SQL, 或者错开DML高峰时间去运行LONG SQL. 2PC事务一定要记得尽快结束掉, 否则可能会导致数据库膨胀. "
    echo "    参考: http://blog.163.com/digoal@126/blog/static/1638770402015329115636287/ "
    echo -e "\n"
    2019-07-16 11:49:50
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
2023云栖大会:和客户一起玩转PolarDB新特性 立即下载
2023云栖大会:PolarDB for AI 立即下载
2023云栖大会:AnalyticDB PostgreSQL 立即下载