Solución de problemas de conectividad y otros errores con Azure SQL Database y Azure SQL Managed Instance

Se aplica a:Azure SQL DatabaseAzure SQL Managed Instance

Cuando la conexión a Azure SQL Database o Azure SQL Managed Instance no se logra establecer, se reciben mensajes de error. El origen de estos problemas de conexión puede ser la reconfiguración, la configuración del firewall, el tiempo de expiración de conexión, la información de inicio de sesión incorrecta o un error al aplicar procedimientos recomendados e instrucciones de diseño durante el proceso de diseño de la aplicación. Además, si se alcanza el límite máximo en algunos recursos de Azure SQL Database o Instancia administrada de SQL, no será posible volver a establecer la conexión.

Nota

Puede usar la Comprobación de conectividad de Azure SQL para detectar y corregir una amplia variedad de errores de conectividad en entornos de Azure SQL Database, Azure SQL Managed Instance y Azure Synapse Analytics.

Mensajes de error transitorios (40197, 40613 y otros)

La infraestructura de Azure ofrece la posibilidad de volver a configurar dinámicamente servidores cuando surgen cargas de trabajo pesadas en el servicio de SQL Database. Este comportamiento dinámico podría dar lugar a que el programa cliente perdiera su conexión a la base de datos o la instancia. Este tipo de condición de error se conoce como error transitorio. Los eventos de reconfiguración de la base de datos se producen debido a un evento planeado (por ejemplo, una actualización de software) o a un evento no planeado (por ejemplo, el bloqueo de un proceso o un equilibrio de carga). La mayoría de los eventos de reconfiguración son generalmente de corta duración y se completarán en menos de 60 segundos. Sin embargo, ocasionalmente estos eventos pueden tardar más tiempo de finalizar, por ejemplo, cuando una transacción grande produce una recuperación de larga duración. En la tabla siguiente se enumeran varios errores transitorios que las aplicaciones pueden recibir al conectarse a Azure SQL Database.

Lista de códigos de error transitorios

Código de error severity Descripción
926 14 La base de datos "replicatedmaster" no se puede abrir. Tiene la marca SUSPECT para recuperación. Para obtener más información, vea el registro de errores de SQL Server.

Este error puede incluirse en el registro de errores de SQL Managed Instance, por un breve período de tiempo, durante la última fase de una reconfiguración, mientras la antigua base de datos principal cierra su registro.
Otros escenarios no transitorios que implican este mensaje de error se describen en la documentación de errores de MSSQL.
4060 16 No se puede abrir la base de datos "%.*ls" solicitada por el inicio de sesión. Error de inicio de sesión. Para obtener más información, consulte los errores de 4000 a 4999.
40197 17 Error en el servicio al procesar la solicitud. Inténtelo de nuevo. Código de error %d.

Recibirá este error cuando el servicio esté inactivo debido a actualizaciones de software o hardware, errores de hardware u otros problemas de conmutación por error. El código de error (%d) incrustado en el mensaje de error 40197 proporciona información adicional sobre el tipo de error o conmutación por error que se ha producido. Algunos ejemplos de los códigos de error que se incrustan dentro del mensaje de error 40197 son 40020, 40143, 40166 y 40540.

Al volver a conectarse, se conectará automáticamente a una copia correcta de su base de datos. La aplicación debe detectar el error 40197, registrar el código de error incrustado (%d) dentro del mensaje para solucionar problemas y volver a conectarse a SQL Database hasta que los recursos estén disponibles; entonces, la conexión se establecerá de nuevo. Para obtener más información, vea Errores transitorios.
40501 20 El servicio está ocupado actualmente. Vuelva a intentar la solicitud después de 10 segundos. Identificador de incidente: %ls. Código: %d. Para más información, vea lo siguiente:
Límites de recursos de servidores SQL lógicos.
Límites basados en DTU para bases de datos únicas.
Límites basados en DTU para grupos elásticos.
Límites basados en núcleos virtuales para bases de datos únicas.
Límites de recursos para grupos elásticos que usan el modelo de compra de núcleo virtual
Límites de recursos de Azure SQL Managed Instance.
40613 17 La base de datos '%.*ls' en el servidor '%.*ls' no está disponible actualmente. Vuelva a intentar la conexión más tarde. Si el problema continúa, póngase en contacto con el servicio de soporte al cliente y proporcióneles el identificador de seguimiento de sesión de '%.*ls'.

Este error puede producirse si ya existe una conexión de administrador dedicada (DAC) establecida en la base de datos. Para obtener más información, vea Errores transitorios.
49918 16 No se puede procesar la solicitud. No hay suficientes recursos para procesar la solicitud.

El servicio está ocupado actualmente. Vuelva a intentar realizar la solicitud más tarde. Para más información, vea lo siguiente:
Límites de recursos de servidores SQL lógicos.
Límites basados en DTU para bases de datos únicas.
Límites basados en DTU para grupos elásticos.
Límites basados en núcleos virtuales para bases de datos únicas.
Límites de recursos para grupos elásticos que usan el modelo de compra de núcleo virtual
Límites de recursos de Azure SQL Managed Instance.
49919 16 No se puede procesar, crear ni actualizar la solicitud. Hay demasiadas operaciones de creación o actualización en curso para la suscripción "%ld".

El servicio está ocupado procesando varias solicitudes de creación o actualización para su suscripción o servidor. Actualmente las solicitudes están bloqueadas para la optimización de recursos. Consulte sys.dm_operation_status para ver las operaciones pendientes. Espere a que se completen las solicitudes de creación o actualización pendientes o elimine una de las solicitudes pendientes y vuelva a intentar la solicitud más tarde. Si las operaciones parecen estar bloqueadas, espere a que se completen otras operaciones en curso o cancélelas cuando sea posible. Por ejemplo, puede cancelar una copia de base de datos o la creación de una réplica geográfica eliminando la base de datos o la réplica que se está creando. Si no puede cancelar una operación aparentemente bloqueada, abra una incidencia de soporte técnico con Microsoft.
49920 16 No se puede procesar la solicitud. Hay demasiadas operaciones en curso para la suscripción "%ld".

