2016-05-12 55 views
0

我們的生產環境中使用的NHibernate v3.1.0.4000 突然開始給與全文檢索搜索時,此錯誤:NHibernate的 - 「GenericADOException:無法執行查詢」

[SQLEXCEPTION(0x80131904) :超時過期。在操作完成之前已經超時或服務器沒有響應。] System.Data.SqlClient.SqlConnection.OnError(SqlException異常,Boolean breakConnection)+404 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()+ 412 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand的cmdHandler,SqlDataReader的數據流,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)1363 System.Data.SqlClient.SqlDataReader.ConsumeMetaData()59 System.Data.SqlClient的。 SqlDataReader.get_MetaData()+118 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString)+6388257 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBeh System.Data.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String方法,DbAsyncResult結果)+538 System.Data.SqlClient.SqlCommand。 RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布爾returnStream,String方法)+28 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior行爲,字符串方法)+256 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior行爲)+ 19 System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()+23 NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd)+845 NHibernate.Loader.Loader.GetResultSet(IDbCommand st,Boolean autoDiscoverTypes,布爾可調用,RowSelection選擇,ISessionImplementor會話)580 NHibernate.Loader.Loader.DoQuery(ISessionImplementor會話,QueryParameters queryParameters,布爾returnProxies)275個 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor會話,QueryParameters queryParameters,布爾returnProxies )205 NHibernate.Loader.Loader.DoList(ISessionImplementor會話,queryParameters queryParameters)195

[GenericADOException:無法執行查詢 [SELECT COUNT(DISTINCT this_.IdDocument)作爲y0_ FROM Document.Document THIS_內連接Document.DocumentCopy documentc1_ on this_.IdDocument = documentc1_.IdDocument WHERE((@ p0 = @ p1幷包含(this_.Title,@ p2))和this_.IsDe (document)(@ p4 = @ p5和documentc1_.CreationDate> = @ p6)和documentc1_.CreationDate < = @ p7)和(documentc1_.IdOwnedByGroup = @ p8或documentc1_.IdCreatedByGroup = @ p9))] 位置參數:#0> 0#1> 0#2>「#3>假#4> 0#5> 0#6> 12/5/2015 12:00:00ÿÿ#7> 12/5/20 11:59:00ýÿýÿ#8> 1#9> 1 [SQL:SELECT count(distinct this_.IdDocument)as y0_ FROM Document.Document this_ inner join Document.DocumentCopy documentc1_ on this_.IdDocument = documentc1_.IdDocument WHERE((@ p0 = @ p1幷包含(this_.Title,@ p2))和this_.IsDeleted = @ p3)和(((@ p4 = @ p5和documentc1_.CreationDate> = @ p6)和documentc1_.CreationDate < = @ p7)和(documentc1_.IdOwnedByGroup = @ p8或documentc1_.IdCreatedByGroup = @ p9))]] NHibernate.Loader.Loader.DoList(ISessionImplementor session,QueryParameters queryParame TER值)637 NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor會話,QueryParameters queryParameters)23 NHibernate.Loader.Criteria.CriteriaLoader.List(ISessionImplementor會話)60 NHibernate.Impl.SessionImpl.List(CriteriaImpl標準,IList的結果)+1025 NHibernate.Impl.CriteriaImpl。列表(IList的結果)63 NHibernate.Impl.CriteriaImpl.UniqueResult()57 Domain.Repositories.DocumentRepository.Domain.Abstract.IDocumentRepository.GetAll(標準1 criteria, Int32& count, Dictionary 2 openFieldCriteria)272個 ServicesImplementation.DocumentService.GetDocuments(標準1 criteria, Int32& count, String metadataSearchTerm) +510 Docman.Models.List.ListModel.GetDocuments(Int32& count) +102 ASP._Page_Views_List_Index_cshtml.Execute() in d:\wwwroot\inetpub\docman\Views\List\Index.cshtml:27 System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +280 System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +104 System.Web.WebPages.StartPage.ExecutePageHierarchy() +143 System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +157 System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +384 System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +33 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func 1續)826372個 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(controllerContext controllerContext,IList`1過濾器,的ActionResult的ActionResult)265 System.Web.Mvc.ControllerActionInvoker.InvokeAction(controllerContext controllerContext,字符串actionName)827248 系統.Web.Mvc.Controller.ExecuteCore()+159 System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)+335 System.Web.M VC。 <> c__DisplayClassb.b__5()+62 System.Web.Mvc.Async。 <> c__DisplayClass1.b__0()+20 System.Web.Mvc。 <> c__DisplayClasse.b__d()54 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()469 System.Web.HttpApplication.ExecuteStep(IExecutionStep步驟,布爾& completedSynchronously)375

