Lógica de reinicio de la database SQL Azure

Implementé el siguiente código para manejar la lógica de rebash INSERT / UPDATE con retroceso exponencial al escribir en una database de Azure.

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."); } 

Sin embargo, ¿debería considerar aplicar la lógica de rebash para mis lecturas de database también? ¿O sería suficiente el método SqlCommand.CommandTimeout ()? La mayoría de mis lecturas se instituyen utilizando el siguiente código:

 Dim myDateAdapter As New SqlDataAdapter(mySqlCommand) Dim ds As New DataSet myDateAdapter.Fill(ds, "dtName") 

Es difícil saber qué tipo de errores transitorios ocurrirán en un entorno de producción con Azure, así que estoy tratando de hacer la mayor mitigación posible ahora.

Creo que los rebashs serán parte de las operaciones de la Base de datos SQL de Windows Azure en general.

En lugar de implementar una solución personalizada, ¿ha mirado el bloque de aplicación de event handling fallas transitorias publicado por Microsoft Patterns and Practices, específicamente para la database SQL?

Las fallas de connection en SQL Azure son comunes. Esto se debe a que su aplicación creará un grupo de conexiones, pero mientras su lado cree que estas conexiones han terminado, Azure podría terminar con ellas y usted nunca lo sabrá.

Lo hacen por razones válidas, como una instancia particular que se ha sobrecargado y están transfiriendo conexiones a otra. Con los serveres SQL internos, en general nunca se presenta este problema porque sus serveres SQL están siempre disponibles y dedicados para su uso.

Como ejemplo, recibo aproximadamente 5 fallas de connection con SQL Azure en aproximadamente 100.000 consultas de bases de datos en un día.

Va a suceder con SQL Azure. Si está utilizando ADO.NET, entonces la sugerencia de David de manejo transitorio de fallas es el path a seguir.

Si va a utilizar Entity Framework, hay buenas y malas noticias: event handling fallas transitorias con SQL Azure usando Entity Framework

Implementé los methods de extensión SqlConnection y SqlCommand proporcionando lógica de rebash. Está disponible en NuGet .