2015-05-19 9 views
6

Ich entwickle eine ASP.net MVC 5-Website und verwende Hangfire, um einige Aufgaben zu planen, in diesem Fall nur alle drei Minuten. Ich weiß in der Tat, dass es nur ein paar Sekunden dauert, um eine solche Aufgabe auszuführen (und die zugehörige DB-Abfrage).Hangfire führt SQL-Abfragen auch dann aus, wenn sie inaktiv sind

Das Problem, das mir gegenübersteht, ist, dass es scheint, als hätte Hangfire meinen SQL Server "etwas" ausgeführt (ich weiß nicht was) und ich kann im SQL Server Activity Monitor sehen, dass meine CPU immer bei 20 bleibt +% Nutzung und es gibt Datenbank-E/A-Operationen bei (1,2 MB/s Durchschnitt). Ich weiß, dass es Hangfire ist, denn wenn ich es nicht initialisiere, zeigt der Aktivitätsmonitor (und Task-Manager) keinen zusätzlichen Overhead. Ich bin sogar so weit gegangen, alle geplanten Aufgaben und alles, was Hangfire ausführen kann, zu entfernen, und das Problem bleibt bestehen.

Ich kann nicht so in die Produktion gehen, weil ich befürchte, dass es Leistungsprobleme verursachen könnte. Jede Hilfe wird am meisten geschätzt werden, danke im Voraus

+0

Fehlgeschlagene Aufgabe bei Wiederholungsversuchen? – JOBG

+0

Nur eine, vor langer Zeit (5 Monate), aber sonst nichts, es gescheitert, bevor ich irgendwelche Leistungsstrafen auf SQL – Luiso

Antwort

4

Das Armaturenbrett zeigt nichts? Keine CRON/wiederkehrende Jobs? Verwenden der Dashboard-Autorisierung? Vielleicht eine Abfrage gegen registrierte/angemeldete Benutzer? Datenmenge scheint zweifelhaft, aber wer weiß. Ich benutze Hangfire selbst. Werde morgen sicher morgen Verkehr überprüfen!

Edit: Sorry Jungs, sollte ein Kommentar sein. Darned iPhone. : -/

Hinzugefügt: Ich habe dies ein wenig auf meinem eigenen Server mit MVC app + Hangfire untersucht. In der Tat liegt meine CPU-Auslastung bei 20-25%. Also suchte ich nach einem geeigneten Monitor App installierte ein hübsches kleines Tool namens „SQLRanger“ und stellte fest, dass die Top-Abfrage bei weitem, ist dies:

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

So ist es im Grunde ist hangfire für Arbeitsplätze Überprüfung Warten durchgeführt werden. Bis jetzt habe ich jedoch keine Performance-Probleme oder Verzögerungen festgestellt.

Addendum: Das Problem wird offensichtlich verursacht - und behoben - durch das Abfrageintervall eingestellt wird, siehe den entsprechenden Abschnitt http://docs.hangfire.io/en/latest/configuration/using-sql-server.html

Das Standardintervall 15 Sekunden beträgt, die schnelle Verarbeitung von Jobs gewährleistet, sondern auch konstant Serverbelastung. In nicht zeitkritischen Anwendungen sollte ein höheres Intervall (1 Minute, 5 Minuten usw.) in Ordnung sein. Wissen, was Sie brauchen und darauf reagieren: Sie müssen in der Nähe von sofortiger Job-Verarbeitung oder geringer Serverlast sein? Wenn Ersteres, halten Sie das Intervall kurz und denken Sie darüber nach, den Server bei Bedarf zu vergrößern; Wenn Letzteres, das Intervall auf das höchste akzeptable Minimum erhöhen.

Ich brauche die ehemalige und werde den Server im Auge behalten, ob er die Last tragen kann.

+0

Dashboard ist sauber, nur die Performance-Grafiken zeigt – Luiso

+0

Ich denke, es muss so etwas sein, eine Art von wiederkehrenden Abfrage, aber ich habe nicht in der Lage, die Abfrage zu sehen, ich habe auch in SQL, aber bis jetzt vergeblich gesucht – Luiso

+0

Siehe Info oben – LocEngineer