应用程序执行DAL层的SQL或存储过程时,常常会出现超时的Exception:

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

发生超时就是SQLServer在指定的超时时间内没有返回,这个超时时间在应用端可以设置:

mySqlCommand.CommandTimeout=180;//设置为180秒;设置为0则永远不超时。

当然,应用端加长超时时间是迫不得已的办法,治标不治本,根本的还是要解决数据库为何响应慢。

如果是执行某个存储过程慢,可以检查和优化该存储过程,过长的SQL语句,过烂的算法,不适当的索引,过多的排序,都可能导致数据库消耗大量内存或I/O,压力过大,从而等待系统资源,响应缓慢。可以分析ExceutionPLan进行优化。

如果是大数据量的情况,可以使用临时表改进性能。关于表变量和临时表的比较,参考《 表变量与临时表的优缺点

问题 :Oracle 数据库 sql 查询的优化(成交额统计表的 sql 查询时间过长进行的优化) 解决办法:对 sql 语句中使用视图的部分替换为子查询,对查询表条件字段建立索引 引发的 问题 :在什么情况下建立索引,及建立索引后引发的开销有哪些 经查询oracle的索引机制,摘录如下: 索引可以提高数据查询的效率,并不仅仅在于 数据库 会自动按照顺序进行搜寻。另一个重要的方面是索引的按块维护策略。一本字典的 转载:http://blog.csdn.net/pgbiao/article/details/22388945 已经遇到好几次这个 问题 了,终于找到答案,使用 存储过程 预编译。exec sp_recompile @objname=' 存储过程 名称';; 这样我程序中 执行 超时 存储过程 ,1秒钟就可以 执行 出来了。 百度下什么是 存储过程 预编译。 ------------------------------------------------------------------------------------ 如果 SQL 数据库 越来越多,有时候会遇到读取 超时 ,死锁等一大堆 问题 ,按经验来说,数据结构设计不合理,经常使用视图等原因都有,那些怎么解决呢?   1、由于 数据库 设计 问题 造成 SQL 数据库 新增数据时 超时 Microsoft OLE DB Provider for SQL Server 错误 '80040e31' [ODBC SQL Server 做了一个update一次性手动批 修改的 sql ,在 执行 的时候很长时间没有反应,还以为自己的 sql 写的有 问题 ,死循环了... 原来发现是trigger的 问题 ,影响了修改的速率。 可以在 执行 update之前关闭该表的trigger, 执行 完毕之后再启用trigger 最近,线上的 ETL 数据归档 SQL 发生了点 问题 ,有一个 UPDATE SQL 跑了两天还没跑出来: update t_order_record set archive_id = '420a7fe7-4767-45e8-a5f5-72280c192faa', update_time = update_time where order_id in (select order_id from t_retailer_order_record force index (idx_archive_id) wh.