应用程序执行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.