标签

PostgreSQL , SQL超时


背景

设置单条SQL的执行超时,防雪崩。

通常来说可以在SQL发起前设置事务级超时参数,SQL执行结束,重置。(如果SQL异常退出,会自动重置事务级参数)

例子

begin;
......
set local statement_time='100ms';
select count(*) from a;   -- 这条SQL的执行时间超过100MS则主动退出,并回滚整个事务
set local statement_timeout to default;
......
end;

函数级超时例子 - statement_timeout不可用

例如这个QUERY,我们想让它100毫秒超时。

select count(*) as cnt, id from a where id<$1 group by id;

将它写到函数中,在函数中设置超时

create or replace function f1(int) returns setof record as $$
declare
begin  set local statement_timeout='100ms';  return query select count(*) as cnt, id from a where id<$1 group by id;
end;
$$ language plpgsql strict ;

调用SQL改成这样

select cnt,id from f1(1) as t(cnt int8, id int);

但是这么做实际上是没有效果的,原因是statement_timeout的设计之初是为交互性SQL设计的,在postgres.c中。

所以需要plpgsql超时,需要通过插件HOOK来实现。

https://www.postgresql.org/message-id/flat/200702201200.53535.xzilla%40users.sourceforge.net#200702201200.53535.xzilla@users.sourceforge.net

statement_timeout is measured across an entire interactive command, not  individual commands within a function; and the timeout that applies to  an interactive command is determined at its beginning.  So the above  doesn't do what you think.

参数级别

1、实例级

修改  postgresql.conf

2、库级

alter database dbname set parameter=?;

3、用户级

alter role rolname set parameter=?;

4、会话级

set parameter=?;

5、事务级

begin;
set local parameter=?;
....
end;

6、函数级

alter function fun_name() set parameter=?;

其他超时控制

1、空闲事务超时

idle_in_transaction_session_timeout = 2h

2、锁等待超时

lock_timeout = 1s

3、死锁检测超时间隔

deadlock_timeout = 1s

https://www.postgresql.org/docs/9.4/static/runtime-config-client.html

PostgreSQL 设置单条SQL的执行超时 - 防雪崩相关推荐

  1. postgresql 连接超时_解决PostgreSQL 执行超时的情况

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

  2. Dynamics 365执行操作报SQL Server已超时,更改这个超时设置的方法

    本人微信公众号:微软动态CRM专家罗勇 ,回复291或者20190110可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 当执 ...

  3. PostgreSQL查询当前执行中SQL的执行计划——pg_show_plans

    点击上方"蓝字" 关注我们,享更多干货! 执行计划存储 如果同样的SQL要执行很多遍,且每次都是同样的执行计划.每次都发生硬解析,则会消耗大量时间.类似于Oracle存放执行计划的 ...

  4. MyBatis 源码分析 - SQL 的执行过程

    本文速览 本篇文章较为详细的介绍了 MyBatis 执行 SQL 的过程.该过程本身比较复杂,牵涉到的技术点比较多.包括但不限于 Mapper 接口代理类的生成.接口方法的解析.SQL 语句的解析.运 ...

  5. 【转】2.1【MySQL】运行原理(一):查询sql的执行过程及MySQL架构分析

    MySQL的发展历史和版本分支: 时间 里程碑 1996 年 MySQL1.0 发布.它的历史可以追溯到 1979 年,作者 Monty 用 BASIC 设计的一个报表工具. 1996 年 10 月 ...

  6. statement执行insert into语句_【图文并茂】源码解析MyBatis ShardingJdbc SQL语句执行流程详解...

    源码分析Mybatis系列目录: 1.源码分析Mybatis MapperProxy初始化[图文并茂] 2.源码分析Mybatis MappedStatement的创建流程 3.[图文并茂]Mybat ...

  7. 史上最全:PostgreSQL DBA常用SQL查询语句(建议收藏学习)

    编者的话:PostgreSQL连续两年被评为年度数据库,备受很多DBA的青睐,本文我们一起来了解学习PostgreSQL常用的查询语句有哪些? 查看帮助命令 DB=# help --总的帮助 DB=# ...

  8. EF Core 5.0原生sql语句执行

    微软官网文档: https://docs.microsoft.com/zh-cn/ef/core/querying/raw-sql 原生sql执行 public async Task<(int, ...

  9. 数据库索引--SQL语句执行效率、分析及优化

    数据库表中字段上创建的索引,在写SQL语句进行查询时,索引可能会被使用到,也肯能因为SQL语句导致索引在此条SQL语句执行时索引无效. 聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的解释是:索 ...

最新文章

  1. 聊一聊Spring中的线程安全性
  2. linux+python+djiango+mysql编译安装学习笔记
  3. php xingnengfenxi_PHP 性能分析与实验:性能的微观分析
  4. 为Ubuntu设置新的软件源
  5. 中高级工程师Java开发!java生成随机数代码包
  6. tf.while_loop
  7. 理论基础 —— 查找 —— 顺序查找
  8. Java 面向对象:多态的理解
  9. nexbox本地网络调试工具下载_「下载」 Windows 10 WinDBG 分析转储日志和蓝屏日志排查错误原因...
  10. 【白皮书分享】2020双十一五大趋势洞察白皮书.pdf(附下载链接)
  11. java获取数组穷举_递归算法求解遍历(或穷举)问题
  12. 清除图片下默认的小间隙_PowerMILL软件应用策略(一):模型区域清除策略
  13. 学习笔记:模式学习-生成器模式
  14. ImportError: Couldn‘t import Django. Are you sure it‘s installed and available on your PYTHONPATH en
  15. TFS2010中如何添加用户
  16. springboot2
  17. 程序员面试官何苦为难程序员!
  18. 微信小程序经纬度获取地图导航(导航接入第三方)
  19. 神经网络按结构可以分为,神经网络主要包括哪些
  20. 支持向量机与支持向量回归(support vector machine and support vector regression)

热门文章

  1. 7-3 输出最大公约数 (10 分)
  2. linux 阻止 复位命令,linux防误删操作(使用safe-rm;使用mv命令删除文件)
  3. java 中加法递归_java 简单的加法 递归 从A加到B
  4. c语言程序设计实验二模板,C语言程序设计实验二.doc
  5. 安装composer
  6. python技巧 计算字符串中字母出现的次数并取出最大
  7. [转]把人当成一个公司来经营,心就不会那么累
  8. JAVA异常使用_每个人都曾用过、但未必都用得好
  9. IE 7.0抛弃Win2000用户?(zz)
  10. Django 上传附件报The number of GET/POST parameters exceeded settings.DATA_UPLOAD_MAX_NUMBER_FIELDS错误