2013-04-16 121 views
3

更新:對不起!由於舊的描述,我可能會誤導你。遷移後問題並不存在,遷移後1周纔開始出現問題遷移後SQL Server Reporting Services速度很慢

我們最近將數據庫和報表服務器遷移到新的數據庫服務器和新的報表服務器。

配置之前:

  • 數據庫服務器:2008企業,DB01/NamedInstance
  • 報表服務器:同一臺服務器作爲數據庫服務器,本機模式下,數據庫的憑據是 NT AUTHORITY \ NETWORK SERVICE

配置現在:

  • 數據庫服務器:2012企業,DC01(默認情況下,未命名 實例)
  • 報告服務:移動到RP01(本機模式),數據庫 憑據是SQL賬戶(SA)

的遷移遵循MSDN遷移指令並最終運行(儘管我們必須手動刪除一個冗餘擴展部署服務器(與舊服務器名稱相同)才能使其工作,我認爲這是SSRS缺陷)。

遷移後1周,報告在新報告服務器上開始運行非常緩慢。

所以我做了如下分析:

  1. 執行舊報表服務器的報告(報告點數據庫連接到新的數據庫服務器)和新的報表服務器,舊的報表服務器運行速度快與之前一樣(1秒),但新報表服務器運行速度非常慢(31秒)。

  2. 直接執行報表調用的存儲過程,它的速度非常快(50毫秒)。

  3. 診斷[ReportServer $ Instance]。[dbo]。[ExecutionLog]數據庫,TimeDataRetrival在舊服務器中爲50毫秒,而在新服務器中爲30050毫秒。

  4. 運行SQL Server Profiler,在舊的服務器上執行報告,一切似乎都很好。在新服務器中執行報告,引起了我的注意。在每批次的最後一個事件發生後,在「審覈註銷」生成之前,它將「掛起」(長時間運行)很長時間。下面的示例實際運行10秒,但所有語句實際運行時間不到1秒。

  5. 我懷疑:a)。某些配置(如帳戶訪問權限)在未經我確認的情況下已更改B)。新的報表服務器正在嘗試驗證沒有正確訪問權限的用戶,並在替代解決方案之前「暫停」數秒。

分析器輸出的開始時間:


審覈登錄 - 網絡協議:上 組TCP/IP SET QUOTED_IDENTIFIER ARITHABORT關閉 組NUMERIC_ROUNDABORT關閉 SET ANSI_WARNINGS上 SET ANSI_PADDING 設置ansi_nulls爲 set concat_null_yields_null on set cursor_close_on_commit off 個集IMPLICIT_TRANSACTIONS關閉 集語言美國英語 設定的日期格式MDY 集DATEFIRST 7 組的事務隔離級別讀取承諾

報表服務器SA 1440 100 2013年4月16日16:10:14.393 0X2000002838F4010000000000


SQL:BatchStarting
declare @BatchID uniqueidentifier

         set @BatchID = NEWID() 

             UPDATE [Event] WITH (TABLOCKX) 
              SET [BatchID] = @BatchID, 
              [ProcessStart] = GETUTCDATE(), 
              [ProcessHeartbeat] = GETUTCDATE() 
             FROM (
              SELECT TOP 8 [EventID] FROM [Event] WITH (TABLOCKX) WHERE [ProcessStart] is NULL ORDER BY [TimeEntered] 
              ) AS t1 
             WHERE [Event].[EventID] = t1.[EventID] 

             select top 8 
              E.[EventID], 
              E.[EventType], 
              E.[EventData] 
             from 
              [Event] E WITH (TABLOCKX) 
             where 
              [BatchID] = @BatchID 
             ORDER BY [TimeEntered] 

報表服務器SA 1440 100 2013年4月16日16:10:14.393


SQL:BatchCompleted
聲明@BatchID唯一標識符

         set @BatchID = NEWID() 

             UPDATE [Event] WITH (TABLOCKX) 
              SET [BatchID] = @BatchID, 
              [ProcessStart] = GETUTCDATE(), 
              [ProcessHeartbeat] = GETUTCDATE() 
             FROM (
              SELECT TOP 8 [EventID] FROM [Event] WITH (TABLOCKX) WHERE [ProcessStart] is NULL ORDER BY [TimeEntered] 
              ) AS t1 
             WHERE [Event].[EventID] = t1.[EventID] 

             select top 8 
              E.[EventID], 
              E.[EventType], 
              E.[EventData] 
             from 
              [Event] E WITH (TABLOCKX) 
             where 
              [BatchID] = @BatchID 
             ORDER BY [TimeEntered] 
              Report Server  sa 0 7 0 0 1440 100 2013-04-16 16:10:14.393 2013-04-16 16:10:14.393  

