2016-05-12 6 views
0

当社の生産環境NHibernateはv3.1.0.4000 を使用して、突然は、フルテキスト検索で検索するときにこのエラーを与え始め:NHibernateのは - "GenericADOException:クエリを実行できませんでした"

[SqlExceptionが(0x80131904) :タイムアウトが切れました。操作が完了する前にタイムアウト時間が経過しているか、サーバーが応答していません。] System.Data.SqlClient.SqlConnection.OnError(SqlException例外、ブールブレーク接続)+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 +6389826 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior runBehavior、Boolean戻り値、Stringメソッド、DbAsyncResult結果)+538 System.Data.SqlClient.SqlCommand。 RunExecuteReader(CommandBehaviorのcmdBehavior、runBehavior runBehavior、ブールreturnStream、文字列方式)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、ブールautoDiscoverTypes、ブール呼び出し可能な、RowSelection選択、ISessionImplementorセッション)580 NHibernate.Loader.Loader.DoQuery(ISessionImplementorセッション、QueryParametersのqueryParameters、ブールreturnProxies)275 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementorセッション、QueryParametersのqueryParameters、ブールreturnProxies this_内部結合Document.Documentからクエリ を実行できませんでした[SELECTカウント(別個this_.IdDocument)y0_として:)205 NHibernate.Loader.Loader.DoList(ISessionImplementorセッション、QueryParameters queryParameters)195

[GenericADOException (@ p0 = @ p1と(this_.Title、@ p2)を含む)this_.IdDocument = documentc1_.IdDocument WHEREとthis_.IsDeのDocument.DocumentCopy documentc1_ (documentc1_.IdOwnedByGroup = @ p8またはdocumentc1_.IdCreatedByGroup = @ p9))]を使用して、 位置パラメータ:#0> 0#1> 0#2> "←←#4> 0#5> 0#6> 5/2016 11:59:00ýÿyÿ#8> 1#9> 1 [SQL:SELECT count(distinct this_.IdDocument)をy0_からDocument.Document this_ innerをDocument.documentCopy documentc1_ this_.IdDocument = documentc1_.IdDocumentに結合します。 WHERE((@ p0 = @ p1と(this_.Title、@ p2))とthis_.IsDeleted = @ p3)と((@p4 = @ p5とdocumentc1_.CreationDate> = @ p6)とdocumentc1_.CreationDate < = 0 p7)と(documentc1_.IdOwnedByGroup = @ p8またはdocumentc1_.IdCreatedByGroup = @ p9))]]] NHibernate.Loader.Loader.DoList(ISessionImplementorセッション、QueryParameters queryParame TERS)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 システムSystem.Web.Mvc.ControllerBase.Execute 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で上記のクエリを試してみましたが、うまく動作しているようです。

私のエラーメッセージにはIndexOutOfRangeExceptionが含まれていませんが、同様のエラーがここに記載されています:Nhibernate FieldNameLookup throws IndexOutOfRangeException

これの原因は誰に教えてもらえますか?

UPDATE:

さらに詳しい情報:

私たちは、投影を使用しています。

エラーログによれば、エラーはカウントだけを返し、多くのフィールドを持つ行は多くないクエリから発生します。

私が前に述べたように、SSMSから実行すると、同じクエリ(エラーログにリストされています)が問題なく実行されます。しかし、このSQLクエリを実行するアプリケーションから作成されたすべてのクエリは、上記のエラーで失敗するようです。

NHのカスタムラッパーを使用しているため、コードがわからないことがあります。

私は例外の順序が間違っていると思うし、最初にタイムアウトが発生し、ADO.netが他のエラーを報告します。

は、いくつかの余分な研究の後、それはこれが、この問題に関連して、クエリが実際に、タイムアウトだけされていないようだ。 だから、私は

UPDATE 2が...それは結局、タイムアウトであると思います

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

+0

datailsすると、タイムアウトの問題であると言います。 – Najera

+0

どのくらいのデータを持ち帰っていますか?このコードはどのように見えますか?あなたは予測を使っていますか? – Fran

+0

@ Najeraその第1の例外の下を見ると、内部の例外のような別の例外があります。 – user2173353

答えて

-1

が、それは(私のアプリのセッションとSSMSのセッションの間)ARITHABORTに異なる値を使用していたので、SSMSから再生することができませんでしたタイムアウトであることが判明:SSMSから。

私はDBのためON/1へのデフォルト値を設定したら、すべてが修正されました:

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はこの設定をとにかくオンにすることを提案しています(https://msdn.microsoft.com/en-us/library/ms190306.aspx)。だから、私がやったことをするのは悪いことではないと思う。また、クエリ内にはフルテキスト検索クエリが含まれており、ほとんどのフルテキストインデックスはDB内で70%を超えて断片化されています(これはDBAがないシステムを実行すると起こります)。フルテキスト検索部分を使わずに同じクエリを実行していたので、F.T.S.その違いを生み出したものです。私たちの非フルテキスト検索インデックスは、調整が必要な場合がありますが、私はそれらが原因ではないと思います。 :) – user2173353

+0

「オン」にすることは悪いことではありませんが、実際にあなたが遭遇した問題を完全に解決すると信じると悪いことになります。 [ここ](/ a/10175455/1178314)を参照してください。私が遭遇したすべてのケースでは、実際のトラブルは、この「ARITHABORT」設定だけでなく、常にインデックスのトラブルでした。 –

関連する問題