首页 > 数据库 > mysql教程 > 数据频繁update,导致sqlserver数据库整体锁死,客户端都无法访

数据频繁update,导致sqlserver数据库整体锁死,客户端都无法访

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2016-06-07 15:34:18
原创
1177 人浏览过

介绍:文件上传功能,使用wcf提供 服务 , 数据 库使用EntityFramework4 访问 。 问题现象:在wcf有一个文件块上传方法 /// summary /// 上传文件 /// /summary /// param name="block" 文件块信息 /param /// returns 上传文件的信息状态 /returns public o

介绍:文件上传功能,使用wcf提供服务数据库使用EntityFramework4访问

问题现象:在wcf有一个文件块上传方法

<p><span>///</span><span><summary></summary></span><span><br>        </span><span>///</span><span> 上传文件<br>        </span><span>///</span><span></span><span><br>        </span><span>///</span><span><param name="block"></span><span>文件块信息</span><span></span><span><br>        </span><span>///</span><span><returns></returns></span><span>上传文件的信息状态</span><span></span><span><br></span><span>public</span><span>override</span><span> FileTransportAck UpLoadFile(FileBlock block)<br>        {<br>            </span><span>lock</span><span> (lockobj)<br>            {<br>                </span><span>//</span><span>查找文件是否存在</span><span><br></span><span>                tab_FileInfo theFileInfo </span><span>=</span><span> m_NetBidEnt.tab_FileInfo<br>                    .Where(o </span><span>=></span><span> o.FileID.Equals(block.FileID))<br>                    .FirstOrDefault();<br><br>                </span><span>if</span><span> (theFileInfo </span><span>==</span><span>null</span><span>)<br>                    </span><span>throw</span><span>new</span><span> Exception(</span><span>"</span><span>文件未初始化,上传失败</span><span>"</span><span>);<br><br>                </span><span>//</span><span>返回传输结果</span><span><br></span><span>                FileTransportAck result </span><span>=</span><span>new</span><span> FileTransportAck();<br>                </span><span>//</span><span>写入文件块</span><span><br></span><span>if</span><span> (FileSysIO.WriteBlock(theFileInfo, block))<br>                {<br>                    theFileInfo.UploadedSize </span><span>+=</span><span> block.Size;<br>                    theFileInfo.FileSize </span><span>=</span><span> block.Total;<br>                    theFileInfo.UpdateDate </span><span>=</span><span> DateTime.Now;<br>                    m_NetBidEnt.SaveChanges();<br>                }<br>                </span><span>else</span><span><br>                    </span><span>throw</span><span>new</span><span> Exception(</span><span>"</span><span>写入文件块失败</span><span>"</span><span>);<br>                </span><span>//</span><span>写入返回值</span><span><br></span><span>                result.FileId </span><span>=</span><span> theFileInfo.FileID;<br>                result.Offset </span><span>=</span><span> (</span><span>long</span><span>)theFileInfo.UploadedSize;<br>                </span><span>if</span><span> (theFileInfo.UploadedSize </span><span>>=</span><span> block.Total)<br>                    result.TransportStat </span><span>=</span><span> FileTransportStat.Finished;<br>                </span><span>else</span><span><br>                    result.TransportStat </span><span>=</span><span> FileTransportStat.ResumeBreakPoint;<br>                </span><span>return</span><span> result;<br>            }<br>        }</span></p>
登录后复制

此方法会在上传文件时循环调用,基本是每10K传一次,即会调用此访问一次,但很奇怪的问题是如果文件在10M以上时,传输过程中会出现停止。。此时查看数据服务整体就像是锁死了一样,使用ssms也无法连接,报出的异常都是连接超时。

后来在wcf的方法内增加了日志用于记录异常,记录的异常如下:

<p><span><strong>Exception Message</strong><br>2011</span><span>-</span><span>07</span><span>-</span><span>28</span><span>00</span><span>:</span><span>38</span><span>:</span><span>26</span><span>,</span><span>451</span><span> An error occurred </span><span>while</span><span> starting a transaction on the provider connection. See the inner exception </span><span>for</span><span> details.<br></span><strong>StackTrace</strong><br><span>2011</span><span>-</span><span>07</span><span>-</span><span>28</span><span>00</span><span>:</span><span>38</span><span>:</span><span>26</span><span>,</span><span>467</span><span>    at System.Data.EntityClient.EntityConnection.BeginDbTransaction(IsolationLevel isolationLevel)<br>   at System.Data.EntityClient.EntityConnection.BeginTransaction()<br>   at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)<br>   at System.Data.Objects.ObjectContext.SaveChanges()<br>   at NetBid.FileServices.Impl.FileSysFileService.UpLoadFile(FileBlock block)<br>   at NetBid.FileServices.Wcf.FileServiceWCF.UploadFileBlock(FileBlock block, Dictionary`</span><span>2</span><span> parameters)<br><strong>Inner Exception:</strong><br></span><span>2011</span><span>-</span><span>07</span><span>-</span><span>28</span><span>00</span><span>:</span><span>38</span><span>:</span><span>26</span><span>,</span><span>467</span><span> Inner Exception:System.Data.SqlClient.SqlException (</span><span>0x80131904</span><span>): Timeout expired.  The timeout period elapsed prior to completion of the operation or the server </span><span>is</span><span> not responding.<br>   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)<br>   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()<br>   at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)<br>   at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)<br>   at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()<br>   at System.Data.SqlClient.TdsParserStateObject.ReadBuffer()<br>   at System.Data.SqlClient.TdsParserStateObject.ReadByte()<br>   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)<br>   at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest)<br>   at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest, String transactionName, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest)<br>   at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest transactionRequest, String name, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest)<br>   at System.Data.SqlClient.SqlInternalConnection.BeginSqlTransaction(IsolationLevel iso, String transactionName)<br>   at System.Data.SqlClient.SqlInternalConnection.BeginTransaction(IsolationLevel iso)<br>   at System.Data.SqlClient.SqlConnection.BeginDbTransaction(IsolationLevel isolationLevel)<br>   at System.Data.Common.DbConnection.BeginTransaction(IsolationLevel isolationLevel)<br>   at System.Data.EntityClient.EntityConnection.BeginDbTransaction(IsolationLevel isolationLevel)<br></span><span>2011</span><span>-</span><span>07</span><span>-</span><span>28</span><span>00</span><span>:</span><span>38</span><span>:</span><span>26</span><span>,</span><span>467</span><span>=======================================================</span><span>分割线</span></p>
登录后复制

异常看上去像是事务问题,但有一个奇怪的现象是:上传过程中一旦出现停止现象后,整个数据库都无法访问,只能将数据库的服务停止并重新启动。

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
数据库数据
来自于 1970-01-01 08:00:00
0
0
0
php数据获取?
来自于 1970-01-01 08:00:00
0
0
0
数据表里没数据显示
来自于 1970-01-01 08:00:00
0
0
0
数据表
来自于 1970-01-01 08:00:00
0
0
0
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板