2009-03-11 6 views
1

Wir haben eine Seite, die eine gespeicherte Suchprozedur aufruft, die SQL Server 2005 FTS intern verwendet. Wenn die Anwendung für 10-15 Minuten inaktiv bleibt, überschreitet der erste konsequente Aufruf der gespeicherten Prozedur das Zeitlimit. Alle nachfolgenden Anrufe funktionieren.SQL Server FTS-Timeoutfehler in ASP.Net, nachdem Anwendung seit einiger Zeit inaktiv ist

Gibt es eine Möglichkeit, dies zu verhindern? Wir möchten nicht, dass der erste Benutzer eine Zeitüberschreitung erhält, und wir möchten auch unseren Code nicht ändern.

Mit freundlichen Grüßen

Antwort

2

Ich hatte ein ähnliches Problem, naja das fts timeout ist ähnlich, der Rest ist anders (ich benutze keine gespeicherte proc oder eine Webseite), nicht dass ich denke, dass es wichtig ist. Die allererste Suchanfrage des Tages würde mit einem Timeout-Fehler fehlschlagen und nachfolgende Abfragen wären erfolgreich.

Ich stolperte über diesen Link auf reddit heute: http://support.microsoft.com/?scid=kb%3Ben-us%3B915850&x=15&y=8.

Wenn Ihr SQL Server keinen Zugriff auf das Internet hat, können Sie eine Zeitüberschreitung erhalten. Das Ausführen des Befehls (unten), der bei diesem Link gefunden wurde, löste das Problem für mich vollständig.

sp_fulltext_service 'verify_signature', 0; GO

Sie möchten den vollständigen Artikel lesen, bevor Sie dies auf Ihrem Server tun.

Hoffe, das hilft.

0

Ich wäre überrascht, wenn eine gespeicherte Prozedur auf dem Datenbankserver läuft der Leerlaufzeit Ihrer Web-Anwendung bewusst waren. Fremde Dinge sind passiert (wenn auch nicht in letzter Zeit).

Ich schlage vor, Sie testen diese "in Rohform". Führen Sie in SSMS die gespeicherte Prozedur aus, warten Sie 15 Minuten und führen Sie sie dann erneut aus. Überprüfen Sie, ob der SP fehlschlägt.

Andere Fragen wären: Rufen Sie Dispose auf der SqlConnection ordnungsgemäß auf? Verwenden Sie Identitätswechsel? Wurde Ihre Verbindungszeichenfolge geändert, um das Verbindungs-Pooling zu adressieren? Wie wird der SP verwendet? Ein DataSet füllen? Datenquellensteuerung? Wenn Letzteres aktiviert ist, ist Caching aktiviert?

+0

Wir verwenden LINQToSQL und der Datenkontext ist in einem using() {} -Block verpackt. –

+0

Kein Caching wird verwendet. Wir binden die Ergebnisse nur an eine Listenansicht. –

0

Es scheint, dass der Volltextkatalog für eine Datenbank von SQL Server entladen wird, wenn es für einige Zeit nicht verwendet wird (10-15 Minuten in unserem Fall).
Die einzigen möglichen Lösungen sind:
1. Führen Sie einen Warmup-Job aus, um sicherzustellen, dass der Index nicht aus dem Speicher gelöscht wird. Könnte entweder bei SQL oder bei ASP.Net gemacht werden.
2. Erhöhen Sie das Zeitlimit für die Methode, die die gespeicherte Prozedur für die vollständige Textsuche auf einen höheren Wert aufruft.

Verwandte Themen