MSSQLSERVER_833

Se aplica a:SQL ServerAzure SQL Managed Instance

Detalles

Attribute Valor
Nombre del producto SQL Server
Id. de evento 833
Origen de eventos MSSQLSERVER
Componente SQLEngine
Nombre simbólico BUF_LONG_IO
Texto del mensaje SQL Server ha detectado %d instancias de solicitudes de E/S que están tardando más de %d segundos en completarse en el archivo [%ls] de la base de datos [%ls] (%d). El identificador de archivo del SO es 0x%p. El desplazamiento de la operación de E/S más reciente y más larga es: %#016I64x.

Explicación

Este mensaje indica que SQL Server ha emitido una solicitud de lectura o escritura desde el disco y que la solicitud ha tardado más de 15 segundos en volver. SQL Server notifica este error e indica un problema con el subsistema de E/S. Un sistema de administración de bases de datos (DBMS), como SQL Server, se basa en las escalas de tiempo de las operaciones de entrada y salida de archivos (E/S). Cualquiera de los siguientes elementos puede provocar operaciones de E/S bloqueadas o detenidas y afectar negativamente a la capacidad de respuesta y el rendimiento de SQL Server:

  • Hardware defectuoso
  • Hardware configurado incorrectamente
  • Configuración de firmware
  • Controladores de filtro
  • Compresión
  • Errores
  • Otras condiciones de la ruta de acceso de E/S

Estos problemas de E/S pueden provocar que se produzca el siguiente comportamiento:

  • Bloqueo.
  • Contención de bloqueos temporales y tiempos de espera.
  • Tiempo de respuesta lento.
  • Ampliación de los límites de recursos.
  • También puede observar otros síntomas asociados a este mensaje, como:
    • Tiempos de espera elevados para esperas PAGEIOLATCH.
    • Advertencias o errores en el registro de eventos del sistema.
    • Indicaciones de problemas de latencia de disco en los contadores del monitor del sistema.

Cuando una operación de E/S ha estado pendiente durante 15 segundos o más, SQL Server realiza los pasos siguientes:

  1. Detecta que una operación ha estado pendiente.

  2. Escribe un mensaje informativo en el registro de errores de SQL Server como se describe en la sección Detalles.

    En la tabla siguiente se proporciona una explicación a diferentes secciones de este mensaje informativo:

Texto del mensaje Descripción
<Número> de repeticiones Número de solicitudes de E/S que no completaron la operación de lectura o escritura en menos de 15 segundos.
información de archivo El nombre de archivo completo, el nombre de la base de datos y el número de identificación de la base de datos (DBID).
Handle Identificador del sistema operativo del archivo. Puede usar el identificador del sistema operativo con depuradores u otras utilidades para ayudar a realizar un seguimiento de las solicitudes de paquetes de solicitud de E/S (IRP).
Offset Desplazamiento de la última operación de E/S bloqueada o la última operación de E/S detenida. Puede usar el desplazamiento con depuradores u otras utilidades para ayudar a realizar un seguimiento de las solicitudes IRP.

Nota:
Cuando el mensaje informativo se escribe en el registro de errores de SQL Server, es posible que la operación de E/S deje de estar bloqueada o detenida.

Causas posibles

El mensaje informativo indica que la carga actual puede estar experimentando una de las condiciones siguientes:

  • La carga de trabajo supera las funcionalidades de ruta de acceso de E/S debido a una configuración incorrecta del subsistema de E/S (SAN, NAS y conectado directo) o porque se ha alcanzado la capacidad de hardware.
  • La carga de trabajo supera las funcionalidades actuales del sistema, como E/S, CPU y HBA.
  • La ruta de acceso de E/S no funciona correctamente. Podría ser firmware o un problema de controlador.
  • La ruta de acceso de E/S tiene componentes de hardware que no funcionan correctamente.
  • Problema de rendimiento en el nivel de sistema operativo.
  • Filtrar la intervención del controlador en el proceso de E/S o la ruta de acceso de almacenamiento de los archivos de base de datos. Por ejemplo, programa antivirus.

SQL Server registra la hora en que inició una solicitud de E/S y registra la hora en que se completó la E/S. Si esa diferencia es de 15 segundos o más, se detecta esta condición. También significa que SQL Server no es la causa de la condición de E/S retrasada que este mensaje describe e informa. Esta condición se conoce como E/S detenido. La mayoría de las solicitudes de disco se producen dentro de la velocidad típica del disco. Esta velocidad de disco típica se conoce con frecuencia como tiempo de búsqueda de disco. El tiempo de búsqueda en disco para la mayoría de los discos estándar se produce en 10 milisegundos o menos. Por lo tanto, 15 segundos es mucho tiempo para que la ruta de acceso de E/S del sistema vuelva a SQL Server. Para obtener más información, consulte la sección Más información .

Acción del usuario

Para solucionar este error, siga estos pasos:

  1. Examine el registro de eventos del sistema para ver los mensajes de error relacionados con el hardware.
  2. Examine los registros específicos del hardware si están disponibles. Use los métodos y técnicas necesarios para determinar la causa del retraso en el sistema operativo, los controladores o el hardware de E/S.
  3. Actualice todos los controladores de dispositivo y el firmware o realice otros diagnósticos asociados al subsistema de E/S.
  4. El acceso al disco se puede ralentizar mediante controladores de filtro, por ejemplo, un programa antivirus. Para aumentar la velocidad de acceso, excluya los archivos de datos de SQL Server especificados en el mensaje de error de los exámenes de virus activos. Para obtener más información, vea Cómo elegir software antivirus para ejecutarse en equipos que ejecutan SQL Server (microsoft.com).
    • Use la utilidad de línea de comandos fltmc.exe para consultar todos los controladores de filtro instalados en el sistema y comprender las funciones que realiza en la ruta de acceso de almacenamiento a los archivos de base de datos.
  5. Use el Monitor de rendimiento para examinar los siguientes contadores:
    • Average Disk Sec/Transfer
    • Average Disk Queue Length
    • Current Disk Queue Length
  6. También puede usar instalaciones como el registro etw de Storport para medir la latencia de las solicitudes realizadas en una unidad de disco. Hay otro kit de solución de problemas de E/S de disco similar disponible como perfil integrado del Grabador de rendimiento de Windows.
  7. Supervise sys.dm_io_virtual_file_stats y elija el nivel de almacenamiento y las IOPS adecuados para el rendimiento del almacenamiento.

Para ver un tutorial guiado para diagnosticar y solucionar problemas de rendimiento de SQL Server que se producen debido a problemas de E/S, consulte Solución de problemas de rendimiento lento de SQL Server causados por problemas de E/S.

Más información

E/S bloqueadas y E/S bloqueadas

E/S bloqueadas

E/S bloqueada se define como una solicitud de E/S que no se completa. Con frecuencia, la E/S bloqueada indica un IRP bloqueado. Para resolver una condición de E/S bloqueada, normalmente debe reiniciar el equipo o realizar una acción similar. Una condición de E/S bloqueada suele indicar uno de los siguientes problemas:

  • Hardware defectuoso.
  • Un error en un componente de ruta de acceso de E/S.

E/S detenido

La E/S detenida se define como una solicitud de E/S que se completa o que tarda demasiado tiempo en completarse. Normalmente, el comportamiento de E/S detenido se produce debido a uno de los siguientes motivos:

  • Configuración de hardware.
  • Configuración de firmware.
  • Problema del controlador de filtro que requiere ayuda del hardware o del proveedor de software para realizar el seguimiento y la resolución.

E/S detenida de SQL Server y la grabación de E/S bloqueadas e informes

