Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

800
Views
Error intermitente 258 de la aplicación Azure Kubernetes .NET Core a Azure SQL Database

Estamos ejecutando una aplicación .NET Core 3.1 en un clúster de Kubernetes. La aplicación se conecta a una base de datos Azure SQL mediante EF Core 3.1.7, con Microsoft.Data.SqlClient 1.1.3.

En momentos aparentemente aleatorios, recibiríamos el siguiente error.

 ---> System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (258): Unknown error 258 at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParserStateObject.ThrowExceptionAndWarning(Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error) at System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync() at System.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket() at System.Data.SqlClient.TdsParserStateObject.TryPrepareBuffer() at System.Data.SqlClient.TdsParserStateObject.TryReadByte(Byte& value) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) at System.Data.SqlClient.SqlCommand.ExecuteScalar()

Aunque parezca aleatorio, definitivamente sucede más a menudo bajo cargas más pesadas. Según mi investigación, parece que este tiempo de espera específico está relacionado con el tiempo de espera de la conexión en lugar del tiempo de espera del comando. Es decir, el cliente no puede establecer ninguna conexión. Esta no es una consulta que está agotando el tiempo de espera.

Posibles causas raíz que hemos eliminado:

  • Capacidad de Azure SQL Server: el comportamiento se observa ya sea que ejecutemos 4 o 16 vCPU. Azure Support también confirmó que no hay problemas en los registros. Esto incluye la cantidad de conexiones abiertas, que es solo alrededor de 50. También realizamos pruebas de carga desde otras conexiones y el servidor se mantuvo bien.
  • Versiones de Microsoft.Data.SqlClient: hemos estado ejecutando la versión 1.1.3 y este comportamiento solo comenzó hace una semana (2021-03-16).
  • Capacidad de la red: estamos alcanzando un máximo de alrededor de 1-2 MB/s en esta etapa, que es bastante peatonal.
  • Escalamiento de Kubernetes: no hay correlación entre la ocurrencia de los eventos y cuándo escalamos más pods.
  • Problemas de la cadena de conexión: nuestro sistema solía funcionar bien, pero a pesar de eso, cambiamos algunas configuraciones mencionadas en otros artículos para ver si el problema no se resolvía por sí solo. Marte está deshabilitado. No podemos deshabilitar la agrupación de conexiones. Tenemos TrusServerCertificate establecido en verdadero. Esta es la cadena de conexión actual: Server=tcp:***.database.windows.net,1433;Initial Catalog=***;Persist Security Info=False;User ID=***;Password=***;MultipleActiveResultSets=False;Encrypt=True;Connection Timeout=60;TrustServerCertificate=True;

Actualización 1: según lo solicitado, un ejemplo de dos tiempos de espera que acaban de ocurrir. Es domingo, por lo que el tráfico es extremadamente bajo. La utilización de la base de datos (CPU, Mem, IO) se encuentra entre el 2 y el 6 %.

 Microsoft.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (258): Unknown error 258 at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at Microsoft.Data.SqlClient.TdsParserStateObject.ThrowExceptionAndWarning(Boolean callerHasConnectionLock, Boolean asyncClose) at Microsoft.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error) at Microsoft.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync() at Microsoft.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket() at Microsoft.Data.SqlClient.TdsParserStateObject.TryPrepareBuffer() at Microsoft.Data.SqlClient.TdsParserStateObject.TryReadByte(Byte& value) at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at Microsoft.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at Microsoft.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest) at Microsoft.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest, String transactionName, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest) at Microsoft.Data.SqlClient.SqlInternalConnection.BeginSqlTransaction(IsolationLevel iso, String transactionName, Boolean shouldReconnect) at Microsoft.Data.SqlClient.SqlConnection.BeginTransaction(IsolationLevel iso, String transactionName) at Microsoft.Data.SqlClient.SqlConnection.BeginDbTransaction(IsolationLevel isolationLevel) at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.BeginTransaction(IsolationLevel isolationLevel) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)

También recibimos errores en el verificador de estado de nuestra base de datos cuando usamos este comando: Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.CanConnect()

El seguimiento de la pila anterior es el problema que estamos tratando de resolver en comparación con este seguimiento de la pila debajo del tiempo de espera de la consulta SQL.

 Microsoft.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (258): Unknown error 258 at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at Microsoft.Data.SqlClient.SqlDataReader.TryConsumeMetaData() at Microsoft.Data.SqlClient.SqlDataReader.get_MetaData() at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted) at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean isAsync, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry, String method) at Microsoft.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior)
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

El problema era un problema de infraestructura en Azure .

Hay un problema conocido en Azure Network en el que se pierde la concesión de dhcp cada vez que se conecta/desconecta un disco en algunas flotas de máquinas virtuales. Hay una solución que se está implementando en este momento en las regiones. Verificaré cuándo se publicará la actualización de estado de Azure para esto.

El problema desapareció, por lo que parece que la solución se ha implementado globalmente.

Para cualquier otra persona que tenga este problema en el futuro, puede identificarlo estableciendo una conexión SSH en el nodo (no en el pod). Haga un ls -al /var/log/ e identifique todos los archivos syslog y ejecute el siguiente grep en cada archivo.

 cat /var/log/syslog | grep 'carrier'

Si tiene mensajes de Operador Lost carrier y Gained carrier en el registro, hay algún tipo de problema de red. En nuestro caso fue el arrendamiento de DHCP.

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!