mysql语句最大执行时间问题解决,无需改mysql配置

下面是我排错的一个过程:

1、我是ado.net执行一个查询语句报了个错:

Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.

译:超时已过期。操作完成前经过的超时时间,或者服务器没有响应。

那当时以为就是超时了所以加了个超时时间设置5分钟(CommandTimeout):

using (MySqlCommand cmd = new MySqlCommand(sql, con))
            {
                cmd.CommandTimeout = 60*5; //5分钟
                MySqlDataAdapter data = new MySqlDataAdapter(cmd);
                data.Fill(dt_pushQueue);
            }

2、但是接着报了下一个错:

Query execution was interrupted, maximum statement execution time exceeded

译:查询执行被中断,超过了语句执行的最长时间。

还是超时,但是是数据库的设置命令语句的最大执行时间。

可以通过:SELECT @@global.max_execution_time

 是120秒,那其实可以通过:SET global max_execution_time = 300000;

设置最大执行时间,但是这是修改数据库配置。

3、但是我只是想让我那个语句可以最大超时执行

最终解决方案

/*+ MAX_EXECUTION_TIME(300000) */

使用方法:

select /*+ MAX_EXECUTION_TIME(300000) */  * from T_PFTelRecordPushRecord

如果联查的话也可以,只需在查询结果前面加上这句话就可以了

单位是毫秒

我的最终成果图(保证语句的最大执行时间和ado.net的最大执行时间):

当然这样会对数据库造成压力,还是少用为妙 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值