Los valores de temporización de SQL Server pueden ser incorrectos cuando usa utilidades o tecnologías que cambian las frecuencias de la CPU

Trabaje en cualquier lugar desde cualquier dispositivo con Microsoft 365

Actualice a Microsoft 365 para trabajar en cualquier lugar con las características y las actualizaciones más recientes.

Actualizar ahora

Resumen

Microsoft SQL Server 2005 usa el contador de CPU de alta resolución para proporcionar funciones de intervalos de microsegundos. Un microsegundo es una millonésimas de segundo (o una milésima de milisegundo). Sin embargo, los valores de temporización de SQL Server pueden ser incorrectos si usa tecnologías que cambian la frecuencia de la CPU. Por ejemplo, este problema puede ocurrir cuando usa cualquiera de las siguientes tecnologías:

  • Versión de CPU

  • Tecnología AMD Cool'n'Quiet

  • Varias combinaciones de energía

Este artículo contiene métodos e información adicional para ayudarle a solucionar este problema.

Síntomas

Al usar la instrucción SET STATISTICs TIME para mostrar horas de ejecución, análisis y compilación del servidor, puede obtener valores incorrectos. Por ejemplo, es posible que observe que el tiempo transcurrido del tiempo de ejecución de SQL Server es mucho más que el tiempo de CPU. Este problema puede afectar a la precisión de la optimización del rendimiento. Este problema se produce cuando usa una de las tecnologías que se enumeran en la sección "Resumen" del servidor.

Causa

Este problema se produce porque las frecuencias de la CPU cambian al usar estas tecnologías. SQL Server 2005 usa el contador de CPU de alta resolución para proporcionar funciones de intervalos de microsegundos. Si se modifican las frecuencias de la CPU para ahorrar energía y reducir la salida de calor, la duración calculada puede ser incorrecta.

Resolución

Información de Service Pack

Para resolver este problema, obtenga el Service Pack más reciente para SQL Server 2005. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

913089 Cómo obtener el Service Pack más reciente para SQL Server 2005Nota: En SQL Server 2005 Service Pack 3 y en los Service Pack posteriores, no se usa la marca de tiempo del procesador. Estas versiones de SQL Server 2005 usan un temporizador más confiable que tiene una precisión máxima de 1 milisegundo.

Estado

Este problema se corrigió por primera vez en SQL Server 2005 Service Pack 3.

Solución alternativa

SQL Server 2005 requiere puntos de datos conocidos y estables para ajustar el rendimiento de forma precisa. Si los ajustes de frecuencia de la CPU dinámica están habilitados en el equipo, puede deshabilitarlos para que las CPU mantengan una tasa de frecuencia permanente antes de empezar a supervisar y ajustar el rendimiento de SQL Server. Para ello, utilice los métodos siguientes.

Configure la combinación de energía en el equipo para forzar que las CPU permanezcan en la frecuencia máxima

Para ello, siga estos pasos:

  1. Haga clic en Inicio, haga clic en Ejecutar, escriba powercfg. cply haga clic en Aceptar.

  2. En el cuadro de diálogo propiedades de opciones de energía , haga clic en siempre activado en la lista combinaciones de energía .

  3. Haga clic en Aceptar.

Se puede producir un desplazamiento. Un desplazamiento es una divergencia entre los valores de frecuencia de la CPU. Para obtener más información, consulte la sección "desplazamiento". En este caso, debe reiniciar Microsoft Windows para resincronizar las frecuencias de todas las CPU después de cambiar la combinación de energía. Si no puede reiniciar el equipo, habilite la afinidad del procesador de SQL Server para evitar que los subprocesos de trabajo de SQL Server se muevan entre CPU. Cuando lo haga, no tendrá que reiniciar el equipo aunque se produzca una divergencia entre los valores de frecuencia de la CPU. Para habilitar la afinidad del procesador de SQL Server en todas las CPU del servidor, debe usar una máscara diferente, según el número de procesadores lógicos que hay en el servidor. En la tabla siguiente se enumeran escenarios de ejemplo.

