Wir hatten ein Problem mit einem Codeblock, der angesichts langsamer Datenbanken schlecht reagiert (bei einem Abfrage-Timeout wird das Bett kaputt gemacht). Wir haben einen Patch erstellt und führen ihn gerade durch die Regression.
Wir können keine Auszeit bekommen. Ich habe eine Transaktion aus SQL Mgmt Studio geöffnet und jede Zeile aktualisiert, um sie zu sperren, aber das führt nicht zu einer Zeitüberschreitung bei INSERTs (was ich brauche).
Kann ich über T-SQL problemlos eine Sperre auf Tabellenebene erhalten? Oder muss ich im Meister herumspielen? Oder kann ich das Timeout einfach erzwingen, ohne es zu sperren? Jede Eingabe wird geschätzt.
quelle
Sie können Ihrem SQL-Code einfach sagen, dass er eine Minute warten soll, bevor er zurückkehrt:
quelle
Auf der anderen Seite: Wenn die Verbindung konfigurierbar ist, reduzieren Sie das Zeitlimit für die Verbindungszeichenfolge auf 1 Sekunde - das macht es einfacher. Füllen Sie die Tabelle mit Unmengen von Daten und lassen Sie 3 andere Prozesse in einer Schleife drehen, um Teile dieser Tabelle mit einer Transaktion um die Schleife zu aktualisieren. Ändern Sie nicht die von der App aufgerufene tatsächliche Prozedur (Injizieren von Waitfor). Das macht einen Integrationstest ungültig.
Dies ist jedoch eine Fallstudie zugunsten von Unit-Tests und Abhängigkeitsinjektionen. Einige Dinge sind nur schwer zu integrieren. Unit Test + Abhängigkeitsinjektion .
Dies ist eine "Abhängigkeits" -Injektion. Der Entwickler kann die Abhängigkeit in die Datenbank einfügen und etwas ersetzen, das das Verhalten einer Abhängigkeit simuliert. Gut für alle Datenbanktests. Wenn der Komponententest eingerichtet ist, wissen Sie, dass das Update genau das tut, was es sollte, aber Sie benötigen noch einen Integrationstest. In diesem Fall kann es sich besser auf die Regression konzentrieren - was bedeutet, dass beim Testen nichts anderes beschädigt wurde und die Funktion weiterhin funktioniert.
Sie haben Ihren Patch bereits erstellt, daher ist meine Antwort wohl zu spät.
quelle
Schauen Sie sich diesen Blog-Beitrag an. Grundsätzlich hat SQL Server keine Abfragezeitlimits. Clients erzwingen möglicherweise ein SQL-Timeout, die Engine selbst jedoch nicht.
http://blogs.msdn.com/khen1234/archive/2005/10/20/483015.aspx
quelle