SQL:BatchStarting
聲明@ BatchID uniqueidentifier

       set @BatchID = newid() 

           UPDATE [Notifications] WITH (TABLOCKX) 
            SET [BatchID] = @BatchID, 
            [ProcessStart] = GETUTCDATE(), 
            [ProcessHeartbeat] = GETUTCDATE() 
           FROM (
            SELECT TOP 8 [NotificationID] FROM [Notifications] WITH (TABLOCKX) WHERE ProcessStart is NULL and 
            (ProcessAfter is NULL or ProcessAfter < GETUTCDATE()) ORDER BY [NotificationEntered] 
           ) AS t1 
           WHERE [Notifications].[NotificationID] = t1.[NotificationID] 

           select top 8 
             -- Notification data 
             N.[NotificationID], 
             N.[SubscriptionID], 
             N.[ActivationID], 
             N.[ReportID], 
             N.[SnapShotDate], 
             N.[DeliveryExtension], 
             N.[ExtensionSettings], 
             N.[Locale], 
             N.[Parameters], 
             N.[SubscriptionLastRunTime], 
             N.[ProcessStart], 
             N.[NotificationEntered], 
             N.[Attempt], 
             N.[IsDataDriven], 
             SUSER_SNAME(Owner.[Sid]), 
             Owner.[UserName], 
             -- Report Data 
             O.[Path], 
             N.[ReportZone], 
             O.[Type], 
             SD.NtSecDescPrimary, 
             N.[Version], 
             Owner.[AuthType] 
            from 
             [Notifications] N with (TABLOCKX) inner join [Catalog] O on O.[ItemID] = N.[ReportID] 
             inner join [Users] Owner on N.SubscriptionOwnerID = Owner.UserID 
             left outer join [SecData] SD on O.[PolicyID] = SD.[PolicyID] AND SD.AuthType = Owner.AuthType 
            where 
             N.[BatchID] = @BatchID 
           ORDER BY [NotificationEntered] 

報告服務器1440 SA 100 2013年4月16日16:10:14.393


SQL:BatchCompleted
聲明@BatchID唯一標識符

       set @BatchID = newid() 

           UPDATE [Notifications] WITH (TABLOCKX) 
            SET [BatchID] = @BatchID, 
            [ProcessStart] = GETUTCDATE(), 
            [ProcessHeartbeat] = GETUTCDATE() 
           FROM (
            SELECT TOP 8 [NotificationID] FROM [Notifications] WITH (TABLOCKX) WHERE ProcessStart is NULL and 
            (ProcessAfter is NULL or ProcessAfter < GETUTCDATE()) ORDER BY [NotificationEntered] 
           ) AS t1 
           WHERE [Notifications].[NotificationID] = t1.[NotificationID] 

           select top 8 
             -- Notification data 
             N.[NotificationID], 
             N.[SubscriptionID], 
             N.[ActivationID], 
             N.[ReportID], 
             N.[SnapShotDate], 
             N.[DeliveryExtension], 
             N.[ExtensionSettings], 
             N.[Locale], 
             N.[Parameters], 
             N.[SubscriptionLastRunTime], 
             N.[ProcessStart], 
             N.[NotificationEntered], 
             N.[Attempt], 
             N.[IsDataDriven], 
             SUSER_SNAME(Owner.[Sid]), 
             Owner.[UserName], 
             -- Report Data 
             O.[Path], 
             N.[ReportZone], 
             O.[Type], 
             SD.NtSecDescPrimary, 
             N.[Version], 
             Owner.[AuthType] 
            from 
             [Notifications] N with (TABLOCKX) inner join [Catalog] O on O.[ItemID] = N.[ReportID] 
             inner join [Users] Owner on N.SubscriptionOwnerID = Owner.UserID 
             left outer join [SecData] SD on O.[PolicyID] = SD.[PolicyID] AND SD.AuthType = Owner.AuthType 
            where 
             N.[BatchID] = @BatchID 
           ORDER BY [NotificationEntered] 

報告服務器SA 0 7 0 0 1440 100 2013-04-16 16:10:14.393 2013-04-16 16:10:14.393


審覈退出
舉報服務器sa 0 3836 6 10140 1440 100 2013-04-16 16:10:14.393 2013-04-16 16:10:24.533

回答

1

好的,我想我想出瞭如何解決它。我修改了報告文件(.rdl)並上傳到新的報告服務器以覆蓋現有的報告文件,它按預期快速運行。

我懷疑是因爲我們使用數據庫備份/恢復將SSRS 2008遷移到SSRS 2012,並且SSRS 2012沒有自動升級文件格式,導致了問題。

1

您是否已經從等式中消除了參數嗅探?

Fast query runs slow in SSRS

嘗試增加之初給他們由相應的參數傳遞的價值觀假參數匹配到存儲過程,然後。查看報告是否以這種方式運行得更快。

+0

1.這裏的場景是報表沒有改變,它在舊的報表服務器上運行良好,但在新的報表服務器上運行緩慢。 2. SP已經有本地變量以避免嗅探 – unruledboy

+0

我知道報告沒有改變,SQL Server的每個實例都可以根據硬件和設置採取不同的行爲。你是說運行SSRS服務的服務器改變了,但是託管數據庫的服務器沒有改變? – influent

+0

您是否嘗試添加OPTION(RECOMPILE)或其他提示? – influent