Compartir a través de


Propiedades del grupo de subprocesos

Analysis Services usa varios subprocesos para muchas operaciones, lo que mejora el rendimiento general del servidor mediante la ejecución de varios trabajos en paralelo. Para administrar subprocesos de forma más eficaz, Analysis Services usa grupos de subprocesos para preasignar subprocesos y facilitar la disponibilidad de subprocesos para el siguiente trabajo.

Cada instancia de Analysis Services mantiene su propio conjunto de grupos de subprocesos. Existen diferencias significativas en el modo en que las instancias tabulares y multidimensionales usan grupos de subprocesos. La diferencia más importante es que solo las soluciones multidimensionales usan el grupo de IOProcess subprocesos. Por lo tanto, la PerNumaNode propiedad, descrita en este tema, no es significativa para las instancias tabulares.

Este tema contiene las secciones siguientes:

Nota:

La implementación tabular en sistemas NUMA está fuera del ámbito de este tema. Aunque las soluciones tabulares se pueden implementar correctamente en sistemas NUMA, las características de rendimiento de la tecnología de base de datos en memoria que usan los modelos tabulares pueden mostrar ventajas limitadas en arquitecturas de escalado vertical. Para obtener más información, vea Caso práctico de Analysis Services: Uso de modelos tabulares en soluciones comerciales a gran escala y ajuste de tamaño de hardware a una solución tabular.

Administración de subprocesos en Servicios de Análisis

Analysis Services usa varios subprocesos para aprovechar los recursos de CPU disponibles aumentando el número de tareas que se ejecutan en paralelo. El motor de almacenamiento es multiproceso. Algunos ejemplos de trabajos multiproceso que se ejecutan en el motor de almacenamiento incluyen el procesamiento de objetos en paralelo, la gestión de consultas discretas que se han enviado al motor de almacenamiento, o la devolución de valores de datos solicitados por una consulta. El motor de cálculo, debido a la naturaleza en serie de los cálculos que evalúa, es de un solo hilo. Cada consulta se ejecuta principalmente en un único subproceso, solicitando y a menudo esperando los datos devueltos por el motor de almacenamiento. Los subprocesos de consulta tienen ejecuciones más largas y solo se liberan una vez completada la consulta completa.

De forma predeterminada, en las versiones de SQL Server 2012 y versiones posteriores, Analysis Services usará todos los procesadores lógicos disponibles, hasta 640 en sistemas que ejecutan ediciones superiores de Windows y SQL Server. Al iniciarse, el proceso de msmdsrv.exe se asignará a un grupo de procesadores específico, pero con el tiempo los subprocesos se pueden programar en cualquier procesador lógico, en cualquier grupo de procesadores.

Un efecto secundario del uso de un gran número de procesadores es que a veces puede experimentar una degradación del rendimiento, ya que las cargas de consulta y procesamiento se distribuyen entre un gran número de procesadores y aumenta la contención por estructuras de datos compartidas. Esto puede ocurrir especialmente en sistemas de gama alta que usan la arquitectura NUMA, pero también en sistemas que no son NUMA que ejecutan varias aplicaciones de uso intensivo de datos en el mismo hardware.

Para solucionar este problema, puede establecer afinidad entre los tipos de operaciones de Analysis Services y un conjunto específico de procesadores lógicos. La GroupAffinity propiedad permite crear máscaras de afinidad personalizadas que especifican qué recurso del sistema se va a usar para cada uno de los tipos de grupo de subprocesos administrados por Analysis Services.

La afinidad personalizada se puede configurar en cualquiera de los cinco grupos de hilos utilizados para diversos trabajos de Analysis Services.

  • Parsing \ Short es un conjunto de análisis para solicitudes cortas. Las solicitudes que caben en un único mensaje de red se consideran cortas.

  • Análisis \ Long es un grupo de análisis para todas las demás solicitudes que no caben en un único mensaje de red.

    Nota:

    Se puede usar un subproceso de cualquiera de los dos grupos de análisis para ejecutar una consulta. Las consultas que se ejecutan rápidamente, como una solicitud de detección o cancelación rápidas, se ejecutan a veces inmediatamente en lugar de ponerlas en cola en el grupo de subprocesos de consulta.

  • Query es el grupo de subprocesos que ejecuta todas las solicitudes no controladas por el grupo de subprocesos de análisis. Los subprocesos de este grupo de subprocesos ejecutarán todos los tipos de operaciones, como Descubrimientos, comandos MDX, DAX, DMX y DDL.

  • IOProcess se utiliza para trabajos de entrada/salida asociados a las interrogaciones del motor de base de datos en el motor multidimensional. Se espera que el trabajo realizado por estos subprocesos no tenga dependencias en otros subprocesos. Normalmente, estos subprocesos analizarán un único segmento de una partición y realizarán el filtrado y la agregación en los datos del segmento. IOProcess los hilos de ejecución son especialmente sensibles a las configuraciones de hardware NUMA. Por lo tanto, este grupo de subprocesos tiene la PerNumaNode propiedad de configuración que se puede usar para optimizar el rendimiento si es necesario.

  • Process se utiliza para trabajos de mayor duración del motor de almacenamiento, incluidas las agregaciones, la indexación y las operaciones de confirmación. El modo de almacenamiento ROLAP también usa subprocesos del grupo de subprocesos de procesamiento.