我已經嘗試了上面列出的SSMS上的查詢,它似乎運行良好和快速。

這裏提到了一個類似的錯誤:Nhibernate FieldNameLookup throws IndexOutOfRangeException,雖然我的錯誤信息中沒有包含任何IndexOutOfRangeException

有誰能告訴我這是什麼原因?

UPDATE:

更多信息:

我們正在使用的預測。

根據錯誤日誌,錯誤來自某個只返回一個計數的查詢,而不是很多包含許多字段的行。

正如我之前所說的,同樣的查詢(在錯誤日誌中列出)運行速度快,而且從SSMS運行時沒有問題。然而,執行此SQL查詢的應用程序所做的所有查詢似乎都會因上述錯誤而失敗。

由於我們使用NH的自定義包裝,因此代碼可能並不清晰。

我認爲我在異常順序上是錯誤的,首先發生超時,然後ADO.net報告另一個錯誤。 所以,我想這是一個超時畢竟...

更新2:

一些額外的研究之後,似乎這是關係到這個問題,並查詢確實超時,只是不從SSMS:

Query times out when executed from web, but super-fast when executed from SSMS

+0

的datails說是超時問題。 – Najera

+0

你要帶回多少數據?這樣做的代碼是什麼樣的?你在使用預測嗎? – Fran

+0

@Najera如果你看下面的第一個異常,有另一個異常,似乎是內部的例外。 – user2173353

回答

-1

這竟然是這不能因爲它是使用針對ARITHABORT不同的值(我的應用程序會話和SSMS會話之間)從SSMS轉載超時。

有一次,我爲它的默認值設置爲ON/1爲DB,一切都被固定:

USE [master]; 
GO 
ALTER DATABASE [{database_name}] SET ARITHABORT ON WITH NO_WAIT; 
GO 

在這裏看到:https://dba.stackexchange.com/a/95090/71232

+0

錯誤,非常錯誤。您剛剛從您使用過的查詢計劃緩存中逐出了一個錯誤的查詢計劃。麻煩會在一段時間後再次回來並再次咬你。你找到[這個答案](/ a/2248566/1178314)這個事實很有希望,但看起來你已經讀得太快了。您的實際問題很可能是索引問題,導致SQL Server有時會生成並放入一個錯誤的查詢計劃。 –

+0

@Frédéric然而,MS建議將此設置設爲ON(https://msdn.microsoft.com/en-us/library/ms190306.aspx)。所以,我認爲做我所做的事並不是一件壞事。此外,查詢中還包含全文搜索查詢,並且大部分全文索引在數據庫中都佔用了70%以上的碎片(這就是運行沒有DBA的系統時發生的情況......)。同樣的查詢,沒有全文搜索部分,運行速度很快,所以我猜F.T.S.是什麼造成了差異。我們的非全文搜索索引可能需要調整,但我不認爲它們是這裏的原因。 :) – user2173353

+0

把它放在'on'上並不是一件壞事,但是相信它實際上完全解決了你遇到的麻煩可能是一件壞事。見[這裏](/ a/10175455/1178314)。在我遇到的所有情況中,實際的麻煩始終是索引問題,而不僅僅是「ARITHABORT」設置。 –

相關問題