El soporte técnico de SQL Server controla muchos casos cada año que implican problemas de E/S bloqueados o detenidos. Estos problemas de E/S aparecen de diferentes maneras. Los problemas de E/S son algunos de los más difíciles de diagnosticar y depurar, y requieren un tiempo y recursos significativos para la depuración de Microsoft y el cliente. Los informes y el registro de solicitudes de E/S están diseñados por archivo. La detección y los informes de solicitudes de E/S bloqueadas y bloqueadas son dos acciones independientes.

Grabación

Hay dos momentos en los que se produce una acción de registro en SQL Server. La primera es cuando se completa la operación de E/S. El segundo momento es cuando se ejecuta el escritor diferido. Cuando se ejecuta el escritor diferido, comprueba todos los datos pendientes y las solicitudes de E/S del archivo de registro pendientes. Si la solicitud de E/S supera el umbral de 15 segundos, se produce una operación de registro.

Informes

Los informes se producen en intervalos que están separados por cinco minutos o más. Los informes se producen cuando se realiza la siguiente solicitud de E/S en el archivo. Si se ha producido una acción de registro y se han pasado cinco minutos o más desde el último informe, el mensaje informativo mencionado en la sección Detalles se escribe en el registro de errores de SQL Server.

El umbral de 15 segundos no es ajustable. Sin embargo, puede deshabilitar la detección de E/S detenida o bloqueada mediante la marca de seguimiento 830, aunque no se recomienda hacerlo.

Puede deshabilitar la detección de E/S detenida y bloqueada mediante la marca de seguimiento 830. Para habilitar esta marca cada vez que se inicia SQL Server, use el parámetro de inicio -T830. Para deshabilitar la detección de una instancia de SQL Server que se está ejecutando actualmente, use la siguiente instrucción:

    dbcc traceon(830, -1)

Esta configuración solo es efectiva durante la vida útil del proceso de SQL Server.

Nota:

Una solicitud de E/S que se detiene o se bloquea solo se notifica una vez. Por ejemplo, si el mensaje informa de que se han detenido 10 solicitudes de E/S, esos 10 informes no se volverán a producir. Si el siguiente mensaje informa de que se han detenido 15 solicitudes de E/S, significa que se han detenido 15 nuevas solicitudes de E/S.

Seguimiento del paquete de solicitud de E/S (IRP)

SQL Server usa las llamadas estándar a la API de Microsoft Windows para leer y escribir datos. Por ejemplo, SQL Server usa las funciones siguientes:

  • WriteFile
  • ReadFile
  • WriteFileScatter
  • ReadFileGather

Windows controla la solicitud de lectura o escritura como un paquete de solicitud de E/S (IRP). Para determinar el estado del IRP, use las dos características siguientes:

Se recomienda comprobar si hay actualizaciones disponibles para los siguientes elementos:

  • The BIOS
  • El firmware
  • Cualquier otro componente de ruta de acceso de E/S

Póngase en contacto con los proveedores de hardware antes de realizar acciones de depuración adicionales. Es probable que la sesión de depuración implique un componente de controlador, firmware o controlador de filtro de terceros.

Acciones del plan de consulta y rendimiento del sistema

En general, el rendimiento del sistema puede desempeñar un papel clave en el procesamiento de E/S. Debe tener en cuenta el estado general del sistema al investigar informes de operaciones de E/S detenidas o bloqueadas. Las cargas excesivas pueden hacer que el sistema general sea lento, incluido el procesamiento de E/S. El comportamiento del sistema cuando se produce el problema puede ser un factor clave para determinar la causa principal del problema. Por ejemplo, si el uso de la CPU aumenta o sigue siendo alto mientras se produce el problema, puede indicar que un proceso del sistema usa tanta CPU como otros procesos se ven afectados negativamente.

Contadores de rendimiento

Para supervisar el rendimiento de E/S, examine los siguientes contadores de rendimiento para obtener información de ruta de acceso de E/S específica:

  • Average Disk Sec/Transfer
  • Average Disk Queue Length
  • Current Disk Queue Length

