2013-07-10 13 views
5

Ho un rapporto SSRS che carica lentamente, presumibilmente da errori di blocco. Ecco cosa so.Il rapporto SSRS impiega più tempo della query; provato parametro sniffing & nolock correzioni

Se inserisco la query che guida il report in una finestra di query di Management Studio, sono necessari circa 50 ms per l'esecuzione.

Quando si esegue i criteri di report Ho testato dall'interfaccia del browser, i valori di tempo ReportServer..ExecutionLog (dove lo status = 'riuscita dell'operazione' E ReportID = [thereport]) Campo come segue:

TimeDataRetrieval: 95000-120000 
TimeProcessing: 35000-50000 
TimeRendering: 75-125 

Perché io non so un modo migliore per farlo, ho monitorato lo sys.dm_exec_requests mentre correvo alla relazione un paio di volte e questa query sembra essere il hangup:

CREATE PROCEDURE [dbo].[CheckSessionLock] 
@SessionID as varchar(32) AS 
DECLARE @Selected nvarchar(32) 
SELECT @Selected=SessionID 
FROM [ReportServerTempDB].dbo.SessionLock 
WITH (ROWLOCK) WHERE SessionID = @SessionID 

sembra questo comando assume circa lo stesso tempo di TimeDataRetrieval + TimeProcessin g valori sopra, quindi credo che sia il colpevole. Mi è anche capitato di fare una creazione simile di CleanOrphanedSnapshots, quindi immagino si tratti di normali operazioni SSRS. Finora non ho avuto fortuna nel trovare le impostazioni di configurazione correlate nel generatore di report o nel codice stesso.

Le soluzioni suggerite che ho trovato online hanno a che fare con "parameter sniffing" e WITH (nolock). Il primo sembra essere solo nel contesto di chiamare una stored procedure, cosa che non sta facendo. Ho creato un SP per vedere se il trattamento dei parametri di prelazione avrebbe cambiato il risultato e sembra essere lo stesso. Ho aggiunto il suggerimento WITH (nolock) e l'impostazione dell'isolamento per leggere senza commit senza fortuna.

Sono sicuro che mi manca qualcosa di semplice. Ecco sperando che qualcuno sappia di cosa si tratta. Grazie per l'aiuto.

Parametro sniffing - Fast query runs slow in SSRS nolock approccio - SSRS is locking table

+2

Sta succedendo solo con questo rapporto o tutti i rapporti? – GayanSanjeewa

+2

Ah ah! Grazie, GayanSanjeewa. Questo mi aiuta a vedere cosa mi mancava. Nessuno degli altri report ha lo stesso problema e in effetti un altro report conteneva la stessa query di base ESATTA. Questo mi ha fatto capire che ho trascurato due sottoreport all'interno del rapporto problema. Se sto leggendo questo libro, vengono eseguiti per ogni record nel report principale (e non sono molto efficienti). Sto indovinando che dovrò o ridisegnare il rapporto con una query di base migliore o vedere se posso modificare le query del sottoreport per funzionare in modo efficiente. Grazie ancora! – tetch

+2

AGGIORNAMENTO: Sì, ho avuto due visualizzazioni aberranti che ho ottimizzato (o almeno migliorato) e ho ottenuto il tempo di rapporto da 2-3 minuti a 20-25 secondi. Il CheckSessionLock si verifica ancora, quindi suppongo che è proprio come funziona SSRS. – tetch

risposta

2

Per la richiesta di commento di Martin Smith sopra, la risposta a questo particolare problema è stato quello di riconoscere c'erano subreports in esecuzione all'interno del report problema che si stavano causando la lentezza. Questo non era ovvio, semplicemente rivedendo la query eseguita in SSMS. Quindi sii più attento di me e assicurati di conoscere la composizione completa del rapporto. :)

Problemi correlati