2015-12-17 19 views
5

Sto cercando di ottimizzare un report che utilizza più stored procedure sulla stessa tabella. Sfortunatamente, ogni procedura sta leggendo milioni di record e aggregando i risultati. È una lettura molto intensa per un report, ma ogni procedura memorizzata è ottimizzata per essere eseguita abbastanza velocemente all'interno di SSMS.SSRS esegue più query contemporaneamente?

È possibile eseguire ciascuna stored procedure e ottenere un set di risultati entro 10-20 secondi. Quando li metto tutti in un report all'interno di SSRS, il report scade.

Esiste un totale di 4 parametri per procedura memorizzata. Tutti puntano alla stessa tabella, semplicemente aggregando i dati in modi diversi. Gli indici su quelle tabelle sono in linea con la query. È basato sul tempo, sull'utente e sulla sola dimensione che uso per COUNT() sia DISTINCT che NONDISTINCT.

Penso che il problema sia il fatto che SSRS sta eseguendo 4 procedure contemporaneamente sulla stessa tabella anziché una dopo l'altra. È vero? In tal caso, è comunque necessario garantire che SSRS non li esegua in parallelo?

La mia unica opzione è quella di creare una tabella di riepilogo che è già pre-registrata. Quindi basta eseguire il report su quella tabella. Altrimenti, immagino che sia possibile anche il param fiutamento.

+0

Si può simulare l'attività in un ambiente non prod e eseguire una traccia del profilo? Questo ti direbbe cosa sta funzionando contemporaneamente. Un'altra opzione è quella di aggiornarlo regolarmente, in modo che il report sia pronto per l'uso. –

+1

Ho visto situazioni in cui il passaggio di rendering è il pezzo della pipeline che richiede molto tempo ed è responsabile del timeout. Non sto dicendo che ciò si sta verificando nel tuo caso, sto solo dicendo che è una possibile spiegazione per l'esecuzione veloce in SSMS e molto lento in SSRS. –

+0

come aumentare il timeout http://geekswithblogs.net/ssrs/archive/2009/10/30/steps-to-resolve-ssrs-timeout-issues.aspx – niketshah90

risposta

6

Per impostazione predefinita, i set di dati in SSRS vengono eseguiti in parallelo.

Se tutti i set di dati si riferiscono alla stessa origine dati, allora si può configurare per l'esecuzione serializzato dei set di dati su una singola connessione in questo modo:

  • aprire la finestra di origine dati in report designer
  • garantire che il casella Uso Transazione singola è selezionata

Una volta che sia selezionata, set di dati che utilizzano la stessa sorgente di dati non sono eseguite in parallelo.

Spero che questo risolva il tuo problema.

+1

Grazie. Non l'ho visto. Sfortunatamente, questo lo ha reso più lento. Ho appena eseguito tutte e 4 le procedure in SSMS per un giorno per uno dei parametri e è tornato in 7 secondi. Dovrebbe essere solo la restituzione di 4 righe a SSRS. Quando uso questa modifica, si verifica un timeout. Non ho idea del perché ... SSMS è di 7 secondi. Ma questa è una risposta giusta indipendentemente dal mio problema di prestazioni, che probabilmente non è dovuto a questa opzione. – Fastidious

+0

Il fatto che vengano restituite solo 4 righe annulla il suggerimento che ho fatto in un precedente commento riguardante il tempo di rendering. Sarei grato per l'accettazione ma se non capisco. –

+0

Sì, nessun problema. – Fastidious

Problemi correlati