[RS] ReportServer, execution log, catalog e performance
Il database ReportServer (il database relativo al servizio dei Reporting Services) contiene, tra le altre cose, un prezioso oggetto in grado di fornirci informazioni relative alle esecuzioni dei nostri report.
Si tratta di una vista (ExecutionLog) che interroga tabelle, gestite direttamente dall'istanza di reporting, contenenti dati utili per analisi di utilizzo, performance ed esecuzione in genere.
In particolare possono essere molto interessanti le colonne:
- TimeDataRetrieval: il tempo, espresso in millisecondi, utilizzato per eseguire l'interrogazione e recuperare i dati richiesti
- TimeProcessing: il tempo speso per processare l'intero report
- TimeRendering: il tempo speso per effettuare il render del report
- Format: il formato di rendering richiesto dal client
- ByteCount: la dimensione in byte del report renderizzato
- RowCount: il numero di righe ritornato dall'interrogazione
La nuova versione dei Reporting Services (la 2008, oggi in versione CTP) aggiunge una seconda vista (ExecutionLog2) che risolve direttamente per noi il join tra le tabelle ExecutionLogStorage e Catalog per poter visualizzare non l'identificativo del report, quanto il suo path (folder e nome).
Un esempio di interrogazione (con controllo di versione del'istanza) potrebbe essere simile a:
DECLARE @major INT
IF EXISTS (SELECT name
FROM sys.databases
WHERE name = N'ReportServer')
begin
SELECT @major = LEFT (cast(SERVERPROPERTY('ProductVersion') as varchar(20)),
CHARINDEX( '.', cast(SERVERPROPERTY('ProductVersion') as varchar(20))) -1)
if (@major = 10)
begin
/* SQL Server 2008 */
select ReportPath, TimeDataRetrieval, TimeProcessing, TimeRendering,
Format, ByteCount, [RowCount], timeStart
from ReportServer..ExecutionLog2
order by timeStart
end
else
begin
/* SQL Server 2005 */
select C.path, TimeDataRetrieval, TimeProcessing, TimeRendering,
Format, ByteCount, [RowCount], timeStart
from ReportServer..ExecutionLog E
join ReportServer..Catalog C on C.ItemID = E.ReportID
order by timeStart
end
end
else
begin
print 'Database ReportServer non trovato'
end
Come al solito, se siamo curiosi di vedere come รจ costruita la vista, possiamo utilizzare la stored procedure di sistema sp_helptext, ad esempio in questo modo:
use reportServer
go
exec sp_helptext 'ExecutionLog'