Por ejemplo, el tiempo medio de segundo/transferencia de disco en un equipo que ejecuta SQL Server suele ser inferior a 15 milisegundos. Si el valor promedio de segundo/transferencia de disco sube, indica que el subsistema de E/S no se mantiene al día de la demanda de E/S de forma óptima.

Tenga cuidado al usar los contadores de rendimiento porque SQL Server aprovecha al máximo las funcionalidades de E/S asincrónicas que insertan en gran medida las longitudes de cola de disco. Por lo tanto, las longitudes de cola de disco más largas por sí solas no indican un problema.

En el Monitor del sistema de Windows, puedes revisar el contador "Disco físico: Bytes de disco/s" para cada disco afectado y comparar la tasa de actividad con los contadores "Process: IO Data Bytes/Sec" y "Process: IO Other Bytes/sec" para cada proceso. Para identificar si un conjunto específico de procesos genera solicitudes de E/S excesivas. Otros contadores relacionados con E/S del objeto Process revelan información más detallada. Si determina que una instancia de SQL Server es responsable de una carga excesiva de E/S en el servidor, consulte la sección siguiente sobre Índices y paralelismo. Para obtener una explicación detallada sobre cómo detectar y resolver cuellos de botella de E/S, consulte Solución de problemas de rendimiento lento de SQL Server causados por problemas de E/S.

Índices y paralelismo

Con frecuencia, se producen ráfagas de E/S porque falta un índice. Este comportamiento puede insertar gravemente la ruta de acceso de E/S. Un paso que usa el Asistente para giro de índices (ITW) puede ayudar a resolver la presión de E/S en el sistema. Si una consulta se beneficia de un índice en lugar de un examen de tabla, o quizás si usa una ordenación o un hash, el sistema puede obtener las siguientes ventajas:

  • Se realiza una reducción en la E/S física necesaria para completar la acción que crea directamente ventajas de rendimiento para la consulta.
  • Se deben volver a entregar menos páginas de la caché de datos. Por lo tanto, esas páginas que se encuentran en la caché de datos siguen siendo relevantes para las consultas activas.
  • Las ordenaciones y los hash se usan porque puede faltar un índice o porque las estadísticas no están actualizadas. Puede reducir el uso y la contención de tempdb agregando uno o varios índices.
  • Se realiza una reducción en los recursos, las operaciones paralelas o ambas. Dado que SQL Server no garantiza la ejecución de consultas en paralelo y se considera la carga en el sistema, es mejor optimizar todas las consultas para la ejecución en serie. Para optimizar una consulta, abra el Analizador de consultas y establezca el valor sp_configure de la opción grado máximo de paralelismo en 1. Si todas las consultas están optimizadas para ejecutarse rápidamente como una operación en serie, la ejecución en paralelo suele ser un resultado mejor. Sin embargo, la ejecución en paralelo suele seleccionarse porque la cantidad de datos es grande. Para un índice que falta, es posible que tenga que producirse una ordenación grande. Varios trabajos que realizan la operación de ordenación crearán una respuesta más rápida. Sin embargo, esta acción puede aumentar drásticamente la presión sobre el sistema. Las solicitudes de lectura grandes de muchos trabajadores pueden provocar una ráfaga de E/S junto con un mayor uso de CPU. Una consulta se puede ajustar a menudo para ejecutarse más rápido y usar menos recursos si se agrega un índice o si se produce otra acción de optimización.

Ejemplos prácticos de soporte técnico de SQL Server

El soporte técnico de SQL Server y la compatibilidad con escalado de Windows han controlado los ejemplos siguientes. Estos ejemplos están diseñados para proporcionar un marco de referencia y ayudar a establecer sus expectativas sobre situaciones de E/S detenidas y bloqueadas. También proporcionan un marco para comprender cómo un sistema puede verse afectado o puede responder. Ningún hardware específico o conjunto de controladores supone ningún riesgo específico o mayor riesgo sobre otro. Todos los sistemas son los mismos en este sentido.

Ejemplo 1: escritura de registro bloqueada durante 45 segundos