El servicio está ocupado procesando varias solicitudes para esta suscripción. Actualmente las solicitudes están bloqueadas para la optimización de recursos. Consulta sys.dm_operation_status para el estado de la operación. Espere a que las solicitudes pendientes se hayan completado o elimine una de las solicitudes pendientes y vuelva a intentar la solicitud más tarde. Si las operaciones parecen estar bloqueadas, espere a que se completen otras operaciones en curso o cancélelas cuando sea posible. Por ejemplo, puede cancelar una copia de base de datos o la creación de una réplica geográfica eliminando la base de datos o la réplica que se está creando. Si no puede cancelar una operación aparentemente bloqueada, abra una incidencia de soporte técnico con Microsoft.
4221 16 No se pudo iniciar sesión en el secundario de lectura debido a una espera prolongada en HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONING. La réplica no está disponible para el inicio de sesión porque faltan las versiones de las filas de transacciones que estaban en proceso cuando se recicló la réplica. Se puede resolver el problema al revertir o asignar las transacciones activas en la réplica principal. Se pueden minimizar las repeticiones de esta condición al evitar escribir transacciones en la principal.
615 21 No se encontró el id. de base de datos %d con el nombre '%.*ls'. Código de error 615.
Esto significa que la caché en memoria no está sincronizada con la instancia de SQL Server y que las búsquedas recuperan el id. de base de datos obsoleto.

Los inicios de sesión de SQL usan la caché en memoria para obtener la asignación de nombre de la base de datos a id. La caché debe estar sincronizada con la base de datos del back-end y actualizada siempre que se asocie y desasocie la base de datos de SQL Server.
Recibe este error cuando el flujo de trabajo de desasociación no puede limpiar la caché en memoria a tiempo y las búsquedas posteriores en la base de datos apuntan a un id. de base de datos obsoleto.

Intente la reconexión a SQL Database hasta que los recursos estén disponibles y la conexión se establezca de nuevo. Para obtener más información, vea Errores transitorios.

Pasos para resolver los problemas de conectividad transitorios

  1. Compruebe el panel de Estado de Microsoft Azure para comprobar si hay interrupciones conocidas que se hayan producido durante el tiempo en el que la aplicación informó de los errores.
  2. Para las aplicaciones que se conectan a un servicio en la nube, como Azure SQL Database, se deben prever eventos periódicos de reconfiguración e implementar la lógica de reintento para gestionar estos errores en lugar de mostrar los errores de la aplicación a los usuarios.
  3. Conforme una base de datos se acerca a sus límites de recursos, puede parecer un problema de conectividad transitorio. Consulte Límites de los recursos.
  4. Si los problemas de conectividad continúan, si el tiempo de detección del error por parte de la aplicación supera los 60 segundos o si el error se repite varias veces en un día determinado, realice una solicitud de soporte técnico a Azure; para ello, seleccione Obtener soporte en el sitio Soporte técnico de Azure .

Implementar lógica de reintento

Se recomienda encarecidamente que el programa cliente tenga lógica de reintento para poder tratar de restablecer una conexión después de dar tiempo a que se corrijan los errores transitorios. Se recomienda un retraso de 5 segundos antes del primer reintento. Si se vuelve a intentar después de un retraso de menos de 5 segundos, se correrá el riesgo de sobrecargar el servicio en la nube. Para cada intento siguiente el retraso debe aumentar exponencialmente, hasta un máximo de 60 segundos.

Para obtener ejemplos de lógica de reintento, vea:

Para más información sobre el control de errores transitorios en la aplicación, consulte Solución de problemas de errores de conexión transitorios en SQL Database.

Una explicación del período de bloqueo para clientes que usan ADO.NET está disponible en Grupos de conexión (ADO.NET).

El problema se produce si la aplicación no se puede conectar al servidor.

Para resolver este problema, pruebe los pasos (en orden) de la sección Pasos para solucionar problemas de conexión comunes.

No se detectó el servidor/instancia o no estaba accesible (errores 26, 40, 10053)

Error 26: Error al buscar el servidor especificado

System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections.(provider: SQL Network Interfaces, error: 26 – Error Locating Server/Instance Specified)

Error 40: No se pudo abrir una conexión al servidor

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

Error 10053: Error en el nivel del transporte al recibir los resultados del servidor.

10053: A transport-level error has occurred when receiving results from the server. (Provider: TCP Provider, error: 0 - An established connection was aborted by the software in your host machine)

Estos problemas se producen si la aplicación no se puede conectar al servidor.

Para resolver estos problemas, pruebe los pasos (en orden) de la sección Pasos para solucionar problemas de conexión comunes.

No se puede conectar al servidor por problemas de firewall

Error 40615: No se puede conectar a <nombredelservidor>

Para resolver este problema, configure un firewall en SQL Database con Azure Portal.

Error 5: No se puede conectar a <nombredelservidor>

Para resolver este problema, asegúrese de que el puerto 1433 está abierto para las conexiones salientes en todos los firewalls entre el cliente e Internet.

No se puede iniciar sesión en el servidor (errores 18456, 40531)

Error de inicio de sesión del usuario "<nombre de usuario>".

Login failed for user '<User name>'.This session has been assigned a tracing ID of '<Tracing ID>'. Provide this tracing ID to customer support when you need assistance. (Microsoft SQL Server, Error: 18456)

Para resolver este problema, póngase en contacto con el administrador de servicios para que le proporcione un nombre de usuario y una contraseña válidos.

Normalmente, el administrador de servicio puede usar los siguientes pasos para agregar las credenciales de inicio de sesión:

  1. Inicie sesión en el servidor mediante SQL Server Management Studio (SSMS).

  2. Ejecute la siguiente consulta SQL en la base de datos master para comprobar si el nombre de inicio de sesión está deshabilitado:

    SELECT name, is_disabled FROM sys.sql_logins;
    
  3. Si el nombre correspondiente está deshabilitado, habilítelo mediante la instrucción siguiente:

    ALTER LOGIN <User name> ENABLE;
    
  4. Si el nombre de usuario de inicio de sesión SQL no existe, edite y ejecute la siguiente consulta SQL para crear un inicio de sesión SQL:

    CREATE LOGIN <SQL_login_name, sysname, login_name>
    WITH PASSWORD = '<password, sysname, Change_Password>';
    GO
    
  5. En el Explorador de objetos de SSMS, expanda Bases de datos.

  6. Seleccione la base de datos para la que desea conceder permiso al usuario.

  7. Haga clic con el botón derecho en Seguridad y, después, seleccione Nuevo, Ususario.

  8. En el script generado con marcadores de posición (ejemplo que se muestra a continuación), reemplace los parámetros de plantilla siguiendo los pasos que se indican aquí y realice la ejecución:

    CREATE USER [<user_name, sysname, user_name>]
    FOR LOGIN [<login_name, sysname, login_name>]
    WITH DEFAULT_SCHEMA = [<default_schema, sysname, dbo>];
    GO
    
    -- Add user to the database owner role
    EXEC sp_addrolemember N'db_owner', N'<user_name, sysname, user_name>';
    GO
    

    también puede utilizar sp_addrolemember para asignar usuarios específicos a roles de base de datos específicos.

    Nota

    En Azure SQL Database, considere la sintaxis ALTER ROLE más reciente para administrar la pertenencia al rol de la base de datos.

Para más información, consulte Administración de bases de datos e inicios de sesión en Azure SQL Database.

Errores de tiempo de espera de conexión agotado

System.Data.SqlClient.SqlException (0x80131904): Tiempo de espera de conexión agotado

System.Data.SqlClient.SqlException (0x80131904): Connection Timeout Expired. The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement. This could be because the pre-login handshake failed or the server was unable to respond back in time. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=3; handshake=29995;

System.Data.SqlClient.SqlException (0x80131904): Tiempo de espera agotado

System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

System.Data.Entity.Core.EntityException: Error del proveedor subyacente en [Abierto]

System.Data.Entity.Core.EntityException: The underlying provider failed on Open. -> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. -> System.ComponentModel.Win32Exception: The wait operation timed out

No se puede conectar a <nombre del servidor>.

Cannot connect to <server name>.ADDITIONAL INFORMATION:Connection Timeout Expired. The timeout period elapsed during the post-login phase. The connection could have timed out while waiting for server to complete the login process and respond; Or it could have timed out while attempting to create multiple active connections. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=231; handshake=983; [Login] initialization=0; authentication=0; [Post-Login] complete=13000; (Microsoft SQL Server, Error: -2) For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=-2&LinkId=20476 The wait operation timed out

Estas excepciones pueden producirse por problemas de conexión o de consulta. Para confirmar que este error se debe a problemas de conectividad, consulte Confirmación de si un error se debe a un problema de conectividad.

Los tiempos de espera de conexión se producen porque la aplicación no se puede conectar al servidor. Para resolver este problema, pruebe los pasos (en orden) de la sección Pasos para solucionar problemas de conexión comunes.

Errores de terminación de la conexión de red

Las bibliotecas cliente SQL se conectan a Azure SQL Database y Azure SQL Managed Instance mediante el protocolo de red TCP. Una biblioteca cliente usa un componente de nivel inferior denominado proveedor TCP para administrar conexiones TCP. Cuando el proveedor TCP detecta que un host remoto ha finalizado inesperadamente una conexión TCP existente, la biblioteca cliente genera un error. Dado que el error es un error de cliente y no un error de SQL Server, no se incluye ningún número de error de SQL. En su lugar, el número de error es 0 y se usa el mensaje de error del proveedor TCP.

Entre los ejemplos de errores de terminación de la conexión de red se incluyen:

A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.) An existing connection was forcibly closed by the remote host

A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

The client was unable to establish a connection because of an error during connection initialization process before login. Possible causes include the following: the client tried to connect to an unsupported version of SQL Server; the server was too busy to accept new connections; or there was a resource limitation (insufficient memory or maximum allowed connections) on the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

A connection was successfully established with the server, but then an error occurred during the login process. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

Los errores de terminación de la conexión pueden deberse a que la base de datos o el grupo elástico no están disponibles temporalmente. También pueden producirse debido a varios problemas en la infraestructura de red entre el servidor de bases de datos y la aplicación cliente, incluidos firewalls, dispositivos de red, etc. Estos problemas pueden ser transitorios o permanentes. Como guía general, las aplicaciones deben usar un número fijo de reintentos para estos errores antes de considerarlos errores permanentes.

Errores de gobernanza de recursos

Azure SQL Database usa una implementación de gobierno de recursos basada en Resource Governor para imponer límites de recursos. Obtenga más información sobre la administración de recursos en Azure SQL Database.

La mayoría de los errores de gobierno de recursos se muestran primero con detalles, seguidos de una tabla de los mensajes de error de gobierno de recursos.

Errores 10928 y 10936: Id. de recurso: 1. El límite de solicitudes para la [base de datos o el grupo elástico] es %d y se ha alcanzado.

Si se alcanza el límite de nivel de base de datos, el mensaje de error detallado en este caso dice lo siguiente: Resource ID : 1. The request limit for the database is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance.

Si se alcanza el límite del grupo elástico, el mensaje de error detallado en este caso indica lo siguiente: Resource ID : 1. The request limit for the elastic pool is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance. Los límites del grupo elástico son mayores que los límites de la base de datos, para más información, vea Límites de recursos. Se pueden alcanzar cuando varias bases de datos del grupo usan un recurso (por ejemplo, trabajos) simultáneamente.

Este mensaje de error indica que se ha alcanzado el límite de trabajos para la base de datos o el grupo elástico. El valor de máximo de trabajos simultáneos del objetivo de servicio de la base de datos o el grupo elástico estará presente en lugar del marcador de posición %d.

Nota

