運用サイトの ASP.NET フロントエンド環境からこのストアド プロシージャを呼び出すと、中間タイムアウトが発生します。次の sql 例外を返します。
例外の詳細: System.Data.SqlClient.SqlException: タイムアウトが発生しました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。
面白いことに、この手順をサーバー上で実行するか、Management Studio を使用してリモート PC から実行すると、6 秒で実行されます。それでも、ASP.NET アプリケーションから実行するとタイムアウトになることがありますか? このクエリを改善できますか? それとも、この問題は何か他のものに関連していますか? 助けてくれる人はいますか?タイムアウトを増やし、web.config の接続文字列でプールを有効にすることについていくつかのスレッドを読みましたが、まだ試していません。
ALTER PROCEDURE [dbo].[Report_Activity]
(
@StartDate DATETIME
, @EndDate DATETIME
, @TotalActions INT OUTPUT
)
AS
BEGIN
SELECT @TotalActions = COUNT(EventHistoryId)
FROM dbo.SessionEventHistory
WHERE DateCreated BETWEEN @StartDate AND @EndDate
SELECT EventDescription, COUNT(EventHistoryId) AS EventCount
FROM dbo.SessionEventHistory
WHERE DateCreated BETWEEN @StartDate AND @EndDate
GROUP BY EventDescription
ORDER BY EventDescription
SQL スキーマ:
CREATE TABLE [dbo].[SessionEventHistory](
[EventHistoryID] [int] IDENTITY(1,1) NOT NULL,
[SessionHistoryID] [int] NOT NULL,
[CategoryID] [int] NULL,
[UserName] [nvarchar](50) NULL,
[IPAddress] [nvarchar](20) NOT NULL,
[EventDescription] [nvarchar](1000) NOT NULL,
[EventData] [varbinary](max) NULL,
[DateCreated] [datetime] NOT NULL,
CONSTRAINT [PK_UserEventHistory] PRIMARY KEY CLUSTERED
(
[EventHistoryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[SessionEventHistory] ADD CONSTRAINT [DF_UserEventHistory_DateCreated] DEFAULT (getdate()) FOR [DateCreated]
GO
テーブルには 3 つのインデックスがあります。
/****** Object: Index [IX_SessionEventHistory_SessionHistoryId_CategoryId] Script Date: 07/04/2012 10:47:06 ******/
CREATE NONCLUSTERED INDEX [IX_SessionEventHistory_SessionHistoryId_CategoryId] ON [dbo].[SessionEventHistory]
(
[SessionHistoryID] ASC,
[CategoryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
/****** Object: Index [IX_SessionEventHistory_UserName_DateCreated] Script Date: 07/04/2012 10:47:09 ******/
CREATE NONCLUSTERED INDEX [IX_SessionEventHistory_UserName_DateCreated] ON [dbo].[SessionEventHistory]
(
[UserName] ASC,
[DateCreated] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
/****** Object: Index [PK_UserEventHistory] Script Date: 07/04/2012 10:47:14 ******/
ALTER TABLE [dbo].[SessionEventHistory] ADD CONSTRAINT [PK_UserEventHistory] PRIMARY KEY CLUSTERED
(
[EventHistoryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
編集
次のインデックスを追加しましたが、大丈夫ですか?
CREATE NONCLUSTERED INDEX [IX_SessionEventHistory_DateCreated] ON [dbo].[SessionEventHistory]
(
[DateCreated] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO