Valores de sincronización de SQL Server pueden ser incorrectos al utilizar utilidades o tecnologías que cambian las frecuencias de la CPU

Resumen

Microsoft SQL Server 2005 utiliza el contador de CPU alta resolución para proporcionar capacidades de temporización microsegundo. Un microsegundo es la millonésima de segundo (o una milésima de un milisegundo). Sin embargo, los valores de sincronización de SQL Server pueden ser incorrectos si utiliza tecnologías que cambian las frecuencias de la CPU. Por ejemplo, este problema puede producirse cuando se utiliza cualquiera de las siguientes tecnologías:
  • CPU stepping
  • AMD Cool ' silencioso tecnología
  • Varias combinaciones de energía
Este artículo contiene métodos e información adicional para ayudarle a solucionar este problema.

Síntomas

Cuando se utiliza la instrucción SET STATISTICS TIME para mostrar los tiempos de compilación, análisis y ejecución de servidor, puede obtener valores incorrectos. Por ejemplo, puede observar 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 del ajuste del rendimiento. Este problema se produce cuando se utiliza una de las tecnologías que se enumeran en la sección "Resumen" en el servidor.

Causa

Este problema se produce porque han cambiado las frecuencias de la CPU cuando se utilizan estas tecnologías. SQL Server 2005 utiliza el contador de CPU alta resolución para proporcionar capacidades de temporización microsegundo. Si se cambian las frecuencias de la CPU para ahorrar energía y reducir la potencia calorífica, duraciones calculadas pueden ser incorrectas.

Solución

Información del 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 siguiente número de artículo para verlo en Microsoft Knowledge Base:
913089 cómo obtener el service pack más reciente para SQL Server 2005
Nota: En SQL Server 2005 Service Pack 3 y service packs posteriores, no se utiliza la marca de tiempo de procesador. Estas versiones de SQL Server 2005 utilizan un temporizador más confiable que tiene una precisión máxima de 1 milisegundo.

Estado

Este problema se corrigió primero en SQL Server 2005 Service Pack 3.

Solución alternativa

SQL Server 2005 requiere puntos de datos conocidos y estable para realizar el ajuste del rendimiento precisa. Si los ajustes de frecuencia de CPU dinámicos están habilitados en el equipo, puede deshabilitar modo las CPU mantienen una velocidad de frecuencia estable antes de empezar a supervisar y ajustar el rendimiento de SQL Server. Para ello, utilice los métodos siguientes.

Configurar la combinación de energía en el equipo para forzar que la CPU permanezca en frecuencia máxima

Para ello, siga estos pasos:
  1. Haga clic en Inicio, haga clic en Ejecutar, escriba Powercfg.cply, a continuación, haga clic en Aceptar.
  2. En el cuadro de diálogo Propiedades de opciones de energía , haga clic en Siempre en la lista de combinaciones de energía .
  3. Haga clic en Aceptar.
Puede producirse una deriva. A la deriva es una discrepancia entre los valores de frecuencia de CPU. Para obtener más información, consulte la sección "Desplazamiento". En este caso, debe reiniciar Microsoft Windows para volver a sincronizar las frecuencias de todas las CPU después de cambiar la combinación de energía.

Si no puede reiniciar el equipo, habilitar la afinidad de procesador de SQL Server evitar que los subprocesos de trabajo de SQL Server se moviera entre las CPU. Al hacerlo, no es necesario que reinicie el equipo aunque se produzca una divergencia entre los valores de frecuencia de CPU. Para habilitar la afinidad de procesador de SQL Server para todas las CPU en el servidor, debe utilizar una máscara diferente, dependiendo del número de procesadores lógicos que están en el servidor.

La tabla siguiente muestran escenarios de ejemplo.
Número de CPUInstrucciones para habilitar la afinidad del procesador
02 CPUexec sp_configure 'affinity mask', 0 x 00000003
IR
volver a configurar
IR
04 CPUexec sp_configure 'affinity mask', 0x0000000F
IR
volver a configurar
IR
08 CPUexec sp_configure 'affinity mask', 0x000000FF
IR
volver a configurar
IR
16 CPUexec sp_configure 'affinity mask' 0x0000FFFF
IR
volver a configurar
IR
32 CPUexec sp_configure 'affinity mask' 0xFFFFFFFF
IR
volver a configurar
IR
Nota: Puede ser insuficiente para deshabilitar características de variación de frecuencia de CPU en el nivel de la BIOS. Varias utilidades de terceros pueden alterar las frecuencias de la CPU. Algunas implementaciones permiten ajustes de frecuencia, incluso cuando las CPU están bajo Configuración del régimen de potencia máxima. En este caso, debe deshabilitar estas utilidades de otros fabricantes cuando se realiza la optimización del rendimiento en SQL Server 2005.

Utilizar controladores y utilidades de terceros para sincronizar las frecuencias de la CPU y contadores de reloj de CPU

En raras ocasiones, un sistema puede requerir una actualización del fabricante para corregir problemas de frecuencia de CPU. Es una mejor práctica para comprobar el sistema para las actualizaciones del BIOS, el 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 utilizan los mecanismos de sincronización de Windows. Los mecanismos de sincronización utilizan valores de precisión de milisegundos. Normalmente, esta precisión es 10 a 15 ms., sin embargo, la precisión puede ser tan grande como ms 55. Las consultas de SQL Server con frecuencia completan dentro de un solo dígito milisegundos o intervalos de tiempo microsegundo. Esta precisión requiere un temporizador de alta resolución. Por lo tanto, estas versiones de informe de SQL Server la duración de algunas consultas como ms. 0 por tanto, resulta 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 mediante el contador de CPU alta resolución para proporcionar capacidades de temporización microsegundo. Al utilizar las tecnologías que se enumeran en la sección "Resumen", los valores de tiempo notificado pueden ser incorrectos.

Este problema puede afectar a los objetos y las características siguientes:
  • 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 de 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 exacto, y los usuarios deben utilizar los datos de rendimiento con precaución.

El texto del mensaje de error similar a uno de los siguientes mensajes de error:
Mensaje de error 1
El contador de marca de tiempo de CPU en id planificador 2 no está sincronizado con otras CPUs.
Mensaje de error 2
Frecuencia de marca de tiempo de CPU ha cambiado de 191469 a 1794177 pasos por milisegundo. Se utilizará la nueva frecuencia
SQL Server utiliza la instrucción de contador de marca de tiempo Real (RDTSC) para adquirir el contador de CPU de 64 bits. Puede dividir este valor por la frecuencia de la CPU para convertir el valor en valores de milisegundo. Variaciones de la sincronización pueden producirse cuando los cambios de frecuencia de CPU o deriva se produce.

CPU stepping

CPU stepping se define como un cambio deliberado en frecuencia de la CPU. CPU stepping también se conoce como la tecnología Intel SpeedStep o AMD PowerNow! tecnología. Cuando CPU stepping se produce, la velocidad de la CPU puede aumentar o disminuir en incrementos tan pequeños como 50 MHz para ahorrar energía y reducir la potencia calorífica. CPU que están en el mismo nodo de memoria no uniforme (NUMA) de acceso no ajustan por separado las frecuencias.

La tabla siguiente muestra cómo los cambios de versión de CPU pueden afectar los cálculos de tiempo.
AcciónDiferencia entre RDTSC ticsPasos por milisegundo (frecuencia)Tiempo de reloj de pared
Iniciar lote12000
Frecuencia de paso descendente2001001ms
Lote final5003ms
TOTALES5004ms
SQL Server captura los pasos RDTSC en pasos RDTSC el inicio y el final. A continuación, SQL Server divide las marcas de paso por el valor de la frecuencia.

En este ejemplo, los siguientes cálculos de sincronización se producen cuando se utiliza un valor de frecuencia de 200 o 100:
  • Frecuencia de 200: 500/200 = 2,5 ms
  • Frecuencia 100: 500/100 = 5 ms
Ninguno de los cálculos de tiempo coincide con la hora del reloj de pared real de 4 ms.

Si este cálculo se utiliza en un RPC: completado columnas de datos de evento, la duración y la hora final de seguimiento están registradas incorrectamente. El RPC: completado evento captura la hora del reloj de pared inicial y recuento de graduación de la CPU. Para obtener mayor tiempo de resolución de Windows proporciona en columnas de datos de SQL Server 2005, la duración y la hora de finalización de un SQL Server trace se calculan utilizando el contador de CPU transcurrido. La columna hora de finalización se calcula agregando la columna duración en la columna hora de inicio . En este ejemplo, la columna hora de finalización se calcula agregando incorrectamente 2,5 ms o 5 ms a la hora de inicio.

Deriva

Deriva es una discrepancia en los valores de reloj de CPU. Los sistemas que tienen varias CPU pueden producir diferentes valores de reloj de CPU para el mismo punto en el tiempo. Aunque no es común, CPU pueden experimentar separación de reloj con el tiempo.

En el ejemplo siguiente se muestra cómo los cambios de la deriva pueden afectar al resultado de la columna de datos de duración en una traza de SQL Server. En el ejemplo se supone que la frecuencia de la CPU se mantiene estable en 200 pasos por milisegundo. La tabla siguiente muestra los eventos en este escenario.
AcciónCPU programada de WindowsCPU 1 RDTSCCPU 2 RDTSCTiempo de reloj de pared
Iniciar lote110011000
Lote final290019004 ms
TOTALES4 ms
SQL Server captura los pasos RDTSC en los puntos de inicio y los puntos finales. A continuación, SQL Server divide las marcas RDTSC por el valor de la frecuencia. En este ejemplo, Windows programa el subproceso de trabajo de SQL Server en dos CPU diferentes. El subproceso de trabajo de SQL Server que da servicio el lote primero se ejecutó en la primera CPU (CPU 1).

Sin embargo, la ejecución por lotes se ha interrumpido en algún momento, y SQL Server envía la ejecución por lotes a la cola pendiente. Cuando SQL Server envía el subproceso de trabajo de SQL Server que da servicio a este lote a la cola puede ejecutar otra vez, Windows envía el subproceso para ejecutarse en la segunda CPU (CPU 2). El subproceso de trabajo de SQL Server completado ejecutando en la CPU 2. Debido a los cambios en la CPU, el valor de paso final que fue capturado de 2 CPU fue 1900 en lugar de 900. Puede evitar este comportamiento si habilita la afinidad del procesador de SQL Server.

En este ejemplo se utilizan los siguientes cálculos de tiempo:
  • El pero incorrecto informó el valor: (1900 – 100 = 1800) / 200 = 9 ms
  • Corregir el valor: (900 – 100 = 800) / 200 = 4 ms
El valor de la columna duración de la RPC: completado evento se mostrarían como 9 ms en lugar de 4 ms. este resultado es más del doble del valor correcto 4 ms.

Mensajes de advertencia de deriva se agregan a SQL Server 2005 para indicar que los resultados de rendimiento que se mencionan anteriormente pueden no ser confiables. En algunas situaciones no cubiertas, SQL Server 2005 SP2 puede informar de mensajes de advertencia acerca de lo siguiente:
  • Mensajes de advertencia falsos deriva
  • La deriva puede convertirse en decenas de milisegundos sin causar un efecto notable del sistema
Debe tener cuidado cuando se evalúan los resultados relacionados con el rendimiento y cuando se comparan los resultados del rendimiento relacionado con frecuencia de reloj de pared. Si no hay ningún síntoma de otros problemas de rendimiento, normalmente puede omitir los mensajes de advertencia de deriva. Por ejemplo, normalmente puede omitir los mensajes de advertencia de deriva en las siguientes situaciones:
  • Los procesos se ejecutan según lo previsto.
  • Las consultas de SQL Server no se están ejecutando en patrones duracional extraños.
  • No ve signos de otros cuellos de botella.
Sin embargo, antes de pasar por alto la deriva advertencia mensajes, le recomendamos que se comunique con el fabricante para asegurarse de que no hay problemas conocidos de RDTSC existe.

Puede utilizar el indicador de traza 8033 (– T8033) para volver al comportamiento de generación de informes en la versión original de SQL Server 2005 y en SQL Server 2005 SP1. La versión de lanzamiento original de SQL Server 2005 y SQL Server 2005 SP1 no informan de los mensajes de advertencia de deriva. Si está ejecutando la versión de lanzamiento original de SQL Server 2005 o SQL Server 2005 SP1 sin problemas, normalmente puede omitir los mensajes.

¿Por qué la instrucción WAITFOR DELAY funciona correctamente? ¿Qué procesos del sistema periódico?

Mecanismos de tiempo de espera no se ven afectados por el diseño de alta resolución. SQL Server no utiliza el temporizador de alta resolución para actividades basadas en temporizador. Algunas actividades de tiempo de espera se basan en el temporizador de resolución reducida que utiliza 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 interbloqueo.
Para obtener más información, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:

938448 servidor A Windows Server 2003 puede experimentar deriva de contador de marca de hora si el servidor utiliza procesadores AMD Opteron de doble núcleo o procesadores AMD Opteron de multiprocesador

895980 los programas que utilizan la función QueryPerformanceCounter pueden funcionar lentamente en Windows Server 2003 y en Windows XP

Los productos de terceros que se indican en este artículo están fabricados por compañías independientes de Microsoft. Microsoft no otorga ninguna garantía, implícita o de otro tipo, respecto al rendimiento o confiabilidad de estos productos.
Propiedades

Id. de artículo: 931279 - Última revisión: 14 ene. 2017 - Revisión: 1

Comentarios