La oferta inicial de Azure SQL Database solo admitía consultas de un único subproceso. En ese momento, el número de solicitudes siempre equivalía al número de trabajos. Los mensajes de error 10928 y 10936 de Azure SQL Database contienen el texto "El límite de solicitudes [...] es N y se ha alcanzado" por compatibilidad con versiones anteriores. El límite alcanzado es, en realidad, el número de trabajos. Si la configuración del grado máximo de paralelismo (MAXDOP) es igual a cero o es mayor que uno, el número de trabajos puede ser mucho mayor que el número de solicitudes y el límite puede alcanzarse mucho antes que cuando MAXDOP es igual a uno.

Obtenga más información sobre Sesiones, trabajos y solicitudes.

Conexión con la conexión de administrador dedicada (DAC) si es necesario

Si hay un incidente en curso en el que casi se alcanza o se ha alcanzado el límite de trabajos, puede que reciba el error 10928 al conectarse con SQL Server Management Studio (SSMS) o Azure Data Studio. Una sesión puede conectarse con la conexión de diagnóstico para administradores de bases de datos (DAC) incluso cuando se ha alcanzado el umbral máximo de trabajo.

Para establecer una conexión con la DAC desde SSMS:

  • En el menú, seleccione Archivo > Nuevo > Consulta de motor de base de datos.
  • En el cuadro de diálogo de conexión del campo Nombre del servidor, escriba admin:<fully_qualified_server_name> (debería ser algo parecido a admin:servername.database.windows.net).
  • Seleccione Opciones >>.
  • Seleccione la pestaña Propiedades de la conexión.
  • En el cuadro Conectar a base de datos: escriba el nombre de la base de datos.
  • Seleccione Conectar.

Si recibe el error 40613, Database '%.&#x2a;ls' on server '%.&#x2a;ls' is not currently available. Please retry the connection later. If the problem persists, contact customer support, and provide them the session tracing ID of '%.&#x2a;ls', esto puede indicar que ya hay otra sesión conectada a la DAC. Solo puede conectarse una sesión a la DAC para una sola base de datos o un grupo elástico de forma simultánea.

Si aparece el error "Error al conectarse al servidor" después de seleccionar Conectar, es posible que la sesión de DAC se haya establecido correctamente si usa una versión de SSMS anterior a la 18.9. Las versiones anteriores de SSMS intentaron proporcionar Intellisense para las conexiones a la DAC. No fue posible, ya que la DAC solo admite un solo trabajo e Intellisense requiere un trabajo independiente.

No puede usar una conexión DAC con el Explorador de objetos.

Revisión del uso de max_worker_percent

Para obtener estadísticas de consumo de recursos para la base de datos de los últimos 14 días, realice una consulta a la vista de catálogo del sistema sys.resource_stats. En la columna max_worker_percent se muestra el porcentaje de trabajos usados en relación con el límite de trabajos de la base de datos. Conéctese a la base de datos master del servidor lógico para realizar la consulta a sys.resource_stats.

SELECT start_time, end_time, database_name, sku, avg_cpu_percent, max_worker_percent, max_session_percent 
FROM sys.resource_stats;

También puede realizar una consulta de las estadísticas de consumo de recursos de la última hora desde la vista de administración dinámica sys.dm_db_resource_stats. Conéctese directamente a la base de datos para realizar una consulta a sys.dm_db_resource_stats.

SELECT end_time, avg_cpu_percent, max_worker_percent, max_session_percent
FROM sys.dm_db_resource_stats;

Reducción del uso de los trabajos cuando sea posible

El bloqueo de cadenas puede provocar un aumento súbito del número de trabajos en una base de datos. Un gran volumen de consultas paralelas simultáneas puede causar un número elevado de trabajos. Si aumenta el grado máximo de paralelismo (MAXDOP) o establece MAXDOP en cero puede aumentar el número de trabajos activos.

Para evitar un incidente con trabajos insuficientes, siga estos pasos:

  1. Investigue si se está produciendo un bloqueo o si puede identificar un gran volumen de trabajos simultáneos. Ejecute la consulta siguiente para examinar las solicitudes actuales y comprobar si hay un bloqueo cuando la base de datos devuelva el error 10928. Es posible que tenga que conectarse con la conexión de administrador dedicada (DAC) para ejecutar la consulta.

    SELECT
        r.session_id, r.request_id, r.blocking_session_id, r.start_time, 
        r.status, r.command, DB_NAME(r.database_id) AS database_name,
        (SELECT COUNT(*) 
            FROM sys.dm_os_tasks AS t 
            WHERE t.session_id=r.session_id and t.request_id=r.request_id) AS worker_count,
        i.parameters, i.event_info AS input_buffer,
        r.last_wait_type, r.open_transaction_count, r.total_elapsed_time, r.cpu_time,
        r.logical_reads, r.writes, s.login_time, s.login_name, s.program_name, s.host_name
    FROM sys.dm_exec_requests as r
    JOIN sys.dm_exec_sessions as s on r.session_id=s.session_id
    OUTER APPLY sys.dm_exec_input_buffer (r.session_id,r.request_id) AS i
    WHERE s.is_user_process=1;
    GO
    
    1. Busque filas con blocking_session_id para identificar las sesiones bloqueadas. Busque cada blocking_session_id en la lista para determinar si esa sesión también está bloqueada. Con el tiempo, esto le llevará al bloqueador principal. Optimice la consulta del bloqueador de encabezado.

      Nota

      Para más información sobre cómo solucionar problemas de consultas de bloqueo o de larga duración, vea Descripción y resolución de los problemas de bloqueo de Azure SQL Database.

    2. Para identificar un gran volumen de trabajos simultáneos, revise el número de solicitudes en general y la columna worker_count de cada solicitud. Worker_count es el número de trabajos en el momento de la muestra y puede cambiar a lo largo del tiempo a medida que se ejecuta la solicitud. Ajuste las consultas para reducir el uso de recursos si la causa del aumento de los trabajos son consultas simultáneas que se ejecutan en su grado óptimo de paralelismo. Para más información, consulte Optimización y sugerencias de consultas.

  2. Evalúe el grado máximo de paralelismo (MAXDOP) de la base de datos.

Aumento de los límites de trabajos