Nota:

Aunque Msmdsrv.ini tiene la configuración del grupo de subprocesos en la VertiPaq sección, VertiPaq\ThreadPool\GroupAffinity y ThreadPool\CPUs no están documentados intencionadamente. Estas propiedades son actualmente inoperativas y están reservadas para uso futuro.

Para atender las solicitudes, Analysis Services puede superar el límite máximo del grupo de subprocesos, solicitando subprocesos adicionales si son necesarios para realizar el trabajo. Sin embargo, cuando un subproceso termina de ejecutar su tarea, si el recuento actual de subprocesos es mayor que el límite máximo, el subproceso simplemente finaliza, en lugar de devolverlo al grupo de subprocesos.

Nota:

Superar el número máximo de grupo de hilos es una protección invocada solo cuando surgen ciertas condiciones de bloqueo. Para evitar la creación descontrolada de subprocesos más allá del máximo permitido, los subprocesos se crean de forma gradual, tras un breve retraso, una vez alcanzado el límite máximo. Superar el número máximo de subprocesos puede provocar una ralentización en la ejecución de tareas. Si los contadores de rendimiento muestran que los recuentos de subprocesos superan regularmente el tamaño máximo del grupo de subprocesos, puede considerar que como indicador de que los tamaños del grupo de subprocesos son demasiado pequeños para el grado de simultaneidad que se solicita desde el sistema.

De forma predeterminada, Analysis Services determina el tamaño del grupo de subprocesos basándose en el número de núcleos. Puede observar los valores predeterminados seleccionados examinando el archivo msmdsrv.log después del inicio del servidor. Como ejercicio de optimización del rendimiento, puede optar por aumentar el tamaño del grupo de subprocesos, así como otras propiedades, para mejorar el rendimiento de las consultas o el procesamiento.

Referencia de las propiedades del grupo de subprocesos

En esta sección se describen las propiedades del grupo de subprocesos que se encuentran en el archivo msmdsrv.ini de cada instancia de Analysis Services. También aparece un subconjunto de estas propiedades en SQL Server Management Studio.

Las propiedades se enumeran en orden alfabético.

Nombre Tipo Descripción Predeterminado Orientación
IOProcess \ Concurrency doble Valor de punto flotante de precisión doble que determina el algoritmo para establecer un objetivo en el número de subprocesos que pueden estar en la cola al mismo tiempo. 2.0 Una propiedad avanzada que no debe cambiar, excepto en las instrucciones del soporte técnico de Microsoft.

La simultaneidad se usa para inicializar grupos de subprocesos, que se implementan mediante puertos de finalización de E/S en Windows. Consulte Puertos de finalización de E/S para obtener más información.

Solo se aplica a modelos multidimensionales.
IOProcess \ GroupAffinity cuerda / cadena Conjunto de valores hexadecimales que corresponden a grupos de procesadores en el sistema, utilizado para establecer la afinidad de los subprocesos del grupo de subprocesos IOProcess con los procesadores lógicos en cada grupo de procesadores. Ninguno Puede usar esta propiedad para crear afinidades personalizadas. La propiedad está vacía de forma predeterminada.

Consulte Set GroupAffinity para asignar afinidad de subprocesos a procesadores en un grupo de procesadores para obtener más información.

Solo se aplica a modelos multidimensionales.
IOProcess \ MaxThreads Int Entero de 32 bits con signo que especifica el número máximo de subprocesos que se van a incluir en el grupo de subprocesos. 0 0 indica que el servidor determina los valores predeterminados. De forma predeterminada, el servidor establece este valor en 64 o en 10 veces el número de procesadores lógicos, lo que sea mayor. Por ejemplo, en un sistema de 4 núcleos con hyperthreading, el grupo de subprocesos máximo es de 80 subprocesos.

Si establece este valor en un valor negativo, el servidor multiplica ese valor por el número de procesadores lógicos. Por ejemplo, cuando se establece en -10 en un servidor con 32 procesadores lógicos, el máximo es de 320 subprocesos.

El valor máximo está sujeto a procesadores disponibles según las máscaras de afinidad personalizadas que haya definido anteriormente. Por ejemplo, si ya establece la afinidad del grupo de subprocesos para usar 8 de 32 procesadores y ahora establece MaxThreads en -10, el límite superior del grupo de subprocesos sería 10 veces 8 o 80 subprocesos.

Los valores reales usados para esta propiedad de grupo de subprocesos se escriben en el archivo de registro msmdsrv al iniciar el servicio.

Puede encontrar más información sobre cómo ajustar la configuración del grupo de subprocesos en la Guía de operaciones de Analysis Services.

Solo se aplica a modelos multidimensionales.
IOProcess \ MinThreads Int Entero de 32 bits con signo que especifica el número mínimo de subprocesos que se van a preasignar para el grupo de subprocesos. 0 0 indica que el servidor determina los valores predeterminados. De forma predeterminada, el mínimo es 1.

Si establece este valor en un valor negativo, el servidor lo multiplica por el número de procesadores lógicos.

Los valores reales usados para esta propiedad de grupo de subprocesos se escriben en el archivo de registro msmdsrv al iniciar el servicio.

Puede encontrar más información sobre cómo ajustar la configuración del grupo de subprocesos en la Guía de operaciones de Analysis Services.

Solo se aplica a modelos multidimensionales.
IOProcess \ PerNumaNode Int Entero con signo de 32 bits que determina la cantidad de grupos de hilos creados para el proceso msmdsrv. -1 Los valores válidos son -1, 0, 1, 2

-1 = El servidor selecciona una estrategia de grupo de subprocesos de E/S diferente en función del número de nodos NUMA. En los sistemas que tienen menos de 4 nodos NUMA, el comportamiento del servidor es el mismo que 0 (se crea un grupo de subprocesos de IOProcess para el sistema). En los sistemas que tienen 4 o más nodos, el comportamiento es el mismo que 1 (se crean grupos de subprocesos de IOProcess para cada nodo).

0 = Deshabilita los grupos de subprocesos por nodo NUMA para que se utilice un único grupo de subprocesos de IOProcess por el proceso de msmdsrv.exe.

1 = Habilita un grupo de subprocesos IOProcess por nodo NUMA.

2 = Un grupo de subprocesos IOProcess por procesador lógico. Los hilos de cada grupo de hilos se vinculan al nodo NUMA del procesador lógico, con el procesador ideal configurado en el procesador lógico.

Consulte Establecimiento de PerNumaNode para establecer la afinidad entre subprocesos de E/S y procesadores en un nodo NUMA para obtener más información.

Solo se aplica a modelos multidimensionales.
IOProcess \ PriorityRatio Int Entero de 32 bits con signo que se puede usar para asegurarse de que los subprocesos de menor prioridad se ejecuten incluso cuando una cola de prioridad más alta no está vacía. 2 Una propiedad avanzada que no debe cambiar, excepto en las instrucciones del soporte técnico de Microsoft.

Solo se aplica a modelos multidimensionales.
IOProcess \ StackSizeKB Int Entero de 32 bits con signo que se puede usar para ajustar la asignación de memoria durante la ejecución del subproceso. 0 Una propiedad avanzada que no debe cambiar, excepto en las instrucciones del soporte técnico de Microsoft.

Solo se aplica a modelos multidimensionales.
Análisis sintáctico \ Long \ Concurrency doble Valor de punto flotante de doble precisión que determina el algoritmo para establecer un objetivo en el número de subprocesos que se pueden poner en cola al mismo tiempo. 2.0 Una propiedad avanzada que no debe cambiar, excepto en las instrucciones del soporte técnico de Microsoft.

La simultaneidad se usa para inicializar grupos de subprocesos, que se implementan mediante puertos de finalización de E/S en Windows. Consulte Puertos de finalización de E/S para obtener más información.
Análisis sintáctico \ Long \ GroupAffinity cuerda / cadena Matriz de valores hexadecimales que corresponden a grupos de procesadores del sistema, utilizados para establecer la afinidad de los hilos de procesamiento con procesadores lógicos de cada grupo de procesadores. Ninguno Puede usar esta propiedad para crear afinidades personalizadas. La propiedad está vacía de forma predeterminada.

Consulte GroupAffinity para configurar la afinidad de los subprocesos con los procesadores en un grupo de procesadores para obtener más información.
Análisis sintáctico \ Long \ NumThreads Int Propiedad de enteros con signo de 32 bits que define el número de subprocesos que se pueden crear para ejecutar comandos largos. 0 0 indica que el servidor determina los valores predeterminados. El comportamiento predeterminado es establecer NumThreads en un valor absoluto de 4 o 2 veces el número de procesadores lógicos, lo que sea mayor.

Si establece este valor en un valor negativo, el servidor multiplica ese valor por el número de procesadores lógicos. Por ejemplo, cuando se establece en -10 en un servidor con 32 procesadores lógicos, el máximo es de 320 subprocesos.

El valor máximo está sujeto a procesadores disponibles según las máscaras de afinidad personalizadas que haya definido anteriormente. Por ejemplo, si ya establece la afinidad de grupo de subprocesos para usar 8 de 32 procesadores y ahora establece NumThreads en -10, el límite superior del grupo de subprocesos sería 10 veces 8 o 80 subprocesos.

Los valores reales usados para esta propiedad de grupo de subprocesos se escriben en el archivo de registro msmdsrv al iniciar el servicio.
Análisis sintáctico \ Long \ PriorityRatio Int Entero de 32 bits con signo que se puede utilizar para garantizar que los subprocesos de menor prioridad se ejecuten ocasionalmente, incluso cuando la cola de mayor prioridad no está vacía. 0 Una propiedad avanzada que no debe cambiar, excepto en las instrucciones del soporte técnico de Microsoft.
Análisis sintáctico \ Long \ StackSizeKB Int Entero de 32 bits con signo que se puede usar para ajustar la asignación de memoria durante la ejecución del subproceso. 0 Una propiedad avanzada que no debe cambiar, excepto en las instrucciones del soporte técnico de Microsoft.
Análisis sintáctico \ Short \ Concurrency doble Valor de punto flotante de doble precisión que determina el algoritmo para definir un objetivo en la cantidad de subprocesos que pueden ser puestos en cola simultáneamente. 2.0 Una propiedad avanzada que no debe cambiar, excepto en las instrucciones del soporte técnico de Microsoft.

