2009-03-13 13 views
21

Sto lavorando a un progetto in cui stiamo pensando di utilizzare SQLCacheDependency con SQL Server 2005/2008 e ci chiediamo come ciò influirà sulle prestazioni del sistema.Domande relative alle prestazioni per la dipendenza dalla cache SQL

Così abbiamo state chiedendo le seguenti domande

Può il numero di oggetti SqlCacheDependency (notifiche di query) avere un effetto negativo sulle prestazioni di SQL Server cioè su inserire, aggiornare e cancellare le operazioni su tabelle interessate?

Quale effetto (prestazioni) sarebbero, ad esempio, 50000 notifiche di query diverse su una singola tabella in SQL Server 2005/2008 sull'inserimento e l'eliminazione su tale tabella.

Esistono raccomandazioni su come utilizzare SQLCacheDependencies? Qualche cosa da fare e cosa non fare? Abbiamo trovato alcune informazioni su Internet ma non abbiamo trovato informazioni sulle implicazioni di rendimento.

Se c'è qualcuno qui che ha alcune risposte a queste domande sarebbe bello.

+0

Hai trovato qualche risposta? Mi piacerebbe anche conoscere una risposta a questo. – niaher

+0

Mi rammarico di quanto stantia sia diventata questa domanda, ma il consenso sul progetto era di seguire un'altra strada, quindi non abbiamo mai avuto risultati chiari. Tuttavia, quello che ho letto nelle risposte qui sotto contiene tutte informazioni importanti su questi argomenti, non penso di poter assegnare molte risposte corrette perché penso che tutte le risposte fino ad oggi siano corrette anche se non ho alcun risultato rinforza questa sensazione istintiva. –

risposta

1

This page sembra avere alcune buone informazioni sul setup di quale tecnica usare bene (garantito che l'ho appena scremato).

+2

Sì, queste sono istruzioni per l'impostazione della dipendenza della cache, ma non è questo il problema. La domanda riguarda la penalizzazione delle prestazioni per le operazioni SQL quando le richieste di chache sono numerose. Questo articolo purtroppo non ha alcuna informazione a riguardo. :-( –

4

SQLCacheDependency viene implementato come vista indicizzata e ogni volta che la tabella viene modificata, questo indice di visualizzazioni viene modificato. così tante viste (oggetti SQLCacheDependency) sulla stessa tabella significano un bel colpo per le modifiche. tuttavia se si dispone di 1 vista (oggetto SQLCacheDependency) per tabella non si dovrebbero avere problemi.

la notifica della cache modificata è asincrona e viene attivata quando il server dispone di risorse.

+0

Dato che il progetto riguardava più connessioni simultanee alle tabelle che potrebbero aver violato questa "buona pratica" che hai esposto, e sono incline a credere che tu abbia ragione nella tua valutazione. –

1

Tutto quello che posso fornire è una prova aneddotica per le prestazioni, ma usiamo SqlCacheDependency come una sorta di "soluzione di messaggistica" per una grande applicazione aziendale che elabora nell'ordine di diecimila messaggi all'ora.

L'architettura di base è che la nostra azienda utilizza Perforce per il controllo del codice sorgente e disponiamo di un "servizio di sottoscrizione" che riceve i messaggi da una chiamata al servizio web trigger che viene richiamato su ogni commit p4 e inserisce un record in un database SQL. La nostra applicazione ha l'impostazione delle dipendenze per inviare notifiche di sottoscrizione per ogni più probabile che influisce su un ramo o percorso che stai monitorando.

La prestazione è soddisfacente. Trigger viene eseguito nell'ordine di 200 ms e non abbiamo mai avuto un reclamo sulla latenza di inoltro dei messaggi agli utenti finali.

Come sempre, il tuo chilometraggio può variare.

2

Hai ragione, non molte informazioni su questo è prevista, ma c'è una frase relativa alla tua domanda in questa pagina http://msdn.microsoft.com/en-us/library/ms178604%28VS.80%29.aspx

"Le operazioni di database associati della cache SQL dipendenza sono semplici e quindi non comportano un pesante costo di elaborazione sul server. "

Spero che questo ti aiuti anche se la tua domanda è già un po 'vecchia.

6

La dipendenza della cache SQL che utilizza il meccanismo di polling non deve essere un carico sul server sql o sul server delle applicazioni.

consente di vedere ciò che tutti i passaggi sono lì per SqlCacheDependency al lavoro e analizzarli:

  1. database è abilitato per SqlCacheDependency.
  2. Una tabella dice che 'Dipendente' è abilitato per sqlcachedependency. (può essere un numero qualsiasi di tabelle)
  3. Web.config viene aggiornato per abilitare sqlcachedependency.
  4. La pagina in cui si utilizza la dipendenza della cache SQL è configurata. questo è tutto.

Internamente:

  • punto 1. crea una tabella 'ASPnet_sqlcachetablesforchangenotification' nel database che memorizza il nome della tabella 'dei dipendenti' per i quali è abilitato SqlCacheDependency. e aggiungere anche alcune stored procedure.
  • passaggio 2. inserisce una voce di tabella 'Employee' nella tabella 'ASPnet_sqlcachetablesforchangenotification'. Crea anche un trigger di cancellazione dell'aggiornamento degli insert su questa tabella 'Employee'.
  • passaggio 3. abilita l'applicazione per sqlcachedependency fornendo connectiontring e polltime.

ogni volta che si modifica la tabella 'Dipendente', viene attivato il trigger che inturn aggiorna la tabella 'ASPnet_sqlcachetablesforchangenotification'. Ora l'applicazione esegue il polling del database, dice ogni 5000 ms e controlla eventuali modifiche alla tabella 'ASPnet_sqlcachetablesforchangenotification'. se ci sono cambiamenti, le rispettive cache vengono rimosse dalla memoria.

Il grande vantaggio del caching combinato con la freschezza dei dati (i dati più importanti possono essere 5 secondi non aggiornati). Il sondaggio è curato da un processo in background con non dovrebbe essere un ostacolo di prestazioni. perché come si vede dall'elenco sopra riportato, l'attività richiede meno CPU.

Problemi correlati