Si la base de datos o el grupo elástico alcanzan su límite de trabajo de forma coherente a pesar de haber solucionado el bloqueo, optimizado consultas y validado la configuración de MAXDOP, le recomendamos que escale verticalmente la base de datos o el grupo elástico para aumentar el límite de trabajos.

Encuentre límites de recursos Azure SQL Database por nivel de servicio y tamaño de proceso a continuación:

Obtenga más información sobre el gobierno de trabajos de recursos de Azure SQL Database.

Error 10929: Identificador de recurso: 1

10929: Resource ID: 1. The %s minimum guarantee is %d, maximum limit is %d and the current usage for the database is %d. However, the server is currently too busy to support requests greater than %d for this database. See http://go.microsoft.com/fwlink/?LinkId=267637 for assistance. Otherwise, please try again later.

Error 40501: El servicio está ocupado actualmente

40501: The service is currently busy. Retry the request after 10 seconds. Incident ID: %ls. Code: %d.

Se trata de un error de limitación del motor, que indica que se superan los límites de los recursos.

Para más información sobre los límites de recursos, consulte Límites de recursos de servidores SQL lógicos.

Error 40544: La base de datos ha alcanzado su cuota de tamaño

40544: The database has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions. Incident ID: <ID>. Code: <code>.

Este error se produce cuando la base de datos ha alcanzado su cuota de tamaño.

Los pasos siguientes pueden ayudarle a solucionar el problema o proporcionarle más opciones:

  1. Compruebe el tamaño actual de la base de datos mediante el panel en Azure Portal.

    Nota

    Para identificar qué tablas consumen más espacio y, por lo tanto, son posibles candidatos para la limpieza, ejecute la siguiente consulta SQL:

    SELECT o.name,
     SUM(p.row_count) AS 'Row Count',
     SUM(p.reserved_page_count) * 8.0 / 1024 AS 'Table Size (MB)'
    FROM sys.objects o
    JOIN sys.dm_db_partition_stats p on p.object_id = o.object_id
    GROUP BY o.name
    ORDER BY [Table Size (MB)] DESC;
    GO
    
  2. Si el tamaño actual no supera el tamaño máximo admitido para la versión, puede usar ALTER DATABASE para aumentar el valor de MAXSIZE.

  3. Si la base de datos ya supera el tamaño máximo admitido para la edición, pruebe uno o varios de los pasos siguientes:

    • Realice actividades normales de limpieza de la base de datos. Por ejemplo, limpie los datos no deseados con truncar o eliminar, o bien mueva los datos con SQL Server Integration Services (SSIS) o el programa de copia masiva (bcp).
    • Cree particiones o elimine datos, quite índices o consulte la documentación para obtener soluciones posibles.
    • Para el escalado de la base de datos, consulte Escalar recursos de base de datos única y Escalar recursos de grupos elásticos.

Error 40549: La sesión terminó porque tiene una transacción de larga duración

40549: Session is terminated because you have a long-running transaction. Try shortening your transaction.

Si se encuentra con frecuencia este mensaje de error, siga estos pasos para intentar resolver el problema:

  1. Ejecute la consulta siguiente para ver las sesiones abiertas que tengan un valor elevado en la columna duration_ms:

    SELECT
        r.start_time, DATEDIFF(ms,start_time, SYSDATETIME()) as duration_ms, 
        r.session_id, r.request_id, r.blocking_session_id,  
        r.status, r.command, DB_NAME(r.database_id) AS database_name,
        i.parameters, i.event_info AS input_buffer,
        r.last_wait_type, r.open_transaction_count, r.total_elapsed_time, r.cpu_time,
        r.logical_reads, r.writes, s.login_time, s.login_name, s.program_name, s.host_name
    FROM sys.dm_exec_requests as r
    JOIN sys.dm_exec_sessions as s on r.session_id=s.session_id
    OUTER APPLY sys.dm_exec_input_buffer (r.session_id,r.request_id) AS i
    WHERE s.is_user_process=1
    ORDER BY start_time ASC;
    GO
    

    Puede ignorar las filas en las que la columna input_buffer tenga una lectura de consulta de sys.fn_MSxe_read_event_stream: estas solicitudes están relacionadas con sesiones de eventos extendidos.

  2. Revise la columna blocking_session_id para ver si el bloqueo contribuye a transacciones de larga duración.

    Nota

    Para obtener más información sobre la solución de problemas de bloqueo en Azure SQL Database, consulte Descripción y resolución de problemas de bloqueo en Azure SQL Database.

  3. Le recomendamos que procese por lotes las consultas. Para más información sobre el procesamiento por lotes, consulte Uso del procesamiento por lotes para mejorar el rendimiento de las aplicaciones de SQL Database.

Error 40551: La sesión se ha terminado debido al uso excesivo de tempdb

40551: The session has been terminated because of excessive TEMPDB usage. Try modifying your query to reduce the temporary table space usage.

Para resolver el problema, siga estos pasos:

  1. Modifique las consultas para reducir el uso del espacio de la tabla temporal.
  2. Quite los objetos temporales cuando ya no se necesiten.
  3. Trunque las tablas o quite las que no se usen.

Error 40552: La sesión ha terminado debido al uso excesivo del espacio de registro de transacciones

40552: The session has been terminated because of excessive transaction log space usage. Try modifying fewer rows in a single transaction.

Para resolver este problema, pruebe los métodos siguientes:

Error 40553: La sesión ha terminado debido al uso excesivo de la memoria

40553: The session has been terminated because of excessive memory usage. Try modifying your query to process fewer rows.

Para solucionar este problema, intente optimizar la consulta.

Para un procedimiento de solución de problemas detallado, consulte ¿Se ejecuta correctamente mi consulta en la nube?

Para más información sobre otros errores de memoria insuficiente y consultas de ejemplo, vea Solución de problemas de errores de memoria insuficiente con Azure SQL Database.

Tabla de mensajes de error de gobierno de recursos

Código de error severity Descripción
10928 20 Id. de recurso: %d. El límite %s para la base de datos es %d y se ha alcanzado. Vea "http://go.microsoft.com/fwlink/?LinkId=267637" para obtener ayuda.