Un intento de escribir un archivo de registro de SQL Server se bloquea periódicamente durante aproximadamente 45 segundos. La escritura del registro no se completa de forma oportuna. Este comportamiento crea una condición de bloqueo que provoca un tiempo de espera de cliente de 30 segundos.

La aplicación envió una confirmación a SQL Server y la confirmación se bloquea como una escritura de registro pendiente. Este comportamiento hace que la consulta siga manteniendo bloqueos y bloquee las solicitudes entrantes de otros clientes. A continuación, otros clientes empiezan a agotar el tiempo de espera. Esto complica el problema porque la aplicación no revierte las transacciones abiertas cuando se produce un tiempo de espera de consulta. Esto crea cientos de transacciones abiertas que contienen bloqueos. Por lo tanto, se produce una situación de bloqueo grave.

Para obtener más información sobre el control y el bloqueo de transacciones, consulte el siguiente artículo de Microsoft Knowledge Base: 224453 Descripción y resolución de problemas de bloqueo de SQL Server.

Los servicios de aplicación de un sitio web mediante la agrupación de conexiones. A medida que se bloquean más conexiones, el sitio web crea más conexiones. Estas conexiones se bloquean y el ciclo continúa.

La escritura del registro tarda aproximadamente 45 segundos en completarse. Sin embargo, en este momento, se realiza una copia de seguridad de cientos de conexiones. Los problemas de bloqueo provocan varios minutos de tiempo de recuperación para SQL Server y la aplicación. En combinación con problemas de aplicación, la condición de E/S estancada tiene un efecto muy negativo en el sistema.

Resolución

El problema se realiza un seguimiento de una solicitud de E/S bloqueada en un controlador del adaptador de bus host (HBA). El equipo tiene varias tarjetas HBA con compatibilidad con conmutación por error. Cuando un HBA está detrás o no se comunica con la red de área de almacenamiento (SAN), el valor de tiempo de espera "reintento antes de la conmutación por error" está configurado en 45 segundos. Cuando se supera el tiempo de espera, la solicitud de E/S se enruta al segundo HBA. El segundo HBA controla la solicitud y se completa rápidamente. Para ayudar a evitar estas condiciones de desconexión, el fabricante de hardware recomienda una configuración de "reintento antes de la conmutación por error" de cinco segundos.

Ejemplo 2: Intervención del controlador de filtro

Muchos programas de software antivirus y productos de copia de seguridad usan controladores de filtro de E/S. Estos controladores de filtro de E/S forman parte de la pila de solicitudes de E/S y tienen acceso a la solicitud IRP. Los Servicios de soporte técnico de productos de Microsoft han detectado varios problemas de errores que crean condiciones de E/S bloqueadas o condiciones de E/S bloqueadas en una implementación del controlador de filtro.

Una de estas condiciones es un controlador de filtro para el procesamiento de copia de seguridad que permite la copia de seguridad de los archivos que están abiertos cuando se produce la copia de seguridad. El administrador del sistema ha incluido el directorio de archivos de datos de SQL Server en las selecciones de copia de seguridad de archivos. Cuando se produce la copia de seguridad, la copia de seguridad intenta recopilar la imagen correcta del archivo en el momento en que se inició la copia de seguridad. Esto retrasa las solicitudes de E/S. Las solicitudes de E/S solo se pueden completar una a la vez, ya que el software las controla.

Cuando se inicia la copia de seguridad, el rendimiento de SQL Server disminuye drásticamente a medida que las E/S de SQL Server se ven obligadas a completarse de una en una. La lógica de uno en uno es tal que la operación de E/S no se puede realizar de forma asincrónica, lo que compone el problema. Por lo tanto, cuando SQL Server espera publicar una solicitud de E/S y continuar, el trabajo se bloquea en la llamada de lectura o escritura hasta que se complete la solicitud de E/S. Las acciones del controlador de filtro deshabilitan eficazmente las tareas de procesamiento, como SQL Server, lectura anticipada. Además, otro error del controlador de filtro deja las acciones de uno en uno en el proceso, incluso cuando se completa la copia de seguridad. La única manera de restaurar el rendimiento de SQL Server es reiniciar SQL Server para que el identificador de archivo se libere y se vuelva a adquirir sin la interacción del controlador de filtro.

