SQL Azure-Datenbank mit retry-Logik
Implementierte ich den folgenden code für die Handhabung von INSERT - /UPDATE retry-Logik mit exponentiellem backoff, beim schreiben einer Azure-Datenbank.
static SqlConnection TryOpen(this SqlConnection connection)
{
int attempts = 0;
while (attempts < 5)
{
try
{
if (attempts > 0)
System.Threading.Thread.Sleep(((int)Math.Pow(3, attempts)) * 1000);
connection.Open();
return connection;
}
catch { }
attempts++;
}
throw new Exception("Unable to obtain a connection to SQL Server or SQL Azure.");
}
Jedoch sollte ich in Erwägung ziehen, wiederholen Sie die Logik für meine Datenbank liest, wie gut? Oder würde die SqlCommand.CommandTimeout () - Methode ausreichen? Die meisten meiner Stücke sind eingeleitet mit dem folgenden code:
Dim myDateAdapter As New SqlDataAdapter(mySqlCommand)
Dim ds As New DataSet
myDateAdapter.Fill(ds, "dtName")
Es ist schwer zu wissen, welche Art von Transienten Fehlern in eine Produktionsumgebung mit Azure, so bin ich versucht zu tun, wie viel Klimaschutz wie möglich jetzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Wiederholungen sind Teil der Windows Azure SQL-Datenbank-Operationen im Allgemeinen.
Eher als Implementierung einer benutzerdefinierten Lösung, haben Sie schaute auf die transient fault handling application block veröffentlicht von Microsoft Patterns und Practices, speziell für die SQL-Datenbank?
Fehler bei der Verbindung SQL Azure üblich sind. Dies ist, weil Ihre Anwendung erstellen Sie einen Verbindungspool aber während Ihrer Seite glaubt, dass diese verbindungen werden über das Azure-beenden könnten Sie am Ende und werden Sie nie wissen.
Tun Sie dies aus triftigen Gründen, wie z.B. einer bestimmten Instanz geworden ist überlastet, und Sie sind die übertragung von verbindungen zu einem anderen. Mit in-house-SQL-Server, die Sie in der Regel nie das problem, weil der SQL-Server immer verfügbar sind und speziell für Ihre Nutzung.
Als ein Beispiel, bekomme ich über 5 Fehler bei der Verbindung mit SQL Azure auf rund 100.000 Datenbank-Abfragen in einem Tag.
Dass es passieren wird mit SQL Azure. Wenn Sie mit ADO.NET dann David ' s Vorschlag, die transient fault handling ist der Weg zu gehen.
Wenn du gehst zu verwenden, Entity Framework, es ist eine gute Nachricht und eine schlechte Nachricht: Transient Fault Handling mit Azure SQL mit Entity Framework
Habe ich umgesetzt
SqlConnection
undSqlCommand
Erweiterung Methoden bietet retry-Logik. Es ist verfügbar auf NuGet.