2012-01-27 10 views
0

基本的に私どものクライアントは深刻な記録を残しており、以下のエラーが発生しています。本来、クエリは十分ではなく、レポートの生成にもかかわらず、約25分かかります。その間、タイムアウトのために以下のイメージがクライアントに表示されます。私はクエリを最適化しようとしていますが、率直に言えば、それはまだ10分で長すぎます。クライアントがさらに大きなデータセットを使用しているときに同じ問題が発生すると思います。レポートが生成されるのを待つときにブラウザでタイムアウトが発生し、強制的に待機させる方法はありますか?

とにかく、以下のエラーが発生しないことを確認できますか?ビジュアルスタジオレポートサービスを使用してレポートを生成すると、10〜15分かかりますが、少なくともレポートが生成されます。レポートを生成するまでブラウザを強制的に待機させるにはどうすればよいですか?

クライアントは、この解決策を使用して、必要なものを手に入れようとしています。

timeout error displayed

私は、ストアドプロシージャにそれを変更しましたし、すべての余分なアウターは、私が低迷の原因であったかもしれないと思った関数呼び出しを交換した合流。物価を上げるために追加の指標が追加されましたが、これまでのところ運はありません。

SQLプロファイラはインデックスのシーク時間が長いことを示していますが、これを改善する方法はわかりません。

これは実行された元のクエリの実行計画であり、変更によって結果が分かりませんでした。ここで

http://dl.dropbox.com/u/21484692/showplan.SQLPlan

SQLです:

未遂解像度の点で
USE [Apollo_Interface_Staging] 
GO 
/****** Object: StoredProcedure [dbo].[spRptGMPP_UploadResults] Script Date: 01/27/2012 11:09:13 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[spRptGMPP_UploadResults] 
-- Add the parameters for the stored procedure here 
@StartDate DATETIME, 
@EndDate DATETIME, 
@UploadStatus VARCHAR(15) 

AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

DECLARE @TrueEndDate DATETIME 
SELECT @TrueEndDate = (select DATEADD(ms,-3,DATEADD(dd, DATEDIFF(dd,0,@EndDate), 1))) 

SELECT 
VIN1 
,TR_DATE 
,CASE WHEN REC_STAT = 'A' THEN 'Add' WHEN REC_STAT = 'D' THEN 'Delete' WHEN REC_STAT = 'C' THEN 'Change' ELSE REC_STAT END as REC_STAT 
, FRAN_CDE 
, WARR_ODD 
, WARR_MTH 
, cast(rds_fee as money)/100 * CASE WHEN REC_STAT = 'D' THEN -1 ELSE 1 END as Fee 
,PROV 

,ROUND((gst.Percentage)/100 * cast(rds_fee as money)/100 * CASE WHEN REC_STAT = 'D' THEN -1 ELSE 1 END,2) as GST 
,CASE WHEN prov NOT IN ('ON','BC') THEN 
    ROUND((hst.Percentage)/100 * cast(rds_fee as money)/100 *CASE WHEN REC_STAT = 'D' THEN -1 ELSE 1 END,2) 
    ELSE 0 
    END as HST 
,CASE WHEN prov = 'ON' THEN 
    ROUND((hst.Percentage)/100 * cast(rds_fee as money)/100 *CASE WHEN REC_STAT = 'D' THEN -1 ELSE 1 END,2) 
    ELSE 0 
    END as HST_ON 
,CASE WHEN prov = 'BC' THEN 
    ROUND((hst.Percentage)/100 * cast(rds_fee as money)/100 *CASE WHEN REC_STAT = 'D' THEN -1 ELSE 1 END,2) 
    ELSE 0 
    END as HST_BC 
,ROUND((hst.Percentage)/100 * cast(rds_fee as money)/100 *CASE WHEN REC_STAT = 'D' THEN -1 ELSE 1 END,2) as HST 
,ROUND((1 + (gst.Percentage)/100) 
        * (qst.Percentage)/100 * cast(rds_fee as money)/100, 2) *CASE WHEN REC_STAT = 'D' THEN -1 ELSE 1 END as QST 
,_UploadStatus as UploadStatus 
,CAST(YEAR(_UploadDate) as varchar)+ '/' + RIGHT('0' + cast(MONTH(_UploadDate)as varchar) ,2)+ '/' + RIGHT('0' + DAY(_UploadDate),2) as UploadDate 
,_UploadDescription as UploadDescription 
,'' as VehicleMake--,Apollo.dbo.GetGMManufacturerFromVIN(VIN1) AS VehicleMake 
,'' as VehicleYear--,Apollo.dbo.GetVehYear(VIN1) AS VehicleYear 
,ID 
,ISNULL(mem.MembershipID,'') as MembershipID 
,ISNULL(mem.MembershipTermID,'') as MembershipTermID 
,ISNULL(p.Name,'') as [Plan] 
,CASE mem.ActionTaken 
    WHEN 0 THEN 'None' 
    WHEN 1 THEN 'Upgraded' 
    WHEN 2 THEN 'Reverse Upgrade' 
    WHEN 3 THEN 'Created' 
    WHEN 4 THEN 'Cancelled' 
    WHEN 5 THEN 'Status Changed' 
    WHEN 6 THEN 'Static Update' 
    ELSE '' 
END as Action 
,ISNULL((SELECT SUM(mtd.Amount) FROM Apollo.dbo.MemberTransactionDetail mtd WITH(NOLOCK) WHERE mtd.MemberTransactionID = mem.TransactionID),0) as TransactionAmount 
,ISNULL((select SUM(pe.InitialValue) from apollo_drm..[transaction] trx WITH(NOLOCK) inner join apollo_drm..paymentelement pe WITH(NOLOCK) ON pe.transactionid = trx.transactionid where trx.externalref = mem.TransactionID AND trx.ExternalRef > 0),0) as DRMTransactionAmount 
,gm.STAMP as DateTimeStamp 
FROM 
Apollo_Interface_Staging.dbo.gmpp_archive gm WITH(NOLOCK) 
LEFT OUTER JOIN Apollo_Interface_Staging.dbo.GMPP_Effected_Memberships mem WITH(NOLOCK) ON mem.GMPP_ImportID = gm.ID 
LEFT OUTER JOIN Apollo..MembershipTerm mt WITH(NOLOCK) ON mt.MembershipTermID = mem.MembershipTermID 
LEFT OUTER JOIN Apollo..[PlanVersion] pv WITH(NOLOCK) ON pv.PlanVersionID = mt.PlanVersionID 
LEFT OUTER JOIN Apollo..[Plan] p WITH(NOLOCK) ON p.PlanID = pv.PlanID 

LEFT OUTER JOIN APollo..PRovinceOrSTateTax gst WITH(NOLOCK) ON gst.PRovinceOrStateTaxID = (
    SELECT TOP 1 tmp.PRovinceOrStateTaxID 
    FROM Apollo.dbo.ProvinceOrStateTax tmp 
    WHERE tmp.TaxTypeProgKey = 'GST' 
       AND tmp.ProvinceOrStateProgKey = prov 
       AND tmp.StartDate <= GETDATE() 
    ORDER BY 
      tmp.StartDate DESC 
)        
LEFT OUTER JOIN APollo..PRovinceOrSTateTax hst WITH(NOLOCK) ON hst.PRovinceOrStateTaxID = (
    SELECT TOP 1 tmp.PRovinceOrStateTaxID 
    FROM Apollo.dbo.ProvinceOrStateTax tmp 
    WHERE tmp.TaxTypeProgKey = 'HST' 
       AND tmp.ProvinceOrStateProgKey = prov 
       AND tmp.StartDate <= GETDATE() 
    ORDER BY 
      tmp.StartDate DESC 
)                        
LEFT OUTER JOIN APollo..PRovinceOrSTateTax qst WITH(NOLOCK) ON qst.PRovinceOrStateTaxID = (
    SELECT TOP 1 tmp.PRovinceOrStateTaxID 
    FROM Apollo.dbo.ProvinceOrStateTax tmp 
    WHERE tmp.TaxTypeProgKey = 'QST' 
       AND tmp.ProvinceOrStateProgKey = prov 
       AND tmp.StartDate <= GETDATE() 
    ORDER BY 
      tmp.StartDate DESC 
)  

WHERE 
STAMP BETWEEN @StartDate AND @TrueEndDate 
AND 
(
    @UploadStatus = 'ALL' 
     OR 
    _UploadStatus = @UploadStatus 
) 
END 

私は、ストアドプロシージャに直接日付を置く代わりに、ユーザがそれらを選択することを可能にすることによって、ルートを盗聴パラメータを試してみましたそれは3分ぐらいに切断されましたが、これは明らかに私たちのための解決策ではなく、依然として必死にゆっくりとしています。

答えて

1

レポートを待っている時間が長くかかることはありません。 何かが間違っているか、適切なインデックスが作成されていない可能性がありますか? データセットにアクセスするSQLを投稿できますか?

あなたが持っているもう1つのオプションは、レポートをpdf形式にエクスポートして30分ごとにクライアントの共有ディレクトリにスローするRSサブスクリプションを作成することです。そうすれば、クライアントはレポートを待たなくても、ネットワーク共有フォルダにレポートが準備されていると期待できます。レポートサービスで時間を直接調整して、10分/ 20分/毎にこのレポートを生成することができます。

+0

詳細については、SQLなどを追加しました。私は、ここから実行されるレポートのエクスポートはオプションであると考えていますが、これはブラウザのタイムアウトを処理するための方法についての方法かもしれないと考えました。それは可能ではありませんか? – shicky

+0

@ shicky私たちはいくつかのSQLを修正することができますが、それは多くのコードです。あなたはこれのいくつかの実行計画を投稿できますか?私はコストがBETWEENとOR条件によるものだと思います。 – JonH

+0

元のクエリの実行計画にリンクを張ってください。多くの運が無ければパラメータスニッフィングのルートを下りようと試みました。パラメータを使用しないストアドプロシージャへの切り替えの面での変更は、面白い実行プランを完全に変更しました。あなたはその状態に何が間違っていると思いますか?私はどのような代替案があるのか​​よくわからないのですか? SSRSのグループ化が問題の可能性があるかどうかを調べる – shicky

関連する問題