Resolución

Para resolver este problema, los archivos de datos de SQL Server se quitan del proceso de copia de seguridad de archivos. El fabricante del software ha corregido el problema que dejó el archivo en el modo "uno a la vez".

Ejemplo 3: Errores ocultos

Muchos sistemas de gama alta tienen rutas de E/S multicanal para controlar el equilibrio de carga o actividades similares. El soporte técnico del producto de Microsoft ha encontrado problemas con el software de equilibrio de carga en el que se produce un error en una solicitud de E/S, pero el software no controla correctamente la condición de error. El software puede intentar reintentos infinitos. La operación de E/S se bloquea y SQL Server no puede completar la acción especificada. Al igual que la condición de escritura del registro descrita anteriormente, muchos comportamientos deficientes del sistema pueden producirse después de que dicha condición se conteja con el sistema.

Resolución

Para resolver este problema, reinicie SQL Server. Sin embargo, a veces es necesario reiniciar el sistema operativo para restaurar el procesamiento. También se recomienda obtener una actualización de software del proveedor de E/S.

Ejemplo 4: Almacenamiento remoto, creación de reflejo y unidades raid

Muchos sistemas usan la creación de reflejo o adoptan pasos similares para evitar la pérdida de datos. Algunos sistemas que usan la creación de reflejo se basan en software y algunos están basados en hardware. La situación que suele detectar Soporte técnico de Microsoft para estos sistemas es una mayor latencia.

Un aumento en el tiempo de E/S general se produce cuando la E/S debe finalizar antes de que se considere completada. En el caso de las instalaciones de reflejo remoto, los reintentos de red pueden estar implicados. Cuando se producen errores de unidad y se vuelve a generar el sistema raid, también se puede interrumpir el patrón de E/S.

Resolución

Se requieren valores de configuración estrictos para reducir la latencia a los reflejos o a las operaciones de recompilación de raid.

Ejemplo 5: Compresión

Microsoft no admite archivos de datos y archivos de registro de SQL Server en unidades comprimidas. La compresión NTFS no es segura para SQL Server porque la compresión NTFS interrumpe el protocolo Escritura previa del registro (WAL). La compresión NTFS también requiere un mayor procesamiento para cada operación de E/S. La compresión crea "uno a uno" como el comportamiento que provoca problemas graves de rendimiento.

Resolución

Para resolver este problema, descomprima los datos y los archivos de registro.

Para obtener más información, consulte Compatibilidad con bases de datos en volúmenes comprimidos.

Puntos de datos adicionales

PAGEIOLATCH_* y esperas de registro de escritura en sys.dm_os_wait_stats vistas de administración dinámica (DMV) son indicadores clave para investigar el rendimiento de la ruta de acceso de E/S. Si ve muchas esperas PAGEIOLATCH, eso significa que SQL Server está esperando al subsistema de E/S. Una cierta cantidad de esperas PAGEIOLATCH es el comportamiento típico y esperado. Sin embargo, si los tiempos de espera de PAGEIOLATCH promedio son constantemente mayores de 10 milisegundos, debe investigar por qué el subsistema de E/S está bajo presión. Para obtener más información, vea los documentos siguientes:

Referencias

SQL Server requiere que los sistemas admitan la "entrega garantizada a medios estables", como se describe en Los requisitos del programa de confiabilidad de E/S de SQL Server. Para obtener más información sobre los requisitos de entrada y salida para el motor de base de datos de SQL Server, visite Motor de base de datos requisitos de entrada y salida.

Para obtener más información sobre los errores de E/S, vea el capítulo 2 del documento sobre conceptos básicos de E/S de Microsoft SQL Server.