pgsql 限制数据的超时时间,以及在vertx代码中如何限制

一、数据库级别限制sql的执行时间
1.参数:statement_timeout
2.介绍:statement_timeout是pgsql的一个参数,用于设置单个SQL语句的执行超时时间。当一个查询执行的时间超过了设定的超时时间,PostgreSQL将终止该查询并返回错误: 由于语句执行超时,正在取消查询命令。
3.做法:
(一)、临时生效
命令:SET statement_timeout = ‘1000’(这种写法是毫秒级,此处是1秒)
或者 SET statement_timeout = ‘1min’(分钟写法)
或者 alter system set statement_timeout = 1000;
给某个角色分配 ALTER ROLE rolename SET statement_timeout = ‘240000’;
注意此参数只在当前会话生效,如果使用navicat不同的查询窗口是不一样的。

(二)、永久生效
如果要永久生效,必须在文件中配置
在postgresql.conf文件,修改statement_timeout参数,然后将其设置为所需的值(以毫秒为单位)。
示例:

statement_timeout = 1000

4.作用
(一)、防止长时间执行,导致数据库性能受到影响
(二)、防止长时间的sql占用大量的资源,可能被用于攻击,导致数据库系统出现卡死崩溃的现象。

5.在分模块中如果要设置不同的statement_timeout ,可在每个模块启动时执行sql,这样就可以给长时间的模块分配更多的查询时间

6.vertx中的做法
定义queryTimeout,设置定时器,当超过所设的时间,就断开连接,此做法,每个sql都可以拥有自己的超时时间。此处只贴核心部分

 long timerId = vertx.setTimer(queryTimeout, id -> pgConnection.cancelRequest(ar -> {
        if (ar.succeeded()) { 。。。。}
        else{
        。。。。。
        }
         }));
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值