私は自分のウェブサイトをrackspaceクラウドサーバーでホストしました。
データベースからレコードをフェッチしているときに、以下の例外が発生することがあります。奇妙なことに、再起動後数日間はすべて正常に動作します。また、この例外は、すべての場所ではなく、いくつかの場所でのみ発生します。
Exception: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Stack Trace:
[SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +404
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() +412
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, 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) +6387937
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +6389506
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +538
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +28
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +256
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +19
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +553
[EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details.]
DataAccessLayer.dbCustomer.CompanyCustomerByLocationId(String sortExpression, Boolean asc, String nameSearchString, Int32 startRowIndex, Int32 maximumRows, Int32& TotalRecord, Int64 companyId) in D:\Dotnet Projects\FutureZoom\FutureZoom\DataAccessLayer\dbCustomer.cs:508
BusinessLogic.Customer.CompanyCustomerByLocationId(String sortExpression, Boolean asc, String nameSearchString, Int32 startRowIndex, Int32 maximumRows, Int64 CompanyId) in D:\Dotnet Projects\FutureZoom\FutureZoom\BusinessLogic\Customer.cs:431
FutureZoom.Areas.Admin.Controllers.CompanyController.CustomerPaging(Int32 StartIndex, Int32 PageSize, String SortExp, Boolean Asc, String SearchExp, String Where) in D:\Dotnet Projects\FutureZoom\FutureZoom\FutureZoom\Areas\Admin\Controllers\CompanyController.cs:552
lambda_method(Closure , ControllerBase , Object[] ) +362
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +248
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39
System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +125
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +640
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +312
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +691
System.Web.Mvc.Controller.ExecuteCore() +162
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +305
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +62
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +20
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +469
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375
私のLinqクエリは以下に記載されています
query = context.Customers.Include("Company").Include("Company.EmailCampaignerStatus")
.OrderBy(m => m.EmailCampaignerStatus.FirstOrDefault().CreatedOn)
.Where(m => m.FirstName.StartsWith(name) || m.LastName.StartsWith(name) || m.Email.StartsWith(name) || (m.FirstName + " " + m.LastName).StartsWith(name))
.Where(m => m.CompanyId == companyId)
.Where(m => m.CompanyLocationId == locationId)
.Skip(startRowIndex == 0 ? startRowIndex : startRowIndex - 1)
.Take(maximumRows)
.ToList();
このクエリの実行時間は、ローカルマシンでは1秒でも、再起動後のサーバー側でも同じですが、実行時間は日ごとに長くなり、数日後に実行に失敗します(失敗することもあれば、結果が得られることもあります)。
31.05秒かかって失敗し、51.09秒かかって失敗することを確認しました。場合によっては2分以上かかり、結果が得られます。
私はラックスペースの人々と話をしましたが、彼らは同じものの実際の原因を追跡することができませんでした。
編集1:ページングクエリに対するSQLプロファイラーのクエリを以下で確認しました
SELECT
[Project3].[Id1] AS [Id],
[Project3].[C1] AS [C1],
[Project3].[Id] AS [Id1],
[Project3].[CompanyId] AS [CompanyId],
[Project3].[CompanyLocationId] AS [CompanyLocationId],
[Project3].[FirstName] AS [FirstName],
[Project3].[LastName] AS [LastName],
[Project3].[Email] AS [Email],
[Project3].[Address1] AS [Address1],
[Project3].[Address2] AS [Address2],
[Project3].[City] AS [City],
[Project3].[State] AS [State],
[Project3].[Country] AS [Country],
[Project3].[Zip] AS [Zip],
[Project3].[Phone] AS [Phone],
[Project3].[SaleDate] AS [SaleDate],
[Project3].[Notes] AS [Notes],
[Project3].[Cost] AS [Cost],
[Project3].[CreatedOn] AS [CreatedOn],
[Project3].[ModifiedOn] AS [ModifiedOn],
[Project3].[PrimaryReviewSiteId] AS [PrimaryReviewSiteId],
[Project3].[Id2] AS [Id2],
[Project3].[SubscriptionTypeId] AS [SubscriptionTypeId],
[Project3].[PlanFeeAmount] AS [PlanFeeAmount],
[Project3].[LoginId] AS [LoginId],
[Project3].[IndustryTypeId] AS [IndustryTypeId],
[Project3].[CompanyName] AS [CompanyName],
[Project3].[NumberOfLocations] AS [NumberOfLocations],
[Project3].[LogoImageName] AS [LogoImageName],
[Project3].[WebsiteUrl] AS [WebsiteUrl],
[Project3].[blsActive] AS [blsActive],
[Project3].[Pending] AS [Pending],
[Project3].[ExpiryDate] AS [ExpiryDate],
[Project3].[C2] AS [C2],
[Project3].[Id3] AS [Id3],
[Project3].[UploadTicketId] AS [UploadTicketId],
[Project3].[UploadStatus] AS [UploadStatus],
[Project3].[CompanyId1] AS [CompanyId1],
[Project3].[CompanyLocationId1] AS [CompanyLocationId1],
[Project3].[CustomerId] AS [CustomerId],
[Project3].[CreatedOn2] AS [CreatedOn1]
FROM ( SELECT
[Limit2].[Id] AS [Id],
[Limit2].[CompanyId] AS [CompanyId],
[Limit2].[CompanyLocationId] AS [CompanyLocationId],
[Limit2].[FirstName] AS [FirstName],
[Limit2].[LastName] AS [LastName],
[Limit2].[Email] AS [Email],
[Limit2].[Address1] AS [Address1],
[Limit2].[Address2] AS [Address2],
[Limit2].[City] AS [City],
[Limit2].[State] AS [State],
[Limit2].[Country] AS [Country],
[Limit2].[Zip] AS [Zip],
[Limit2].[Phone] AS [Phone],
[Limit2].[SaleDate] AS [SaleDate],
[Limit2].[Notes] AS [Notes],
[Limit2].[Cost] AS [Cost],
[Limit2].[CreatedOn] AS [CreatedOn],
[Limit2].[ModifiedOn] AS [ModifiedOn],
[Limit2].[PrimaryReviewSiteId] AS [PrimaryReviewSiteId],
[Limit2].[Id1] AS [Id1],
[Limit2].[CreatedOn1] AS [CreatedOn1],
[Limit2].[Id2] AS [Id2],
[Limit2].[SubscriptionTypeId] AS [SubscriptionTypeId],
[Limit2].[PlanFeeAmount] AS [PlanFeeAmount],
[Limit2].[LoginId] AS [LoginId],
[Limit2].[IndustryTypeId] AS [IndustryTypeId],
[Limit2].[CompanyName] AS [CompanyName],
[Limit2].[NumberOfLocations] AS [NumberOfLocations],
[Limit2].[WebsiteUrl] AS [WebsiteUrl],
[Limit2].[blsActive] AS [blsActive],
[Limit2].[Pending] AS [Pending],
[Limit2].[ExpiryDate] AS [ExpiryDate],
[Limit2].[LogoImageName] AS [LogoImageName],
[Limit2].[C1] AS [C1],
[Extent4].[Id] AS [Id3],
[Extent4].[UploadTicketId] AS [UploadTicketId],
[Extent4].[UploadStatus] AS [UploadStatus],
[Extent4].[CompanyId] AS [CompanyId1],
[Extent4].[CompanyLocationId] AS [CompanyLocationId1],
[Extent4].[CustomerId] AS [CustomerId],
[Extent4].[CreatedOn] AS [CreatedOn2],
CASE WHEN ([Extent4].[Id] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C2]
FROM (SELECT TOP (20) [Project2].[Id] AS [Id], [Project2].[CompanyId] AS [CompanyId], [Project2].[CompanyLocationId] AS [CompanyLocationId], [Project2].[FirstName] AS [FirstName], [Project2].[LastName] AS [LastName], [Project2].[Email] AS [Email], [Project2].[Address1] AS [Address1], [Project2].[Address2] AS [Address2], [Project2].[City] AS [City], [Project2].[State] AS [State], [Project2].[Country] AS [Country], [Project2].[Zip] AS [Zip], [Project2].[Phone] AS [Phone], [Project2].[SaleDate] AS [SaleDate], [Project2].[Notes] AS [Notes], [Project2].[Cost] AS [Cost], [Project2].[CreatedOn] AS [CreatedOn], [Project2].[ModifiedOn] AS [ModifiedOn], [Project2].[PrimaryReviewSiteId] AS [PrimaryReviewSiteId], [Project2].[Id1] AS [Id1], [Project2].[CreatedOn1] AS [CreatedOn1], [Project2].[Id2] AS [Id2], [Project2].[SubscriptionTypeId] AS [SubscriptionTypeId], [Project2].[PlanFeeAmount] AS [PlanFeeAmount], [Project2].[LoginId] AS [LoginId], [Project2].[IndustryTypeId] AS [IndustryTypeId], [Project2].[CompanyName] AS [CompanyName], [Project2].[NumberOfLocations] AS [NumberOfLocations], [Project2].[WebsiteUrl] AS [WebsiteUrl], [Project2].[blsActive] AS [blsActive], [Project2].[Pending] AS [Pending], [Project2].[ExpiryDate] AS [ExpiryDate], [Project2].[LogoImageName] AS [LogoImageName], [Project2].[C1] AS [C1]
FROM ( SELECT [Project2].[Id] AS [Id], [Project2].[CompanyId] AS [CompanyId], [Project2].[CompanyLocationId] AS [CompanyLocationId], [Project2].[FirstName] AS [FirstName], [Project2].[LastName] AS [LastName], [Project2].[Email] AS [Email], [Project2].[Address1] AS [Address1], [Project2].[Address2] AS [Address2], [Project2].[City] AS [City], [Project2].[State] AS [State], [Project2].[Country] AS [Country], [Project2].[Zip] AS [Zip], [Project2].[Phone] AS [Phone], [Project2].[SaleDate] AS [SaleDate], [Project2].[Notes] AS [Notes], [Project2].[Cost] AS [Cost], [Project2].[CreatedOn] AS [CreatedOn], [Project2].[ModifiedOn] AS [ModifiedOn], [Project2].[PrimaryReviewSiteId] AS [PrimaryReviewSiteId], [Project2].[Id1] AS [Id1], [Project2].[CreatedOn1] AS [CreatedOn1], [Project2].[Id2] AS [Id2], [Project2].[SubscriptionTypeId] AS [SubscriptionTypeId], [Project2].[PlanFeeAmount] AS [PlanFeeAmount], [Project2].[LoginId] AS [LoginId], [Project2].[IndustryTypeId] AS [IndustryTypeId], [Project2].[CompanyName] AS [CompanyName], [Project2].[NumberOfLocations] AS [NumberOfLocations], [Project2].[WebsiteUrl] AS [WebsiteUrl], [Project2].[blsActive] AS [blsActive], [Project2].[Pending] AS [Pending], [Project2].[ExpiryDate] AS [ExpiryDate], [Project2].[LogoImageName] AS [LogoImageName], [Project2].[C1] AS [C1], row_number() OVER (ORDER BY [Project2].[CreatedOn1] ASC) AS [row_number]
FROM ( SELECT
[Filter1].[Id] AS [Id],
[Filter1].[CompanyId] AS [CompanyId],
[Filter1].[CompanyLocationId] AS [CompanyLocationId],
[Filter1].[FirstName] AS [FirstName],
[Filter1].[LastName] AS [LastName],
[Filter1].[Email] AS [Email],
[Filter1].[Address1] AS [Address1],
[Filter1].[Address2] AS [Address2],
[Filter1].[City] AS [City],
[Filter1].[State] AS [State],
[Filter1].[Country] AS [Country],
[Filter1].[Zip] AS [Zip],
[Filter1].[Phone] AS [Phone],
[Filter1].[SaleDate] AS [SaleDate],
[Filter1].[Notes] AS [Notes],
[Filter1].[Cost] AS [Cost],
[Filter1].[CreatedOn] AS [CreatedOn],
[Filter1].[ModifiedOn] AS [ModifiedOn],
[Filter1].[PrimaryReviewSiteId] AS [PrimaryReviewSiteId],
[Limit1].[Id] AS [Id1],
[Limit1].[CreatedOn] AS [CreatedOn1],
[Extent3].[Id] AS [Id2],
[Extent3].[SubscriptionTypeId] AS [SubscriptionTypeId],
[Extent3].[PlanFeeAmount] AS [PlanFeeAmount],
[Extent3].[LoginId] AS [LoginId],
[Extent3].[IndustryTypeId] AS [IndustryTypeId],
[Extent3].[CompanyName] AS [CompanyName],
[Extent3].[NumberOfLocations] AS [NumberOfLocations],
[Extent3].[WebsiteUrl] AS [WebsiteUrl],
[Extent3].[blsActive] AS [blsActive],
[Extent3].[Pending] AS [Pending],
[Extent3].[ExpiryDate] AS [ExpiryDate],
[Extent3].[LogoImageName] AS [LogoImageName],
1 AS [C1]
FROM (SELECT [Extent1].[Id] AS [Id], [Extent1].[CompanyId] AS [CompanyId], [Extent1].[CompanyLocationId] AS [CompanyLocationId], [Extent1].[FirstName] AS [FirstName], [Extent1].[LastName] AS [LastName], [Extent1].[Email] AS [Email], [Extent1].[Address1] AS [Address1], [Extent1].[Address2] AS [Address2], [Extent1].[City] AS [City], [Extent1].[State] AS [State], [Extent1].[Country] AS [Country], [Extent1].[Zip] AS [Zip], [Extent1].[Phone] AS [Phone], [Extent1].[SaleDate] AS [SaleDate], [Extent1].[Notes] AS [Notes], [Extent1].[Cost] AS [Cost], [Extent1].[CreatedOn] AS [CreatedOn], [Extent1].[ModifiedOn] AS [ModifiedOn], [Extent1].[PrimaryReviewSiteId] AS [PrimaryReviewSiteId]
FROM [dbo].[Customer] AS [Extent1]
WHERE (([Extent1].[FirstName] LIKE @p__linq__0 ESCAPE N'~') OR ([Extent1].[LastName] LIKE @p__linq__1 ESCAPE N'~') OR ([Extent1].[Email] LIKE @p__linq__2 ESCAPE N'~') OR ([Extent1].[FirstName] + N' ' + [Extent1].[LastName] LIKE @p__linq__3 ESCAPE N'~')) AND ([Extent1].[CompanyId] = @p__linq__4) AND ([Extent1].[CompanyLocationId] = @p__linq__5) ) AS [Filter1]
OUTER APPLY (SELECT TOP (1)
[Extent2].[Id] AS [Id],
[Extent2].[CreatedOn] AS [CreatedOn]
FROM [dbo].[EmailCampaignerStatus] AS [Extent2]
WHERE [Filter1].[Id] = [Extent2].[CustomerId] ) AS [Limit1]
LEFT OUTER JOIN [dbo].[Company] AS [Extent3] ON [Filter1].[CompanyId] = [Extent3].[Id]
) AS [Project2]
) AS [Project2]
WHERE [Project2].[row_number] > 0
ORDER BY [Project2].[CreatedOn1] ASC ) AS [Limit2]
LEFT OUTER JOIN [dbo].[EmailCampaignerStatus] AS [Extent4] ON [Limit2].[CompanyId] = [Extent4].[CompanyId]
) AS [Project3]
ORDER BY [Project3].[CreatedOn1] ASC, [Project3].[Id1] ASC, [Project3].[Id] ASC, [Project3].[Id2] ASC, [Project3].[C2] ASC
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[Customer] AS [Extent1]
WHERE (([Extent1].[FirstName] LIKE @p__linq__0 ESCAPE N'~') OR ([Extent1].[LastName] LIKE @p__linq__1 ESCAPE N'~') OR ([Extent1].[Email] LIKE @p__linq__2 ESCAPE N'~') OR ([Extent1].[FirstName] + N' ' + [Extent1].[LastName] LIKE @p__linq__3 ESCAPE N'~')) AND ([Extent1].[CompanyId] = @p__linq__4) AND ([Extent1].[CompanyLocationId] = @p__linq__5)
) AS [GroupBy1]
SELECT
CASE WHEN ( EXISTS (SELECT
1 AS [C1]
FROM [dbo].[CompanyReviewSites] AS [Extent1]
WHERE [Extent1].[CompanyLocationId] = @p__linq__0
)) THEN cast(1 as bit) WHEN ( NOT EXISTS (SELECT
1 AS [C1]
FROM [dbo].[CompanyReviewSites] AS [Extent2]
WHERE [Extent2].[CompanyLocationId] = @p__linq__0
)) THEN cast(0 as bit) END AS [C1]
FROM ( SELECT 1 AS X ) AS [SingleRowTable1]
SELECT
1 AS [C1],
[Extent1].[Id] AS [Id],
[Extent1].[RiviewSiteId] AS [RiviewSiteId],
[Extent1].[URL] AS [URL],
[Extent1].[CompanyId] AS [CompanyId],
[Extent1].[CompanyLocationId] AS [CompanyLocationId],
[Extent2].[Id] AS [Id1],
[Extent2].[ReviewSiteName] AS [ReviewSiteName],
[Extent2].[ImageName] AS [ImageName]
FROM [dbo].[CompanyReviewSites] AS [Extent1]
INNER JOIN [dbo].[ReviewSites] AS [Extent2] ON [Extent1].[RiviewSiteId] = [Extent2].[Id]
WHERE [Extent1].[CompanyLocationId] = @p__linq__0