[RS] ReportServer, execution log, catalog e performance

Published 08 aprile 08 11.24 | abenedetti

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

image

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'

Comments

# Il blog di Andrea Benedetti said on aprile 16, 2008 09.27 :

Titolo strano? Sicuramente si... L'intenzione è quella di suscitare l'interesse per leggere le

This Blog

Syndication