2015-05-19 22 views
6

Sto sviluppando un sito Web ASP.net MVC 5 e sto utilizzando Hangfire per pianificare alcune attività, in questo caso solo una ogni 3 minuti. So per certo che bastano pochi secondi per eseguire tale attività (e la query DB ad essa associata).Hangfire continua a eseguire query SQL anche se inattive

Il problema che sto affrontando è che sembra come se Hangfire abbia il mio SQL Server che esegue "qualcosa" (non so cosa) e posso vedere in SQL Server Activity Monitor che la mia CPU rimane sempre a 20 +% di utilizzo e ci sono operazioni di I/O del database a (media di 1,2 MB/sec). So che è Hangfire perché quando non lo inizializzo, il Monitor attività (e Task Manager) non mostra alcun sovraccarico. Sono persino arrivato a rimuovere tutte le attività pianificate e tutto ciò che Hangfire può eseguire e il problema persiste.

Non riesco ad andare in produzione in questo modo perché temo possa causare problemi di prestazioni. Qualsiasi aiuto sarà più apprezzato, grazie in anticipo

+0

Qualsiasi attività fallita per tentativi di riprovare? – JOBG

+0

Solo uno, molto tempo fa (5 mesi), ma nient'altro, ha fallito prima che notassi una penalizzazione delle prestazioni su SQL – Luiso

risposta

4

Il cruscotto non mostra nulla? Nessun CRON/lavori ricorrenti? Utilizzo dell'autorizzazione di Dashboard? Forse una domanda contro utente registrato/connesso? L'importo dei dati sembra dubbio ma chi lo sa. Sto usando Hangfire da solo. Sicuramente controllerà il traffico domani prima cosa!

Modifica: Scusate ragazzi, doveva essere un commento. IPhone dannatamente : -/

Aggiunto: Ho studiato un po 'sul mio server con MVC app + hangfire. In effetti il ​​mio utilizzo della CPU è anche del 20-25%. Così ho cercato un adeguato app monitor, installato un po 'ingegnoso strumento chiamato "SQLRanger" e ha scoperto che la query superiore di gran lunga è questa:

update top (1) HangFire.JobQueue set FetchedAt = GETUTCDATE() 
output INSERTED.Id, INSERTED.JobId, INSERTED.Queue 
where FetchedAt is null 
and Queue in (@queues1) 

Così è fondamentalmente hangfire controllo per i lavori in attesa di essere eseguite. Finora non ho riscontrato problemi di prestazioni o ritardi.

Addendum: Il problema è ovviamente causato - e risolto - regolando l'intervallo di polling, vedere la rispettiva sezione http://docs.hangfire.io/en/latest/configuration/using-sql-server.html

L'intervallo predefinito è di 15 secondi, che garantisce rapida elaborazione dei processi ma anche il carico del server costante. Nelle applicazioni non critiche al tempo, un intervallo più alto (1 minuto, 5 minuti ecc.) Dovrebbe essere OK. Sapere cosa è necessario e reagire: necessità di un'elaborazione del lavoro immediata o di un basso carico del server? Se il primo, mantenere l'intervallo breve e pensare di upsize il server, se necessario; se quest'ultimo, aumentare l'intervallo al minimo accettabile più alto.

Ho bisogno del primo e terrò d'occhio il server se può sopportare il carico.

+0

Dashboard è pulito, mostrando solo la grafica delle prestazioni – Luiso

+0

Penso che debba essere qualcosa del genere, qualche tipo di query ricorrenti ma non sono stato in grado di vedere La query, ho cercato anche in SQL ma inutilmente fino ad ora – Luiso

+0

Vedere informazioni aggiunte sopra – LocEngineer

Problemi correlati