La simultaneidad se usa para inicializar grupos de subprocesos, que se implementan mediante puertos de finalización de E/S en Windows. Consulte Puertos de finalización de E/S para obtener más información.
Análisis sintáctico \ Short \ GroupAffinity cuerda / cadena Matriz de valores hexadecimales que corresponden a grupos de procesadores en el sistema, utilizada para establecer la afinidad de los subprocesos de análisis con los procesadores lógicos de cada grupo de procesadores. Ninguno Puede usar esta propiedad para crear afinidades personalizadas. La propiedad está vacía de forma predeterminada.

Consulte Set GroupAffinity para asignar afinidad de hilos a procesadores en un grupo de procesadores para obtener más información.
Análisis sintáctico \ Short \ NumThreads Int Propiedad entera de 32 bits con signo, la cual define el número de subprocesos que se pueden crear para comandos cortos. 0 0 indica que el servidor determina los valores predeterminados. El comportamiento predeterminado es establecer NumThreads en un valor absoluto de 4 o 2 veces el número de procesadores lógicos, lo que sea mayor.

Si establece ese valor en un valor negativo, el servidor lo multiplica por el número de procesadores lógicos. Por ejemplo, cuando se establece en -10 en un servidor con 32 procesadores lógicos, el máximo es de 320 subprocesos.

El valor máximo está sujeto a procesadores disponibles según las máscaras de afinidad personalizadas que haya definido anteriormente. Por ejemplo, si ya establece la afinidad de grupo de subprocesos para usar 8 de 32 procesadores y ahora establece NumThreads en -10, el límite superior del grupo de subprocesos sería 10 veces 8 o 80 subprocesos.

Los valores reales usados para esta propiedad de grupo de subprocesos se escriben en el archivo de registro msmdsrv al iniciar el servicio.
Análisis sintáctico \ Short \ PriorityRatio Int Entero de 32 bits con signo que se puede usar para asegurarse de que a veces se ejecutan los subprocesos de menor prioridad incluso cuando una cola de prioridad más alta no está vacía. 0 Una propiedad avanzada que no debe cambiar, excepto en las instrucciones del soporte técnico de Microsoft.
Análisis sintáctico \ Short \ StackSizeKB Int Entero de 32 bits con signo que se puede usar para ajustar la asignación de memoria durante la ejecución del subproceso. 64 * procesadores lógicos Una propiedad avanzada que no debe cambiar, excepto en las instrucciones del soporte técnico de Microsoft.
Process \ Concurrency doble Valor de punto flotante de precisión doble que determina el algoritmo para establecer un objetivo en el número de subprocesos que se pueden encolar simultáneamente. 2.0 Una propiedad avanzada que no debe cambiar, excepto en las instrucciones del soporte técnico de Microsoft.

La simultaneidad se usa para inicializar grupos de subprocesos, que se implementan mediante puertos de finalización de E/S en Windows. Consulte Puertos de finalización de E/S para obtener más información.
Process \ GroupAffinity cuerda / cadena Matriz de valores hexadecimales que corresponden a grupos de procesadores en el sistema, que se usan para establecer la afinidad de los subprocesos de procesamiento a procesadores lógicos de cada grupo de procesadores. Ninguno Puede usar esta propiedad para crear afinidades personalizadas. La propiedad está vacía de forma predeterminada.

Consulte GroupAffinity para asignar afinidad de subprocesos a procesadores de un grupo de procesadores para obtener más información.
Process \ MaxThreads Int Entero de 32 bits con signo que especifica el número máximo de subprocesos que se van a incluir en el grupo de subprocesos. 0 0 indica que el servidor determina los valores predeterminados. De forma predeterminada, el servidor establece este valor en un valor absoluto de 64 o el número de procesadores lógicos, lo que sea mayor. Por ejemplo, en un sistema de 64 núcleos con hyperthreading habilitado (lo que da lugar a 128 procesadores lógicos), el máximo del grupo de subprocesos es de 128 subprocesos.

Si establece este valor en un valor negativo, el servidor multiplica ese valor por el número de procesadores lógicos. Por ejemplo, cuando se establece en -10 en un servidor con 32 procesadores lógicos, el máximo es de 320 subprocesos.

El valor máximo está sujeto a procesadores disponibles según las máscaras de afinidad personalizadas que haya definido anteriormente. Por ejemplo, si ya establece la afinidad del grupo de subprocesos para usar 8 de 32 procesadores y ahora establece MaxThreads en -10, el límite superior del grupo de subprocesos sería 10 veces 8 o 80 subprocesos.

Los valores reales usados para esta propiedad de grupo de subprocesos se escriben en el archivo de registro msmdsrv al iniciar el servicio.

Puede encontrar más información sobre cómo ajustar la configuración del grupo de subprocesos en la Guía de operaciones de Analysis Services.
Process \ MinThreads Int Entero de 32 bits con signo que especifica el número mínimo de subprocesos que se deben preasignar en el grupo de subprocesos. 0 0 indica que el servidor determina los valores predeterminados. De forma predeterminada, el mínimo es 1.

Si establece este valor en un valor negativo, el servidor lo multiplica por el número de procesadores lógicos.

Los valores reales usados para esta propiedad de grupo de subprocesos se escriben en el archivo de registro msmdsrv al iniciar el servicio.

Puede encontrar más información sobre cómo ajustar la configuración del grupo de subprocesos en la Guía de operaciones de Analysis Services.
Process \ PriorityRatio Int Entero con signo de 32 bits que se puede utilizar para garantizar que los hilos de menor prioridad se ejecuten a veces incluso cuando una cola de mayor prioridad no está vacía. 2 Una propiedad avanzada que no debe cambiar, excepto en las instrucciones del soporte técnico de Microsoft.
Process \ StackSizeKB Int Entero de 32 bits con signo que se puede usar para ajustar la asignación de memoria durante la ejecución del subproceso. 0 Una propiedad avanzada que no debe cambiar, excepto en las instrucciones del soporte técnico de Microsoft.
Query \ Concurrency doble Valor de punto flotante de precisión doble que determina el algoritmo para establecer un objetivo en el número de subprocesos que pueden estar en cola al mismo tiempo. 2.0 Una propiedad avanzada que no debe cambiar, excepto en las instrucciones del soporte técnico de Microsoft.

La simultaneidad se usa para inicializar grupos de subprocesos, que se implementan mediante puertos de finalización de E/S en Windows. Consulte Puertos de finalización de E/S para obtener más información.
Query \ GroupAffinity cuerda / cadena Matriz de valores hexadecimales que corresponden a grupos de procesadores en el sistema, que se usan para establecer la afinidad de los subprocesos de procesamiento a procesadores lógicos de cada grupo de procesadores. Ninguno Puede usar esta propiedad para crear afinidades personalizadas. La propiedad está vacía de forma predeterminada.

Consulte Establecer GroupAffinity para asignar afinidad de subprocesos a procesadores dentro de un grupo de procesadores para obtener más información.
Query \ MaxThreads Int Entero de 32 bits con signo que especifica el número máximo de subprocesos que se van a incluir en el grupo de subprocesos. 0 0 indica que el servidor determina los valores predeterminados. De forma predeterminada, el servidor establece este valor en un valor absoluto de 10 o 2 veces el número de procesadores lógicos, lo que sea mayor. Por ejemplo, en un sistema de 4 núcleos con hyperthreading, el número máximo de subprocesos es 16.

Si establece este valor como un número negativo, el servidor lo multiplica por el número de procesadores lógicos. Por ejemplo, cuando se establece en -10 en un servidor con 32 procesadores lógicos, el máximo es de 320 subprocesos.

El valor máximo está sujeto a procesadores disponibles según las máscaras de afinidad personalizadas que haya definido anteriormente. Por ejemplo, si ya establece la afinidad del grupo de subprocesos para usar 8 de 32 procesadores y ahora establece MaxThreads en -10, el límite superior del grupo de subprocesos sería 10 veces 8 o 80 subprocesos.

Los valores reales usados para esta propiedad de grupo de subprocesos se escriben en el archivo de registro msmdsrv al iniciar el servicio.

Puede encontrar más información sobre cómo ajustar la configuración del grupo de subprocesos en la Guía de operaciones de Analysis Services.
Query \ MinThreads Int Entero de 32 bits con signo que especifica el número mínimo de hilos que se van a preasignar para el grupo de hilos. 0 0 indica que el servidor determina los valores predeterminados. De forma predeterminada, el mínimo es 1.

Si establece este valor en un valor negativo, el servidor multiplica ese valor por el número de procesadores lógicos.

Los valores reales usados para esta propiedad de grupo de subprocesos se escriben en el archivo de registro msmdsrv al iniciar el servicio.

Puede encontrar más información sobre cómo ajustar la configuración del grupo de subprocesos en la Guía de operaciones de Analysis Services.
Query \ PriorityRatio Int Entero de 32 bits con signo que se puede usar para asegurarse de que a veces se ejecutan subprocesos de menor prioridad incluso cuando una cola de prioridad más alta no está vacía. 2 Una propiedad avanzada que no debe cambiar, excepto en las instrucciones del soporte técnico de Microsoft.
Query \ StackSizeKB Int Entero de 32 bits con signo que se puede usar para ajustar la asignación de memoria durante la ejecución del subproceso. 0 Una propiedad avanzada que no debe cambiar, excepto en las instrucciones del soporte técnico de Microsoft.

Establezca la afinidad de los subprocesos con los procesadores en un grupo de procesadores mediante GroupAffinity.

GroupAffinity se proporciona con fines de ajuste avanzado. Puede usar la GroupAffinity propiedad para establecer la afinidad entre los grupos de subprocesos de Analysis Services y procesadores específicos; sin embargo, para la mayoría de las instalaciones, Analysis Services funciona mejor cuando puede usar todos los procesadores lógicos disponibles. En consecuencia, la afinidad de grupo no se especifica de forma predeterminada.

Si las pruebas de rendimiento indican una necesidad de optimización de CPU, podría considerar un enfoque de nivel superior, como usar el Administrador de recursos de Windows Server para establecer la afinidad entre los procesadores lógicos y un proceso de servidor. Este enfoque puede ser más sencillo de implementar y administrar que definir afinidades personalizadas para grupos de subprocesos individuales.

Si ese enfoque no es suficiente, puede lograr una mayor precisión definiendo afinidades personalizadas para grupos de subprocesos. Es más probable que se recomiende personalizar la configuración de afinidad en sistemas grandes de varios núcleos (ya sean NUMA o no NUMA) que experimentan una degradación del rendimiento porque los grupos de subprocesos se distribuyen en un rango demasiado amplio de procesadores. Aunque puede establecerse GroupAffinity en sistemas que tienen menos de 64 procesadores lógicos, la ventaja es insignificante e incluso puede degradar el rendimiento.

Nota:

GroupAffinity está restringido por ediciones que limitan el número de núcleos utilizados por Analysis Services. Al inicio, Analysis Services utiliza la información de edición y las propiedades GroupAffinity para calcular las máscaras de afinidad para cada uno de los 5 grupos de subprocesos que gestiona. La edición Estándar puede usar un máximo de 16 núcleos. Si instala Analysis Services Standard Edition en un sistema de varios núcleos grande que tenga más de 16 núcleos, Analysis Services solo usará 16 de ellos. Si actualiza una instancia enterprise de una versión anterior, estará limitado a 20 núcleos. Para obtener más información sobre las ediciones y las licencias, vea Información general sobre licencias de SQL Server 2012.

Sintaxis

El valor es hexadecimal para cada grupo de procesadores, con el hexadecimal que representa los procesadores lógicos que Analysis Services intenta usar primero al asignar subprocesos para un grupo de subprocesos determinado.

Máscara de bits para procesadores lógicos

Puede tener hasta 64 procesadores lógicos dentro de un único grupo de procesadores. La máscara de bits es 1 (o 0) para cada procesador lógico del grupo que es utilizado (o no utilizado) por un grupo de hilos. Una vez que hayas calculado la máscara de bits, obtén el valor hexadecimal como el valor de GroupAffinity.

Varios grupos de procesadores

Los grupos de procesadores se determinan en el inicio del sistema. GroupAffinity acepta valores hexadecimales para cada grupo de procesadores de una lista delimitada por comas. Dados varios grupos de procesadores (hasta 10 en sistemas de extremo superior), puede omitir grupos individuales especificando 0x0. Por ejemplo, en un sistema con cuatro grupos de procesadores (0, 1, 2, 3), podría excluir los grupos 0 y 2 escribiendo 0x0 para los valores primero y tercero.

<GroupAffinity>0x0, 0xFF, 0x0, 0xFF</GroupAffinity>

Pasos para calcular la máscara de afinidad del procesador

Puede establecer GroupAffinity en msmdsrv.ini o en páginas de propiedades del servidor en SQL Server Management Studio.

  1. Determinar el número de procesadores y grupos de procesadores

    Puede descargar la utilidad Coreinfo desde winsysinternals.

    Ejecute coreinfo para obtener esta información de la sección Mapa de Procesador Lógico a Grupo. Se genera una línea independiente para cada procesador lógico.

  2. Secuencia los procesadores, de derecha a izquierda: 7654 3210

    En el ejemplo solo se muestran 8 procesadores (de 0 a 7), pero un grupo de procesadores puede tener un máximo de 64 procesadores lógicos y puede haber hasta 10 grupos de procesadores en un servidor Windows de clase empresarial.

  3. Calcular la máscara de bits para los grupos de procesadores que desea usar

    7654 3210

    Reemplace el número por 0 o 1, en función de si desea excluir o incluir el procesador lógico. En un sistema con ocho procesadores, el cálculo podría tener este aspecto si desea usar procesadores 7, 6, 5, 4 y 1 para Analysis Services:

    1111 0010

  4. Convertir el número binario en un valor hexadecimal

    Con una calculadora o herramienta de conversión, convierta el número binario en su equivalente hexadecimal. En nuestro ejemplo, 1111 0010 convierte en 0xF2.

  5. Escriba el valor hexadecimal en la propiedad GroupAffinity.

    En msmdsrv.ini o en la página de propiedades del servidor de Management Studio, establezca GroupAffinity en el valor calculado en el paso 4.

Importante

La configuración GroupAffinity es una tarea manual que abarca varios pasos. Al calcular GroupAffinity, compruebe cuidadosamente los cálculos. Aunque Analysis Services devolverá un error si la máscara completa no es válida, una combinación de valores válidos y no válidos da como resultado que Analysis Services omite la propiedad. Por ejemplo, si la máscara de bits incluye valores adicionales, Analysis Services omite la configuración, usando todos los procesadores del sistema. No hay ningún error o advertencia para avisarle cuando se produzca esta acción, pero puede comprobar el archivo msmdsrv.log para obtener información sobre cómo se establecen realmente las afinidades.

Establezca PerNumaNode para establecer la afinidad entre subprocesos de E/S y procesadores en un nodo NUMA.

En el caso de las instancias de Analysis Services multidimensionales, puede establecer PerNumaNode en el grupo de subprocesos IOProcess para optimizar aún más la programación y ejecución de subprocesos. Mientras que GroupAffinity identifica qué conjunto de procesadores lógicos se van a usar para un grupo de subprocesos determinado, PerNumaNode va un paso más allá especificando si se van a crear varios grupos de subprocesos, más afinidad con algún subconjunto de los procesadores lógicos permitidos.

Nota:

En Windows Server 2012, use el Administrador de tareas para ver el número de nodos NUMA en el equipo. En el Administrador de tareas, en la pestaña Rendimiento, seleccione CPU y, a continuación, haga clic con el botón derecho en el área del gráfico para ver los nodos NUMA. Como alternativa, descargue la utilidad Coreinfo de Windows Sysinternals y ejecute coreinfo -n para devolver nodos NUMA y procesadores lógicos en cada nodo.

Los valores válidos para PerNumaNode son -1, 0, 1, 2, como se describe en la sección Referencia de propiedades del grupo de subprocesos de este tema.

En los sistemas que tienen nodos NUMA, se recomienda usar la configuración predeterminada de PerNumaNode=-1, lo que permite a Analysis Services ajustar el número de grupos de subprocesos y su afinidad de subproceso en función del número de nodos. Si el sistema tiene menos de 4 nodos, Analysis Services implementa los comportamientos descritos por PerNumaNode=0, mientras que PerNumaNode=1 se usa en sistemas que tienen 4 o más nodos.

Elección de un valor

También puede invalidar el valor predeterminado para usar otro valor válido.

Establecer PerNumaNode=0

Se omiten los nodos NUMA. Habrá solo un grupo de subprocesos IOProcess y todos los subprocesos de ese grupo se asociarán con todos los procesadores lógicos. De forma predeterminada (donde PerNumaNode=-1), esta es la configuración operativa si el equipo tiene menos de 4 nodos NUMA.

Correspondencia de Numa, procesador y grupo de subprocesos

Establecer PerNumaNode=1

Los grupos de subprocesos del IOProcess se crean para cada nodo NUMA. Tener grupos de subprocesos independientes mejora el acceso coordinado a los recursos locales, como la caché local en un nodo NUMA.

Correspondencia de Numa, procesador y grupo de subprocesos

Establecer PerNumaNode=2

Esta configuración es para sistemas muy altos que ejecutan cargas de trabajo intensivas de Analysis Services. Esta propiedad establece la afinidad del grupo de subprocesos de IOProcess en su nivel más granular, creando y asignando afinidad a grupos de subprocesos independientes al nivel de procesador lógico.

En el ejemplo siguiente, en un sistema que tiene 4 nodos NUMA y 32 procesadores lógicos, establecer PerNumaNode en 2 daría como resultado 32 grupos de subprocesos de IOProcess. Los subprocesos de los primeros 8 grupos de subprocesos se establecerían en afinidad con todos los procesadores lógicos del nodo NUMA 0, pero con el procesador ideal establecido en 0, 1, 2, hasta 7. Los siguientes 8 grupos de subprocesos se asociarían a todos los procesadores lógicos del nodo NUMA 1, con el procesador ideal establecido en 8, 9, 10, hasta 15, etc.

Correspondencia de Numa, procesador y grupo de subprocesos

En este nivel de afinidad, el programador siempre intenta usar primero el procesador lógico ideal, dentro del nodo NUMA preferido. Si el procesador lógico no está disponible, el programador elige otro procesador dentro del mismo nodo o dentro del mismo grupo de procesadores si no hay ningún otro subproceso disponible. Para obtener más información y ejemplos, vea Opciones de configuración de Analysis Services 2012 (Blog de Wordpress).

Distribución del trabajo entre subprocesos de IOProcess

A medida que considere si establecer la PerNumaNode propiedad, saber cómo los IOProcess subprocesos se usan puede ayudarle a tomar una decisión más informada.

Recuerde que IOProcess se usa para los trabajos de E/S asociados a las consultas del motor de almacenamiento en el motor multidimensional.

Cuando se examina un segmento, el motor identifica la partición a la que pertenece el segmento e intenta encolar el trabajo del segmento en el grupo de hilos utilizado por la partición. En general, todos los segmentos que pertenecen a una partición encolan sus tareas en el mismo pool de hilos. En los sistemas NUMA, este comportamiento es especialmente ventajoso porque todos los exámenes de una partición usarán memoria en la memoria caché del sistema de archivos que se asigna localmente a ese nodo NUMA.

En los escenarios siguientes se sugieren ajustes que a veces pueden mejorar el rendimiento de las consultas en sistemas NUMA:

  • En el caso de los grupos de medida que están subparticionados (por ejemplo, al tener una sola partición), aumente el número de particiones. Al usar solo una partición, el motor siempre pondrá en cola las tareas en un grupo de subprocesos (grupo de subprocesos 0). Agregar más particiones permite al motor usar grupos adicionales de subprocesos.

    Como alternativa, si no puede crear particiones adicionales, intente establecer PerNumaNode=0 como una manera de aumentar el número de subprocesos disponibles para el grupo de subprocesos 0.

  • En el caso de las bases de datos en las que los escaneos de segmentos se distribuyen uniformemente entre varias particiones, establecer PerNumaNode en 1 o 2 puede mejorar el rendimiento de las consultas porque aumenta el número total de pools de IOProcess subprocesos usados por el sistema.

  • En el caso de las soluciones que tienen varias particiones, pero solo se examina una, pruebe a establecer PerNumaNode=0 para ver si mejora el rendimiento.

Aunque los exámenes de partición y dimensión usan el IOProcess grupo de subprocesos, los exámenes de dimensiones solo usan el grupo de subprocesos 0. Esto puede dar lugar a una carga ligeramente desigual en ese grupo de subprocesos, pero el desequilibrio debe ser temporal, ya que los escaneos de dimensiones tienden a ser muy rápidos y poco frecuentes.

Nota:

Al cambiar una propiedad de servidor, recuerde que la opción de configuración se aplica a todas las bases de datos que se ejecutan en la instancia actual. Elija la configuración que beneficie a las bases de datos más importantes o al mayor número de bases de datos. No puede establecer la afinidad de procesador en el nivel de base de datos ni puede establecer afinidad entre particiones individuales y procesadores específicos.

Para obtener más información sobre la arquitectura de trabajos, consulte la sección 2.2 de la Guía de rendimiento de SQL Server 2008 Analysis Services.

Como se explica en la sección 2.4 de la Guía de operaciones de Analysis Services, si aumenta el grupo de subprocesos de procesamiento, debe asegurarse de que la CoordinatorExecutionMode configuración, así como la CoordinatorQueryMaxThreads configuración, tengan valores que le permitan usar al máximo el tamaño del grupo de subprocesos.

Analysis Services usa un subproceso de coordinación para recopilar los datos necesarios para completar una solicitud de procesamiento o consulta. El coordinador pone primero en cola un trabajo para cada partición que se debe tocar. A continuación, cada uno de esos trabajos continúa colocando más trabajos en cola, en función del número total de segmentos que se deben examinar en la partición.

El valor predeterminado de CoordinatorExecutionMode es -4, lo que significa un límite de 4 trabajos en paralelo por núcleo, lo que restringe el número total de trabajos de coordinador que se pueden ejecutar en paralelo mediante una solicitud de subcubo en el motor de almacenamiento.

El valor predeterminado de CoordinatorQueryMaxThreads es 16, que limita el número de trabajos de segmento que se pueden ejecutar en paralelo para cada partición.

Determinar la configuración actual del grupo de subprocesos

En cada inicio del servicio, Analysis Services genera la configuración del grupo de subprocesos actual en el archivo msmdsrv.log, incluidos los subprocesos mínimos y máximos, la máscara de afinidad del procesador y la simultaneidad.

El ejemplo siguiente es un extracto del archivo de registro, que muestra la configuración predeterminada para el grupo de subprocesos de consulta (MinThread=0, MaxThread=0, Concurrency=2), en un sistema de 4 núcleos con hyper-threading habilitado. La máscara de afinidad es 0xFF, lo que indica 8 procesadores lógicos. Tenga en cuenta que los ceros iniciales se añaden a la máscara. Puede omitir los ceros iniciales.

"10/28/2013 9:20:52 AM) Message: The Query thread pool now has 1 minimum threads, 16 maximum threads, and a concurrency of 16. Its thread pool affinity mask is 0x00000000000000ff. (Source: \\?\C:\Program Files\Microsoft SQL Server\MSAS11.MSSQLSERVER\OLAP\Log\msmdsrv.log, Type: 1, Category: 289, Event ID: 0x4121000A)"

Recuerde que el algoritmo para establecer MinThread y MaxThread incorpora la configuración del sistema, especialmente el número de procesadores. La siguiente entrada de blog ofrece información sobre cómo se calculan los valores: Opciones de configuración de Analysis Services 2012 (Blog de Wordpress). Tenga en cuenta que estas configuraciones y comportamientos están sujetos a ajustes en versiones posteriores.

En la lista siguiente se muestran ejemplos de otras configuraciones de máscara de afinidad para diferentes combinaciones de procesadores:

  • La afinidad con los procesadores 3-2-1-0 en un sistema de 8 núcleos da como resultado esta máscara de bits: 00001111 y un valor hexadecimal: 0xF

  • La afinidad con los procesadores 7-6-5-4 en un sistema de 8 núcleos da como resultado esta máscara de bits: 11110000 y un valor hexadecimal: 0xF0

  • La afinidad con los procesadores 5-4-3-2 en un sistema de 8 núcleos da como resultado esta máscara de bits: 00111100 y un valor hexadecimal: 0x3C

  • La afinidad con los procesadores 7-6-1-0 en un sistema de 8 núcleos da como resultado esta máscara de bits: 11000011 y un valor hexadecimal: 0xC3

Recuerde que en los sistemas que tienen varios grupos de procesadores, se genera una máscara de afinidad independiente para cada grupo, en una lista separada por comas.

Acerca de MSMDSRV. INI

El archivo msmdsrv.ini contiene opciones de configuración para una instancia de Analysis Services, lo que afecta a todas las bases de datos que se ejecutan en esa instancia. No puede usar propiedades de configuración del servidor para optimizar el rendimiento de una base de datos excluyendo a todas las demás. Sin embargo, puede instalar varias instancias de Analysis Services y configurar cada instancia para usar propiedades que beneficien a las bases de datos que comparten características o cargas de trabajo similares.

Todas las propiedades de configuración del servidor se incluyen en el archivo msmdsrv.ini. Los subconjuntos de las propiedades más probables de modificarse también aparecen en las herramientas de administración, como SSMS.

El contenido del msmdsrv.ini es idéntico para las instancias tabulares y multidimensionales de Analysis Services. Sin embargo, algunas opciones de configuración solo se aplican a un modo. Las diferencias en el comportamiento en función del modo de servidor se indican en la documentación de referencia de propiedades.

Nota:

Para obtener instrucciones sobre cómo establecer propiedades, vea Configurar propiedades del servidor en Analysis Services.

Véase también

Acerca de los procesos y subprocesosVarios procesadoresGrupos de procesadoresCambios en el grupo de subprocesos de los servicios de análisis en SQL Server 2012Configuración de Analysis Services 2012 (Blog de WordPress)Sistemas que soportan más de 64 procesadoresGuía de operaciones de Analysis Services SQL Server 2008 R2