首页 > 数据库 >postgresql满语句查询及灭杀

postgresql满语句查询及灭杀

时间:2023-08-07 11:02:47浏览次数:35  
标签:语句 postgresql 灭杀 psa pid pg sql query

1.查询慢语句

查询当前库超过指定运行时长的语句

-- 获取正在执行的sql进程
select 
	c.relname 对象名称,
	l.locktype 可锁对象的类型,
	l.pid 进程id,
	l.mode 持有的锁模式,
	l.granted 是否已经对锁进行授权,
	l.fastpath,
	psa.datname 数据库名称,
	psa.wait_event 等待事件,
	psa.state 查询状态,
	backend_xmin 是否执事务快照,
	now( ) - query_start 持续时间,
	psa.query 执行语句
from
	pg_locks l
	inner join pg_stat_activity psa on ( psa.pid = l.pid )
	left outer join pg_class c on ( l.relation = c.oid )
where relkind ='r'
	and now( ) - query_start >= '00:01:00' --sql执行持续时间
order by
	query_start asc;

如图:

postgresql满语句查询及灭杀_sql

2.生成慢语句终止执行的sql

-----------------生成运行时间超过指定时长的sql进程灭杀语句-----------------
select 'select pg_terminate_backend(' || 进程id ||');' as "终止sql执行的语句" from (
	select distinct 进程id from (
		select 
			c.relname 对象名称,
			l.locktype 可锁对象的类型,
			l.pid 进程id,
			l.mode 持有的锁模式,
			l.granted 是否已经对锁进行授权,
			l.fastpath,
			psa.datname 数据库名称,
			psa.wait_event 等待事件,
			psa.state 查询状态,
			backend_xmin 是否执事务快照,
			psa.query 执行语句,
			now() - query_start 持续时间
		from
			pg_locks l
			inner join pg_stat_activity psa on ( psa.pid = l.pid )
			left outer join pg_class c on ( l.relation = c.oid )
			-- where l.relation = 'tb_base_apparatus'::regclass
		where    relkind ='r'
			order by query_start asc
	) aa where 持续时间 > '00:01:00'
) temp;

如图:

postgresql满语句查询及灭杀_sql_02

3.执行终止sql

将第2步生成出来的sql,复制并运行即可,如图:

postgresql满语句查询及灭杀_postgresql_03

标签:语句,postgresql,灭杀,psa,pid,pg,sql,query
From: https://blog.51cto.com/abcd/6991546

相关文章

  • PostgreSQL-unlogged table
    PostgreSQL中,有一种表的类型为unloggedtable,该种类型的表不会写入wal日志中,所以在写入的速度上比普通的堆表快很多,但是该表在数据库崩溃的时候,会被truncate,数据会丢失,而且该表也不支持流复制,所以在standby节点是无法查到该表数据的。在该表上创建的索引也是unlogged索引。创建un......
  • 无涯教程-Perl - last 语句函数
    当在循环内遇到last语句时,循环立即终止,程序控制在循环后的下一条语句处恢复。您可以为LABEL提供最后一个语句,其中LABEL是循环的标签。last语句可以在嵌套循环内使用,如果未指定LABEL,则该语句将适用于最近的循环。last-语法last[LABEL];last-流程图last-示例#!/us......
  • 无涯教程-Perl - redo语句函数
    redo命令重新启动循环块,而无需再次判断条件。您可以提供带有redo语句的LABEL,其中LABEL是循环的标签。redo语句可以在嵌套循环中使用,如果未指定LABEL,则该语句将适用于最近的循环。redo-语法redo[LABEL]redo-流程图redo-示例以下程序显示了redo语句的用法-#/......
  • 无涯教程-Perl - do...while 语句函数
    与for和while循环不同,它在循环的顶部测试循环条件,而do...while循环在以下位置检查其条件:循环的底部。do...while循环与while循环相似,除了保证do...while循环至少执行一次。do...while-语法do{statement(s);}while(condition);应当注意,条件表达式出......
  • 无涯教程-Perl - foreach 语句函数
    foreach循环遍历列表值,并将控制变量(var)依次设置为列表的每个元素-foreach-语法Perl编程语言中的foreach循环的语法是-foreachvar(list){...}foreach-流程图foreach-示例#!/usr/local/bin/perl@list=(2,20,30,40,50);#foreachloopexecutionf......
  • 无涯教程-Perl - for 语句函数
    for循环是一种重复控制结构,可让您有效地编写需要执行特定次数的循环。for-语法for(init;condition;increment){statement(s);}for-流程图for-例#!/usr/local/bin/perl#forloopexecutionfor($a=10;$a<20;$a=$a+1){print"valueofa:......
  • 无涯教程-Perl - until 语句函数
    只要给定条件为假,Perl编程语言中的until循环语句就会重复执行目标语句。until-语法until(condition){statement(s);}until-流程图直到until循环的关键点是该循环可能永远不会运行。当条件被测试并且输出为true时,将跳过循环主体,并执行直到循环之后的第一条语句......
  • 无涯教程-Perl - unless...elsif..else 语句函数
    除非unless语句后可以跟可选的elsif...else语句,这对于使用单个unless...elsif语句测试各种条件非常有用。unless...elsif..else-语法Perl编程语言中的unless...elsif...else语句的语法是-unless(boolean_expression1){#Executeswhenthebooleanexpression......
  • mybatis-plus中的@Select注解里面写sql语句的in
    @Select("<script>"+"select\n"+"email\n"+"fromsys_user\n"+"whereidin\n"+"<foreachitem='item'index='index'collection='ids'open='(&......
  • mybatis-plus中的@Select注解里面写sql语句的in
    @Select("<script>"+    "select\n"+    "email\n"+    "fromsys_user\n"+    "whereidin\n"+    "  <foreachitem='item'index='index'colle......