sql 2000升级到sql 2005后.asp.net 存储总是间歇性出错解决方法

sql 2000升级到sql 2005后.asp.net 存储总是间歇性出错
堆栈信息: at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Qiying.WebModules.Data.DbObject.RunProcedure(String storedProcName, IDataParameter[] parameters, Int32& rowsAffected) at Qiying.WebModules.Accounts.Data.Meng.SetSql(String strSQL) at Qiying.WebModules.Accounts.Business.ping.SetSql(String strSQL) at Qiying.Job.Web.job.AjaxGetInfo.SetquickApply(String jobIDstr, String qiuzhixin, Boolean kuaisu, Int32 jianliid, Boolean okok, Int32 oki) at Qiying.Job.Web.job.AjaxGetInfo.GetquickApply2() at Qiying.Job.Web.job.AjaxGetInfo.Page_Load(Object sender, EventArgs e) at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

sql 2000升级到sql 2005后.asp.net程序存储总是间歇性出错。
服务器一直有人访问,也一直有人存储数据,前天11月2日升级后,基本保存数据就会有50%的出错几率。
连接代码如下所示。
server=SVCTAG-J7X;database=data;user id=sa;password=12345;sql 2000升级到sql 2005后.asp.net 存储总是间歇性出错解决方法


如果加大了connect timeout = 60; 能好一些,但是还是会经常出现。

服务器不是因为访问人太多造成了,今天早上cup都没有高过30%. 


------解决方案--------------------
超时分2种: 连接超时,执行超时.
可能是执行超时,查看一下系统是否有进程阻塞,索引丢失(特别是大表上的索引).
------解决方案--------------------
升级后需要做两件事:
1、更新全部统计信息。
2、做一次完整备份和日志备份
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

其实从上面的性能计数器图中能看出,磁盘等待队列非常长,cpu看着还行,有一段cpu占用率非常高,页读取率看着也没什么异常。

主要的问题还是在于磁盘,但你从2000升级到2005,之前2000是没有这样的问题,现在有这样的问题。

我觉得应该是个别经常运行的语句的执行计划改变导致,采用了不当的执行计划,导致启用了大量的表扫描,使得磁盘等待队列都超过了100,这个跟我原来的公司的一台服务器很相似,那台服务器也是等待队列非常长,但那个基本上是由于执行计划有问题导致的。
顶一个分析的很详细sql 2000升级到sql 2005后.asp.net 存储总是间歇性出错解决方法


sql 2000升级到sql 2005后.asp.net 存储总是间歇性出错解决方法


问题还在出现,我今天再给服务器加硬件加硬盘和加内存,
今天没空测试了,明天给你测试报告看看到底怎么回事。


呵呵,好

能不能查到具体是那个语句造成了死锁啊,因为我的
sp_Pagination_count1 是这样的

ALTER PROCEDURE [dbo].[sp_Pagination_count1](
 @strFrom varchar(1000) ,
 @strWhere varchar(3000) 
) as
DECLARE @sql varchar(8000) 
set @sql=' Select count(*) From '+@strFrom+' where '+@strWhere
EXEC
(@sql)

是分页前的一个查询。


从你这个情况看,应该是写和读的阻塞,建议你这么设置吧,这样可以减少读和写的阻塞,

但最好把tempdb数据库设置大点比如10G,因为开启这个设置后,会用tempdb的空间:

alter database 数据库名称
set read_committed_snapshot on


ALTER PROCEDURE [dbo].[sp_Pagination_count1](
 @strFrom varchar(1000) ,
 @strWhere varchar(3000) 
) as
DECLARE @sql varchar(8000) 
set @sql=' Select count(*) From '+@strFrom+' with(updlock) where '+@strWhere
EXEC
(@sql)

我这个后面加上with(updlock)会不会好一些啊


改成with(nolock) 可以吗