Número de CPU

Instrucciones para habilitar la afinidad del procesador

02 CPUs

exec sp_configure ' affinity mask ', 0x00000003GOreconfigureGO

04 CPUs

exec sp_configure ' affinity mask ', 0x0000000FGOreconfigureGO

08 CPUs

exec sp_configure ' affinity mask ', 0x000000FFGOreconfigureGO

16 CPUs

exec sp_configure ' affinity mask ', 0x0000FFFFGOreconfigureGO

CPU de 32

exec sp_configure ' affinity mask ', 0xFFFFFFFFGOreconfigureGO

Nota Es posible que no sea suficiente deshabilitar las características de variante de frecuencia de la CPU en el nivel de la BIOS. Varias utilidades de terceros pueden modificar las frecuencias de la CPU. Algunas implementaciones habilitan los ajustes de frecuencia incluso cuando las CPU están en la configuración de la combinación de energía máxima. En este caso, debe deshabilitar estas utilidades de terceros al ajustar el rendimiento en SQL Server 2005.

Usar utilidades y controladores de terceros para sincronizar las frecuencias de la CPU y los contadores del reloj de la CPU

En raras ocasiones, un sistema puede requerir una actualización del fabricante para corregir problemas de frecuencia de la CPU. Es recomendable comprobar si el sistema tiene las actualizaciones de BIOS, microcódigo y firmware más recientes si sospecha que el sistema puede tener un problema.

Más información

Microsoft SQL Server 2000 y versiones anteriores de SQL Server usan los mecanismos de temporización de Windows. Los mecanismos de temporización usan valores de milisegundos. Por lo general, esta precisión es de 10 a 15 ms. Sin embargo, la precisión puede ser tan grande como 55 ms. Las consultas de SQL Server se completan con frecuencia en milisegundos de un solo dígito o en varias fases de tiempo. Esta precisión requiere un temporizador de alta resolución. Por lo tanto, estas versiones de SQL Server informan de la duración de algunas consultas como de 0 ms. Por lo tanto, es difícil supervisar el rendimiento y ajustar el rendimiento de SQL Server en versiones anteriores de SQL Server. SQL Server 2005 mejora la precisión al usar el contador de CPU de alta resolución para proporcionar funciones de intervalos de microsegundos. Al usar las tecnologías que se enumeran en la sección "Resumen", los valores de temporización notificados pueden ser incorrectos. Este problema puede afectar a los siguientes objetos y características:

  • Seguimiento de eventos:

    • El evento de atención

    • Eventos en el nodo procedimientos almacenados

    • Eventos en el nodo TSQL

    • Eventos en el nodo objetos

    • Eventos en el nodo transacciones

  • Vistas de administración dinámica:

    • sys.dm_exec_query_stats

    • sys.dm_exec_requests

    • sys.dm_exec_sessions

    • sys.dm_io_pending_io_requests

    • sys.dm_os_ring_buffers

    • sys.dm_os_sys_info

    • sys.dm_io_virtual_file_stats

    • sys.dm_os_wait_stats

  • La instrucción SET STATISTICs TIME

  • La tabla del sistema sysprocesses

Después de instalar el Service Pack 2 (SP2) de SQL Server 2005, SQL Server registra un mensaje de error en el registro de errores cuando SQL Server detecta que los temporizadores de alta resolución no están sincronizados entre las CPU. El mensaje de error indica que los intervalos de rendimiento pueden no ser exactos y que los usuarios deben usar los datos de rendimiento con precaución. El texto del mensaje de error se parece a uno de los siguientes mensajes de error:

Mensaje de error 1

El contador de marca de tiempo de la CPU en el identificador de programador 2 no está sincronizado con otras CPU.

Mensaje de error 2

La frecuencia de la marca de tiempo de CPU ha cambiado de 191469 a 1794177 TICs por milisegundo. La nueva frecuencia se utilizará