El identificador de recurso indica el recurso que ha alcanzado el límite. Cuando el id. de recurso es igual a 1, esto indica que se ha alcanzado un límite de trabajos. Obtenga más información en Error 10928: Resource ID : 1. The request limit for the database is %d and has been reached. Cuando el id. de recurso es igual a 2, esto indica que se ha alcanzado el límite de sesión.

Más información sobre los límites de recursos:
Límites de recursos de servidores SQL lógicos.
Límites basados en DTU para bases de datos únicas.
Límites basados en núcleos virtuales para bases de datos únicas.
Límites de recursos de Azure SQL Managed Instance.
10936 20 Id. de recurso: %d. El límite %s para el grupo elástico es %d y se ha alcanzado. Vea "http://go.microsoft.com/fwlink/?LinkId=267637" para obtener ayuda.

El identificador de recurso indica el recurso que ha alcanzado el límite. Cuando el id. de recurso es igual a 1, esto indica que se ha alcanzado un límite de trabajos. Obtenga más información en Error 10936: Id. de recurso: 1. El límite de solicitudes para el grupo elástico es %d y se ha alcanzado.. Cuando el id. de recurso es igual a 2, esto indica que se ha alcanzado el límite de la sesión.

Más información sobre los límites de recursos:
Límites de recursos de servidores SQL lógicos.
Límites basados en DTU para grupos elásticos.
Límites de recursos para grupos elásticos que usan el modelo de compra de núcleo virtual
Límites de recursos de Azure SQL Managed Instance.
10929 20 Id. de recurso: %d. La garantía mínima de %s es de %d, el límite máximo es %d y el uso actual de la base de datos es %d. Sin embargo, el servidor está demasiado ocupado en estos momentos para admitir solicitudes mayores que %d para esta base de datos. El identificador de recurso indica el recurso que ha alcanzado el límite. Para subprocesos de trabajo, el id. de recurso = 1. Para las sesiones, Identificador de recurso = 2. Para más información, vea lo siguiente:
Límites de recursos de servidores SQL lógicos.
Límites basados en DTU para bases de datos únicas.
Límites basados en DTU para grupos elásticos.
Límites basados en núcleos virtuales para bases de datos únicas.
Límites de recursos para grupos elásticos que usan el modelo de compra de núcleo virtual
Límites de recursos de Azure SQL Managed Instance.
De lo contrario, vuelva a intentarlo más tarde.
40544 20 La base de datos ha alcanzado su cuota de tamaño. Cree particiones o elimine datos, quite índices o consulte la documentación para obtener soluciones posibles. Para el escalado de la base de datos, consulte Escalar recursos de base de datos única y Escalar recursos de grupos elásticos.
40549 16 La sesión terminó porque tiene una transacción de larga duración. Intente reducir la transacción. Para más información sobre el procesamiento por lotes, consulte Uso del procesamiento por lotes para mejorar el rendimiento de las aplicaciones de SQL Database.
40550 16 La sesión ha terminado porque ha adquirido demasiados bloqueos. Intente leer o modificar menos filas en una sola transacción. Para más información sobre el procesamiento por lotes, consulte Uso del procesamiento por lotes para mejorar el rendimiento de las aplicaciones de SQL Database.
40551 16 La sesión ha terminado debido al uso excesivo de tempdb . Intente modificar la consulta para reducir el uso de espacio de la tabla temporal.

Si está usando objetos temporales, puede ahorrar espacio en la base de datos tempdb quitándolos una vez que la sesión ya no los necesite. Para obtener más información sobre los límites de tempdb en SQL Database, consulte Base de datos tempdb en SQL Database.
40552 16 La sesión ha terminado debido al excesivo uso de espacio del registro de transacciones. Intente modificar menos filas en una sola transacción. Para más información sobre el procesamiento por lotes, consulte Uso del procesamiento por lotes para mejorar el rendimiento de las aplicaciones de SQL Database.

Si realiza inserciones masivas con la utilidad bcp.exe o la clase System.Data.SqlClient.SqlBulkCopy, intente usar las opciones -b batchsize o BatchSize para limitar el número de filas copiadas al servidor en cada transacción. Si está volviendo a crear un índice con la instrucción ALTER INDEX, intente usar la opción REBUILD WITH ONLINE = ON. Para obtener información sobre los tamaños del registro de transacciones para el modelo de compra de núcleo virtual, consulte:
Límites basados en núcleos virtuales para bases de datos únicas.
Límites de recursos para grupos elásticos que usan el modelo de compra de núcleo virtual
Límites de recursos de Azure SQL Managed Instance.
40553 16 La sesión ha terminado debido al uso excesivo de la memoria. Intente modificar la consulta para procesar menos filas.

La reducción del número de operaciones ORDER BY y GROUP BY en el código Transact-SQL disminuye los requisitos de memoria de la consulta. Para el escalado de la base de datos, consulte Escalar recursos de base de datos única y Escalar recursos de grupos elásticos. Para más información sobre errores de memoria insuficiente y consultas de ejemplo, vea Solución de problemas de errores de memoria insuficiente con Azure SQL Database.

Errores de grupos elásticos

Los errores siguientes están relacionados con la creación y el uso de grupos elásticos:

