ASP.NET NHibernate C # Timeout Ausgabe SQL server

Ich laufe eine Website mit ASP.NET und NHibernate. In letzter time wurde die Website in ein Problem ausgeführt, wo es ein SQL server Timeout Problem verursacht. Ich bin gekommen, um herauszufinden, dass das Problem mit einer NHibernate Query verwandt ist, die eine Tabelle in der database sperrt. Die Website wird nach 20 Minuten wiederherstellen oder wenn ich manuell alle Verbindungen auf der database erzwinge, um zu beenden.

Grundsätzlich habe ich versucht zu finden, welche Frage dieses Problem verursacht, aber leider nach vielen Monaten versucht, die Abfrage mit NHibernate Profiler zu finden, hatte ich keinen Erfolg. Das Problem tritt sehr selten auf, meist nur 1 – 2 mal pro Woche, was es noch schwieriger macht, herauszufinden, was die Abfrage verursacht, die den Tisch verriegelt. Ich habe .net Setup, um mir Fehlerprotokolle zu senden, wenn sie auftreten, dies hat mir geholfen zu vermeiden, dass die Seite von gesperrt ist, wenn sie abgefragt wird, weil ich in der Lage bin, alle SQL-Verbindungen zu löschen, dann wird die Website wiederhergestellt.

Lange Geschichte kurz, was ich brauche ist eine Band-Hilfe-Lösung, etwas, das vorübergehend für die Website arbeiten wird, während ich weiterhin versuchen, die schlechte Abfrage zu finden. Was ich tun möchte, ist, die timeüberschreitung von 20 Minuten auf etwas wie 2 – 5 Minuten zu ändern. Auf diese Weise beschränkt man, wie lange die Seite heruntergefahren wird, wenn diese schlechte Abfrage ausgeführt wird. In Anbetracht der Tatsache, dass die schlechte Abfrage nur 1 – 2 mal pro Woche passiert, floss ich das, wäre eine begrenzte Ausfallzeit.

Das einzige Problem ist, ich weiß nicht, ob dies ist etwas SQL server ist imposing oder wenn dies ist etwas .net oder NHibernate ist imposant. Im Grunde, was ich beziehe, ist die 20 Minuten, dass die Verbindung endgültig gelöscht wird, nachdem die schlechte Abfrage ausgeführt wurde. Wer weiß, was diese 20 Minuten ist und wo es gesetzt werden kann? Ich lehne mich auf dieses wahrscheinlich ein NHibernate Timeout irgendeiner Art, aber ich weiß nicht, wie man es setzt.

    Das einzige, was 20 min ist, ist die Leerlauf-Timeout-Einstellung auf dem Anwendungspool, auf dem die Seite läuft. Also nach 20 min Inaktivität wird IIS den ganzen Arbeiterprozess recyceln und alles funktioniert wieder. So können Sie diese Einstellung auf dem Anwendungspool auf 2-5 min ändern.

    Nun, von dem, was du sagst, es sieht so aus, als hättest du keine Transaktion richtig und es läuft bis zu einem Timeout. Also, was Sie tun müssen, um zu identifizieren, welche Code mit einem Debugger an die IIS-Website angehängt ist und schauen Sie sich die Threads zu sehen, wo sind sie stecken.

    Dies ist ein bisschen fortgeschritten, aber wenn Sie folgen, werden Sie in der Lage zu sehen, was ist die Verriegelung Ihrer database. Wenn du ein visuelles Studio auf dem IIS-server hast, ist es einfacher, da die Debugging-Umgebung vertrauter ist.