SQL Server usa la instrucción de contador de marca de tiempo real (RDTSC) para adquirir el recuento de marcas de CPU de 64 bits. Puede dividir este valor por la frecuencia de la CPU para convertir el valor en valores de milisegundos. Las variaciones de tiempo pueden producirse cuando se produce el cambio o la frecuencia de la CPU.

Versión de CPU

La versión de la CPU se define como un cambio deliberado en la frecuencia de CPU. La versión de la CPU también se puede denominar tecnología Intel SpeedStep o AMD PowerNow! tecnología. Cuando se produce el recorrido de la CPU, la velocidad de la CPU puede aumentar o disminuir en incrementos tan pequeños como 50 MHz para ahorrar energía y reducir la producción de calor. Las CPU que se encuentran en el mismo nodo de acceso no uniforme a memoria (NUMA) no ajustan las frecuencias de forma independiente. La tabla siguiente muestra cómo los cambios de la versión de la CPU pueden afectar al cálculo del tiempo.

Action

Marcas RDTSC

Marcas por milisegundo (frecuencia)

Hora de reloj de pared

Iniciar lote

1

200

0

Paso de frecuencia hacia abajo

200

100

1ms

Finalizar lote

500

3ms

TOTALES

500

4ms

SQL Server captura las marcas de RDTSC en las marcas de RDTSC de inicio y de finalización. Después, SQL Server divide las marcas por el valor de frecuencia. En este ejemplo, se producen los cálculos de intervalos siguientes al usar un valor de frecuencia de 200 o 100:

  • Frecuencia 200: 500/200 = 2,5 ms

  • Frecuencia 100: 500/100 = 5 ms

Ninguno de los cálculos de temporización coincide con el tiempo de reloj real de 4 ms. Si este cálculo se usa en un evento de seguimiento de RPC: completado , las columnas de datos de duración y hora de finalización no se notifican correctamente. El evento RPC: Completed captura el contador de reloj de la pared de inicio y de CPU. Para obtener un tiempo de resolución superior al de los suministros de Windows en SQL Server 2005, las columnas de datos de duración y hora de finalización de un seguimiento de SQL Server se calculan con el contador de marca de CPU transcurrido. La columna hora de finalización se calcula agregando la columna duración a la columna hora de inicio . En este ejemplo, la columna hora de finalización se calcula incorrectamente al agregar 2,5 ms o 5 ms a la hora de inicio.

Desvia

El desplazamiento es una divergencia en los valores del reloj de la CPU. Los sistemas que tienen varias CPU pueden producir diferentes valores del reloj de la CPU para el mismo momento. Aunque no es común, las CPU pueden experimentar la separación del reloj a lo largo del tiempo. En el ejemplo siguiente se muestra cómo los cambios de deformación pueden afectar al resultado de la columna de datos Duration en una traza de SQL Server. En el ejemplo se supone que la frecuencia de la CPU se mantiene estable en 200 TICs por milisegundo. En la tabla siguiente se muestran los eventos de este escenario.

Action

CPU programada de Windows

CPU 1 RDTSC

CPU 2 RDTSC

Hora de reloj de pared

Iniciar lote

1

100

1100

0

Finalizar lote

1

900

1900

4 MS

TOTALES

4 MS

SQL Server captura las marcas de RDTSC en los puntos inicial y final. Después, SQL Server divide las marcas de RDTSC por el valor de frecuencia. En este ejemplo, Windows programó el subproceso de trabajo de SQL Server en dos CPU diferentes. El subproceso de trabajo de SQL Server que procesa el lote se ejecutó por primera vez en la primera CPU (CPU 1). Sin embargo, la ejecución del lote se interrumpió en algún momento y SQL Server envió la ejecución del lote a la cola de espera. Cuando SQL Server envía de nuevo el subproceso de trabajo de SQL Server que devuelve este lote a la cola Runnable, Windows envió el subproceso para que se ejecutara en la segunda CPU (CPU 2). El subproceso de trabajo de SQL Server terminó de ejecutarse en la CPU 2. Debido a la desviación de la CPU, el valor final de la marca que se capturó en la CPU 2 era 1900 en lugar de 900. Puede evitar este comportamiento si habilita la afinidad del procesador de SQL Server. En este ejemplo se usan los siguientes cálculos de intervalos:

  • Valor incorrecto pero notificado: (1900-100 = 1800)/200 = 9 MS

  • Valor correcto: (900 – 100 = 800)/200 = 4 MS