Código de error severity Descripción Acción correctiva
1132 17 El grupo elástico ha alcanzado su límite de almacenamiento. El uso del almacenamiento del grupo elástico no puede superar (%d) MB. Se ha intentado escribir datos en una base de datos cuando se ha alcanzado el límite de almacenamiento del grupo elástico. Para obtener información sobre los límites de recursos, consulte:
Límites basados en DTU para grupos elásticos.
Límites de recursos para grupos elásticos que usan el modelo de compra de núcleo virtual
Considere la posibilidad de incrementar el número de DTU y de agregar almacenamiento al grupo elástico si es posible para aumentar su límite de almacenamiento, reducir el almacenamiento usado por las bases de datos individuales del grupo elástico o quitar bases de datos de este. Para la escalada del grupo elástico, consulte Escalar recursos de grupos elásticos. Para obtener más información sobre cómo quitar el espacio no utilizado de las bases de datos, vea Administración del espacio de archivo para bases de datos en Azure SQL Database.
10929 16 La garantía mínima de %s es de %d, el límite máximo es %d y el uso actual de la base de datos es %d. Sin embargo, el servidor está demasiado ocupado en estos momentos para admitir solicitudes mayores que %d para esta base de datos. Para obtener información sobre los límites de recursos, consulte:
Límites basados en DTU para grupos elásticos.
Límites de recursos para grupos elásticos que usan el modelo de compra de núcleo virtual
De lo contrario, vuelva a intentarlo más tarde. Número mínimo de DTU o de núcleos virtuales por base de datos; número máximo de DTU o de núcleos virtuales por base de datos. El número total de trabajos simultáneos de todas las bases de datos del grupo elástico intentó superar el límite del grupo.
Considere la posibilidad de incrementar el número de DTU o de núcleos virtuales del grupo elástico si es posible para aumentar el límite de trabajadores, o bien quite bases de datos del grupo elástico.
40844 16 La base de datos '%ls' del servidor '%ls' es una base de datos de la versión '%ls' de un grupo elástico y no puede tener una relación de copia continua. N/D
40857 16 Grupo elástico no encontrado para el servidor: '%ls', nombre del grupo elástico: '%ls'. El grupo elástico especificado no existe en el servidor especificado. Especifique un nombre de grupo elástico válido.
40858 16 El grupo elástico '%ls' ya existe en el servidor: '%ls'. El grupo elástico especificado ya existe en el servidor especificado. Proporcione un nuevo nombre de grupo elástico.
40859 16 El grupo elástico no admite el nivel de servicio '%ls'. El nivel de servicio especificado no se admite para el aprovisionamiento de grupo elástico. Especifique la versión correcta o deje el nivel de servicio en blanco para usar el nivel de servicio predeterminado.
40860 16 La combinación del grupo elástico '%ls' y del objetivo de servicio '%ls' no es válida. El grupo elástico y el nivel de servicio pueden especificarse juntos solo si se especifica el objetivo de servicio como "ElasticPool". Especifique la combinación correcta de grupo elástico y nivel de servicio.
40861 16 La versión de la base de datos '%.*ls' no puede ser distinta del nivel de servicio del grupo elástico, que es '%.*ls'. La versión de la base de datos es distinta del nivel de servicio del grupo elástico. No especifique una edición de la base de datos distinta del nivel de servicio del grupo elástico. Tenga en cuenta que no es necesario especificar la versión de la base de datos.
40862 16 Debe especificarse el nombre del grupo elástico si se especifica el objetivo de servicio del grupo elástico. El objetivo del servicio de grupo elástico no identifica de manera única un grupo elástico. Especifique el nombre del grupo elástico si usa el objetivo del servicio de grupo elástico.
40864 16 El número de DTU del grupo elástico debe ser de al menos (%d) DTU para el nivel de servicio ' %.* ls'. Se intentó establecer el número de DTU para el grupo elástico por debajo del límite mínimo. Vuelva a intentar establecer el número de DTU para el grupo elástico al menos en el límite mínimo.
40865 16 El número de DTU del grupo elástico no puede superar (%d) DTU para el nivel de servicio ' %.* ls'. Se intentó establecer el número de DTU para el grupo elástico por encima del máximo. Vuelva a intentar establecer el número de DTU para el grupo elástico en un valor inferior al límite máximo.
40867 16 El número máximo de DTU por base de datos debe ser al menos (%d) para el nivel de servicio '%.*ls'. Se intentó establecer el número máximo de DTU por base de datos por debajo del límite admitido. Considere la posibilidad de utilizar el nivel de servicio del grupo elástico que admita la configuración deseada.
40868 16 El número máximo de DTU por base de datos no puede superar (%d) para el nivel de servicio '%.*ls'. Se intentó establecer el número máximo de DTU por base de datos por encima del límite admitido. Considere la posibilidad de utilizar el nivel de servicio del grupo elástico que admita la configuración deseada.
40870 16 El número mínimo de DTU por base de datos no puede superar (%d) para el nivel de servicio '%.*ls'. Se intentó establecer el número mínimo de DTU por base de datos por encima del límite admitido. Considere la posibilidad de utilizar el nivel de servicio del grupo elástico que admita la configuración deseada.
40873 16 El número de bases de datos (%d) y el mínimo de DTU por base de datos (%d) no puede superar el número de DTU del grupo elástico (%d). Se intentó especificar un número mínimo de DTU para las bases de datos del grupo elástico que supera el número de DTU del grupo elástico. Considere la posibilidad de aumentar el número de DTU del grupo elástico, reduzca el número mínimo de DTU por base de datos, o bien reduzca el número de bases de datos del grupo elástico.
40877 16 No se puede eliminar un grupo elástico a menos que no contenga ninguna base de datos. El grupo elástico contiene una o más bases de datos y no se puede eliminar. Quite las bases de datos del grupo elástico para poder eliminarlo.
40881 16 El grupo elástico ' %.* ls' ha alcanzado el límite de recuento de bases de datos. El límite de bases de datos del grupo elástico no puede superar (%d) para un grupo elástico con (%d) DTU. Se intentó crear una base de datos en el grupo elástico, o agregar una base de datos al grupo elástico, cuando se ha alcanzado el límite de bases de datos del grupo elástico. Considere la posibilidad de incrementar el número de DTU del grupo elástico si es posible para aumentar el límite de bases de datos, o bien quite bases de datos del grupo elástico.
40889 16 El límite de DTU o de almacenamiento del grupo elástico ' %.* ls' no se puede reducir, puesto que no proporcionaría suficiente espacio de almacenamiento para sus bases de datos. Se intentó reducir el límite de almacenamiento del grupo elástico por debajo de su uso de almacenamiento. Considere la posibilidad de reducir el uso de almacenamiento de bases de datos individuales del grupo elástico, o bien quite bases de datos del grupo para reducir su número de DTU o el límite de almacenamiento.
40891 16 El número mínimo de DTU por base de datos (%d) no puede superar el número máximo de DTU por base de datos (%d). Se intentó establecer el número mínimo de DTU por base de datos con un valor superior al número máximo de DTU por base de datos. Asegúrese de que el número mínimo de DTU por base de datos no supere el número máximo de DTU por base de datos.
TBD 16 El tamaño de almacenamiento para una base de datos individual de un grupo elástico no puede superar el tamaño máximo permitido por el grupo elástico del nivel de servicio '%.*ls'. El tamaño máximo de la base de datos supera el tamaño máximo permitido por el nivel de servicio del grupo elástico. Establezca el tamaño máximo de la base de datos por debajo de los límites de tamaño máximo permitidos por el nivel de servicio del grupo elástico.

