下面是我排错的一个过程:
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(2000) */
使用方法:
select /*+ MAX_EXECUTION_TIME(2000) */ * from T_PFTelRecordPushRecord
如果联查的话也可以,只需在查询结果前面加上这句话就可以了
我的最终成果图(保证语句的最大执行时间和ado.net的最大执行时间):
当然这样会对数据库造成压力,还是少用为妙