El valor de la columna Duration para el evento RPC: Completed se mostraba como 9 MS en lugar de 4 ms. Este resultado es más del doble del valor correcto de 4 ms. Los mensajes de advertencia de desplazamiento se agregan a SQL Server 2005 para indicar que los resultados de rendimiento mencionados anteriormente pueden no ser confiables. En algunas situaciones no cubiertas, SQL Server 2005 SP2 puede informar de mensajes de advertencia sobre lo siguiente:

  • Mensajes de advertencia de deriva falsa

  • El desplazamiento puede convertirse en decenas de milisegundos sin causar un efecto importante en el sistema

Debe tener cuidado al evaluar las salidas relacionadas con el rendimiento y al comparar las salidas relacionadas con el rendimiento con los intervalos de reloj de la pared. Si no hay signos de otros problemas de rendimiento, normalmente puede pasar por alto los mensajes de advertencia de desplazamiento. Por ejemplo, normalmente puede pasar por alto los mensajes de advertencia de desplazamiento en las situaciones siguientes:

  • Los procesos se ejecutan según lo esperado.

  • Las consultas de SQL Server no se ejecutan en patrones de duración extraños.

  • No ve signos de otros cuellos de botella.

Sin embargo, antes de ignorar los mensajes de advertencia de desplazamiento, le recomendamos que se comunique con el fabricante para asegurarse de que no existen problemas de RDTSC conocidos. Puede usar la marca de seguimiento 8033 (-T8033) para volver al comportamiento de informes en la versión original de SQL Server 2005 y en SQL Server 2005 SP1. La versión original de SQL Server 2005 y SQL Server 2005 SP1 no notificarán los mensajes de advertencia. Si está ejecutando la versión original de SQL Server 2005 o SQL Server 2005 SP1 sin problemas, normalmente puede ignorar los mensajes.

¿Por qué se funciona correctamente la instrucción WAITFOR DELAY? ¿Qué hay de procesos periódicos del sistema?

Los mecanismos de tiempo de espera no se ven afectados por el diseño de alta resolución. SQL Server no usa el temporizador de alta resolución para actividades basadas en el temporizador. Algunas actividades de tiempo de espera se basan en el temporizador de resolución reducido que usa la función GetTickCount . Estas actividades de tiempo de espera incluyen el tiempo de espera de bloqueo, la instrucción WAITFOR DELAY y la detección de bloqueo.

Para obtener más información, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:

938448 Un servidor basado en Windows Server 2003 puede experimentar el desplazamiento de contador de marca de tiempo si el servidor usa procesadores AMD Opteron de doble núcleo o procesadores multiprocesador AMD Opteron

895980 Los programas que usan la función QueryPerformanceCounter pueden funcionar mal en Windows Server 2003 y en Windows XPLos productos de terceros que se describen en este artículo están fabricados por compañías que son independientes de Microsoft. Microsoft no ofrece ninguna garantía, implícita ni de cualquier otro tipo, sobre el rendimiento o la confiabilidad de estos productos.

¿Necesita más ayuda?

Ampliar sus conocimientos
Explorar los cursos
Obtener nuevas características primero
Unirse a Microsoft Insider

¿Le ha sido útil esta información?

¡Gracias por sus comentarios!

Gracias por sus comentarios. Quizá le interese ponerse en contacto con uno de nuestros agentes de soporte de Office.

×