No se puede abrir la base de datos maestra solicitada por el inicio de sesión. Error de inicio de sesión

Este problema se produce porque la cuenta no tiene permiso de acceso a la base de datos master. Sin embargo, SQL Server Management Studio (SSMS) intenta conectarse a la base de datos master.

Para resolver el problema, siga estos pasos:

  1. En la pantalla de inicio de sesión de SSMS, seleccione Opciones y, luego, Propiedades de la conexión.

  2. En el campo Conectar con base de datos, escriba el nombre de la base de datos predeterminada del usuario como la base de datos de inicio de sesión predeterminada y seleccione Conectar.

    Connection properties

Errores de solo lectura

Si intenta escribir en una base de datos de solo lectura, recibirá un error. En algunos escenarios, es posible que la causa del estado de solo lectura de la base de datos no esté clara inmediatamente.

Error 3906: No se pudo actualizar la base de datos "DatabaseName" porque es de solo lectura.

Al intentar modificar una base de datos de solo lectura, se producirá el siguiente error.

Msg 3906, Level 16, State 2, Line 1
Failed to update database "%d" because the database is read-only.

Es posible que esté conectado a una réplica de solo lectura

Tanto para Azure SQL Database como para Azure SQL Managed Instance, es posible que esté conectado a una base de datos en una réplica de solo lectura. En este caso, la consulta siguiente que usa la función DATABASEPROPERTYEX() devolverá READ_ONLY:

SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability');
GO

Si va a conectarse mediante SQL Server Management Studio, compruebe si ha especificado ApplicationIntent=ReadOnly en la pestaña Parámetros de conexión adicionales en las opciones de conexión.

Si la conexión procede de una aplicación o un cliente que usa una cadena de conexión, valide si la cadena de conexión ha especificado ApplicationIntent=ReadOnly. Obtenga más información en Conexión a una réplica de solo lectura.

La base de datos se puede establecer en solo lectura

Si usa Azure SQL Database, es posible que la propia base de datos se haya establecido en solo lectura. Puede comprobar el estado de la base de datos con la siguiente consulta:

SELECT name, is_read_only
FROM sys.databases
WHERE database_id = DB_ID();

Puede modificar el estado de solo lectura de una base de datos en Azure SQL Database mediante ALTER DATABASE Transact-SQL. Actualmente no se puede establecer una base de datos de una instancia administrada en solo lectura.

Confirmación de si un error se debe a un problema de conectividad

Para confirmar si un error se debe a un problema de conectividad, revise el seguimiento de la pila de los marcos que muestran llamadas para abrir una conexión como las siguientes (observe la referencia a la clase SqlConnection):

System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
 at System.Data.SqlClient.SqlConnection.Open()
 at AzureConnectionTest.Program.Main(String[] args)
ClientConnectionId:<Client connection ID>

Cuando se produce la excepción por problemas de consulta, observará una pila de llamadas similar a la siguiente (observe la referencia a la clase SqlCommand). En esta situación, optimice las consultas .

  at System.Data.SqlClient.SqlCommand.ExecuteReader()
  at AzureConnectionTest.Program.Main(String[] args)
  ClientConnectionId:<Client ID>

Para instrucciones adicionales sobre cómo ajustar el rendimiento, consulte los siguientes recursos:

Pasos para solucionar problemas de conexión comunes

  1. Asegúrese de que TCP/IP esté habilitado como protocolo de cliente en el servidor de aplicaciones. Para más información, consulte Configurar protocolos de cliente. En los servidores de aplicaciones en los que no tiene instaladas herramientas de SQL, compruebe que TCP/IP esté habilitado mediante la ejecución de cliconfg.exe (utilidad de red de cliente de SQL Server).

  2. Compruebe la cadena de conexión de la aplicación para asegurarse de que está configurada correctamente. Por ejemplo, asegúrese de que la cadena de conexión especifica el puerto correcto (1433) y el nombre completo del servidor. Consulte Obtención de información sobre la conexión.

  3. Intente aumentar el valor de tiempo de espera de la conexión. Se recomienda el uso de un tiempo de espera de conexión de al menos 30 segundos.

  4. Pruebe la conectividad entre el servidor de aplicaciones y la instancia de Azure SQL Database mediante SQL Server Management Studio (SSMS), un archivo UDL, ping o Telnet. Para más información, consulte Solución de problemas de conectividad y Diagnóstico de problemas de conexión.

    Nota

    Como paso de solución de problemas, también puede probar la conectividad en otro equipo cliente.

  5. Como procedimiento recomendado, asegúrese de que la lógica de reintento esté implantada. Para más información sobre la lógica de reintento, consulte Solución de problemas temporales y de conexión a SQL Database.

Si con los pasos anteriores no se resuelve el problema, intente recopilar más datos y luego póngase en contacto con el soporte técnico. Si la aplicación es un servicio en la nube, habilite el registro. Este paso devuelve una marca de tiempo UTC del error. Además, SQL Database devuelve el identificador de seguimiento. Los servicios de soporte técnico de Microsoft pueden usar esta información.

Para más información sobre cómo habilitar el registro, consulte Habilitar el registro de diagnósticos para las aplicaciones de Azure App Service.

Pasos siguientes

Obtenga más información sobre los temas relacionados en los artículos siguientes: