Propiedades de grupos de subprocesos
Se aplica a: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
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, el motor usa grupos de subprocesos para asignar previamente subprocesos y facilitar la disponibilidad de subprocesos para el siguiente trabajo.
Cada instancia mantiene su propio conjunto de grupos de subprocesos. Hay diferencias en la forma en que las instancias tabulares y multidimensionales usan los grupos de subprocesos. Por ejemplo, solo las instancias multidimensionales usan el grupo de subprocesos IOProcess . Por lo tanto, la propiedad PerNumaNode , descrita en este artículo, no es significativa para las instancias tabulares. En la sección Referencia de propiedades siguiente, se indican los requisitos de modo para cada propiedad.
Nota:
La implementación tabular en sistemas NUMA queda 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 utilizan los modelos tabulares pueden presentar ventajas limitadas en las arquitecturas con mucho escalado vertical. Para más información, vea Analysis Services Case Study: Using Tabular Models in Large-scale Commercial Solutions (Caso práctico de Analysis Services: uso de modelos tabulares en soluciones comerciales a gran escala) y Hardware Sizing a Tabular Solution (Ajuste de tamaño del hardware en una solución tabular).
Administración de subprocesos
SQL Server 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 dentro del motor de almacenamiento son el procesamiento de objetos en paralelo, el control de consultas discretas que se han insertado en el motor de almacenamiento o la devolución de valores de datos solicitados por una consulta. El motor de fórmulas, debido a la naturaleza serie de los cálculos que evalúa, es de subproceso único. Cada consulta se ejecuta principalmente en un solo subproceso, solicitando y esperando a menudo los datos devueltos por el motor de almacenamiento. Los subprocesos de consulta tienen ejecuciones más largas y solo se liberan cuando se completa toda la consulta.
De forma predeterminada, SQL Server Analysis Services usarán todos los procesadores lógicos disponibles. En el inicio, el proceso msmdsrv.exe se asignará a un grupo de procesadores específico, pero con el tiempo se pueden programar los subprocesos 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 a medida que las cargas de consulta y de procesamiento se reparten entre un gran número de procesadores y la contención de las estructuras de datos compartidos aumenta. Esto puede ocurrir especialmente en sistemas de tecnología avanzada que utilizan la arquitectura NUMA, pero también en sistemas no NUMA que ejecutan aplicaciones que usan muchos datos en el mismo hardware.
Puede establecer afinidad entre los tipos de operaciones y un conjunto específico de procesadores lógicos. La propiedad GroupAffinity 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 SQL Server Analysis Services.
GroupAffinity es una propiedad que se puede establecer en cualquiera de los grupos de subprocesos usados para varias cargas de trabajo:
ThreadPool \ Parsing \ Short es un grupo de análisis para solicitudes cortas. Las solicitudes que caben dentro de un único mensaje de red se consideran cortas.
ThreadPool \ Parsing \ 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 utilizar un subproceso de un grupo de análisis para ejecutar una consulta. Las consultas que se ejecutan con rapidez, como una solicitud rápida Discover o Cancel, a veces se ejecutan inmediatamente en lugar de ponerse en cola en el grupo de subprocesos Query.
ThreadPool \ Query es el grupo de subprocesos que ejecuta todas las solicitudes no administradas por el grupo de subprocesos de análisis. Los subprocesos de este grupo de subprocesos ejecutarán todos los tipos de operaciones, como comandos Discover, MDX, DAX, DMX y DDL. A
ThreadPool \ IOProcess se usa para los trabajos de E/S asociados a las consultas del motor de almacenamiento en el motor multidimensional. Se espera que el trabajo realizado por estos subprocesos no tenga dependencias de otros subprocesos. Normalmente, estos subprocesos analizarán un único segmento de una partición y realizarán el filtrado y la agregación de los datos del segmento. Los subprocesos deIOProcess son especialmente sensibles a las configuraciones de hardware NUMA. Por tanto, este grupo de subprocesos tiene la propiedad de configuración PerNumaNode , que se puede utilizar para optimizar el rendimiento si es necesario.
ThreadPool \ Process es para trabajos más largos del motor de almacenamiento, incluidas agregaciones, indexación y operaciones de confirmación. El modo de almacenamiento ROLAP utiliza subprocesos del grupo de subprocesos Processing.
VertiPaq \ ThreadPool es el grupo de subprocesos para ejecutar recorridos de tabla en un modelo tabular.
Para atender las solicitudes, SQL Server 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 número actual de subprocesos es mayor que el límite máximo, el subproceso finaliza simplemente, en lugar de volver al grupo de subprocesos.
Nota:
Superar el número máximo de grupos de subprocesos es una protección que solo se invoca cuando surgen determinadas condiciones de interbloqueo. Para evitar la creación descontrolada de subprocesos más allá del máximo, los subprocesos se crean gradualmente (después de un breve retraso) una vez que se ha alcanzado el límite máximo. Superar el número máximo de subprocesos puede provocar una ralentización de la ejecución de la tarea. Si los contadores de rendimiento muestran que los números de subprocesos superan periódicamente el tamaño máximo del grupo de subprocesos, puede considerarlo como un indicador de que los tamaños de los grupos de subprocesos son demasiado pequeños para el grado de simultaneidad que se solicita al sistema.
De forma predeterminada, el tamaño del grupo de subprocesos viene determinado por SQL Server Analysis Services y se basa en el número de núcleos. Para SSAS, 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 elegir aumentar el tamaño del grupo de subprocesos, así como otras propiedades, para mejorar el rendimiento de consultas o de procesamiento.
Referencia de 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 SQL Server Analysis Services. Un subconjunto de estas propiedades también aparece en SQL Server Management Studio.
Las propiedades se muestran en orden alfabético.
Nombre | Tipo | Descripción | Default | Guía |
---|---|---|---|---|
IOProcess \ Concurrencia | double | Valor de punto flotante de doble precisión que determina el algoritmo para establecer un destino en el número de subprocesos que se pueden poner en cola al mismo tiempo. | 2.0 | Propiedad avanzada que no debería cambiar, salvo a petición de expertos en soporte técnico de Microsoft. Se utiliza simultaneidad para inicializar grupos de subprocesos, que se implementan utilizando puertos de terminación de E/S en Windows. |
IOProcess \ GroupAffinity | string | Matriz de valores hexadecimales correspondientes a los grupos de procesadores en el sistema, que se usa para establecer la afinidad de los subprocesos en el grupo de subprocesos IOProcess y los procesadores lógicos de cada grupo de procesadores. | ninguno | Puede utilizar esta propiedad para crear afinidades personalizadas. La propiedad está vacía de forma predeterminada. Vea Configurar GroupAffinity para establecer afinidad entre subprocesos y procesadores en un grupo de procesadores para obtener más detalles. Se aplica solo 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 valor máximo de un grupo de subprocesos es 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 que tiene 32 procesadores lógicos, el valor máximo es 320 subprocesos. El valor máximo está sujeto a los procesadores disponibles para cualquier máscara de afinidad personalizada que definiera previamente. Por ejemplo, si ya ha establecido la afinidad del grupo de subprocesos para que utilice 8 procesadores de 32 y ahora establece MaxThreads en -10, el límite superior del grupo de subprocesos sería 10 por 8, o 80 subprocesos. Los valores reales utilizados para esta propiedad del grupo de subprocesos se escriben en el archivo de registro de msmdsrv al iniciarse el servicio. Para obtener más información sobre la optimización de los valores del grupo de subprocesos, vea la Guía de operaciones de Analysis Services. Se aplica solo 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 valor 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 utilizados para esta propiedad del grupo de subprocesos se escriben en el archivo de registro de msmdsrv al iniciarse el servicio. Para obtener más información sobre la optimización de los valores del grupo de subprocesos, vea la Guía de operaciones de Analysis Services. Se aplica solo a modelos multidimensionales. |
IOProcess \ PerNumaNode | int | Entero de 32 bits con signo que determina el número de grupos de subprocesos creados para el proceso msmdsrv. | -1 | Los valores válidos son -1, 0, 1, 2. -1 = El servidor selecciona otra estrategia de grupos de subprocesos de E/S según el número de nodos NUMA. En los sistemas que tienen menos de 4 nodos NUMA, el comportamiento del servidor es igual que cuando es 0 (se crea un grupo de subprocesos IOProcess para el sistema). En los sistemas que tienen 4 o más nodos, el comportamiento es igual que cuando es 1 (se crean grupos de subprocesos IOProcess para cada nodo). 0 = Deshabilita los grupos de subprocesos según los nodos NUMA para que el proceso msmdsrv.exe solo utilice un grupo de subprocesos de IOProcess. 1 = Habilita un grupo de subprocesos de IOProcess por nodo NUMA. 2 = Un grupo de subprocesos de IOProcess por procesador lógico. Se establece afinidad entre los subprocesos de cada grupo de subprocesos y el nodo NUMA del procesador lógico, estableciéndose el procesador ideal en el procesador lógico. Vea Establecer PerNumaNode para crear subprocesos de E/S con afinidad con un nodo NUMA para obtener más detalles. Se aplica solo a modelos multidimensionales. |
IOProcess \ PriorityRatio | int | Entero de 32 bits con signo que se puede utilizar para asegurarse que los subprocesos con menor prioridad se ejecutan en ocasiones incluso aunque una cola con mayor prioridad no esté vacía. | 2 | Propiedad avanzada que no debería cambiar, salvo a petición de expertos en soporte técnico de Microsoft. Se aplica solo 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 de subprocesos. | 0 | Propiedad avanzada que no debería cambiar, salvo a petición de expertos en soporte técnico de Microsoft. Se aplica solo a modelos multidimensionales. |
Análisis \ Largo \ Concurrencia | double | Valor de punto flotante de doble precisión que determina el algoritmo para establecer un destino en el número de subprocesos que se pueden poner en cola al mismo tiempo. | 2.0 | Propiedad avanzada que no debería cambiar, salvo a petición de expertos en soporte técnico de Microsoft. Se utiliza simultaneidad para inicializar grupos de subprocesos, que se implementan utilizando puertos de terminación de E/S en Windows. |
Análisis \ Largo \ GroupAffinity | string | Una matriz de valores hexadecimales correspondientes a los grupos de procesadores del sistema, que se usa para establecer la afinidad de los subprocesos de análisis y los procesadores lógicos en cada grupo de procesadores. | ninguno | Puede utilizar esta propiedad para crear afinidades personalizadas. La propiedad está vacía de forma predeterminada. Vea Configurar GroupAffinity para establecer afinidad entre subprocesos y procesadores en un grupo de procesadores para obtener más detalles. |
Análisis \ Largo \ NumThreads | int | Propiedad de entero de 32 bits con signo que define el número de subprocesos que se pueden crear para los 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 que tiene 32 procesadores lógicos, el valor máximo es 320 subprocesos. El valor máximo está sujeto a los procesadores disponibles para cualquier máscara de afinidad personalizada que definiera previamente. Por ejemplo, si ya ha establecido la afinidad del grupo de subprocesos para que utilice 8 procesadores de 32 y ahora establece NumThreads en -10, el límite superior del grupo de subprocesos sería 10 por 8, u 80 subprocesos. Los valores reales utilizados para esta propiedad del grupo de subprocesos se escriben en el archivo de registro de msmdsrv al iniciarse el servicio. |
Análisis \ Largo \ PriorityRatio | int | Entero de 32 bits con signo que se puede utilizar para asegurarse que los subprocesos con menor prioridad se ejecutan en ocasiones incluso aunque una cola con mayor prioridad no esté vacía. | 0 | Propiedad avanzada que no debería cambiar, salvo a petición de expertos en soporte técnico de Microsoft. |
Análisis \ Largo \ StackSizeKB | int | Entero de 32 bits con signo que se puede usar para ajustar la asignación de memoria durante la ejecución de subprocesos. | 0 | Propiedad avanzada que no debería cambiar, salvo a petición de expertos en soporte técnico de Microsoft. |
Análisis \ Corto \ Concurrencia | double | Valor de punto flotante de doble precisión que determina el algoritmo para establecer un destino en el número de subprocesos que se pueden poner en cola al mismo tiempo. | 2.0 | Propiedad avanzada que no debería cambiar, salvo a petición de expertos en soporte técnico de Microsoft. Se utiliza simultaneidad para inicializar grupos de subprocesos, que se implementan utilizando puertos de terminación de E/S en Windows. |
Análisis \ Corto \ GroupAffinity | string | Una matriz de valores hexadecimales correspondientes a los grupos de procesadores del sistema, que se usa para establecer la afinidad de los subprocesos de análisis y los procesadores lógicos en cada grupo de procesadores. | ninguno | Puede utilizar esta propiedad para crear afinidades personalizadas. La propiedad está vacía de forma predeterminada. Vea Configurar GroupAffinity para establecer afinidad entre subprocesos y procesadores en un grupo de procesadores para obtener más detalles. |
Análisis \ Corto \ NumThreads | int | Propiedad de entero de 32 bits con signo que define el número de subprocesos que se pueden crear para los 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 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 que tiene 32 procesadores lógicos, el valor máximo es 320 subprocesos. El valor máximo está sujeto a los procesadores disponibles para cualquier máscara de afinidad personalizada que definiera previamente. Por ejemplo, si ya ha establecido la afinidad del grupo de subprocesos para que utilice 8 procesadores de 32 y ahora establece NumThreads en -10, el límite superior del grupo de subprocesos sería 10 por 8, u 80 subprocesos. Los valores reales utilizados para esta propiedad del grupo de subprocesos se escriben en el archivo de registro de msmdsrv al iniciarse el servicio. |
Análisis \ Corto \ PriorityRatio | int | Entero de 32 bits con signo que se puede utilizar para asegurarse que los subprocesos con menor prioridad se ejecutan en ocasiones incluso aunque una cola con mayor prioridad no esté vacía. | 0 | Propiedad avanzada que no debería cambiar, salvo a petición de expertos en soporte técnico de Microsoft. |
Análisis \ Corto \ StackSizeKB | int | Entero de 32 bits con signo que se puede usar para ajustar la asignación de memoria durante la ejecución de subprocesos. | 64 * procesadores lógicos | Propiedad avanzada que no debería cambiar, salvo a petición de expertos en soporte técnico de Microsoft. |
Proceso \ Concurrencia | double | Valor de punto flotante de doble precisión que determina el algoritmo para establecer un destino en el número de subprocesos que se pueden poner en cola al mismo tiempo. | 2.0 | Propiedad avanzada que no debería cambiar, salvo a petición de expertos en soporte técnico de Microsoft. Se utiliza simultaneidad para inicializar grupos de subprocesos, que se implementan utilizando puertos de terminación de E/S en Windows. |
Proceso \ GroupAffinity | string | Matriz de valores hexadecimales correspondientes a los grupos de procesadores en el sistema, que se usa para establecer la afinidad de los subprocesos de procesamiento y los procesadores lógicos en cada grupo de procesadores. | ninguno | Puede utilizar esta propiedad para crear afinidades personalizadas. La propiedad está vacía de forma predeterminada. Vea Configurar GroupAffinity para establecer afinidad entre subprocesos y procesadores en un grupo de procesadores para obtener más detalles. |
Proceso \ 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 genera 128 procesadores lógicos), el máximo del grupo de subprocesos es 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 que tiene 32 procesadores lógicos, el valor máximo es 320 subprocesos. El valor máximo está sujeto a los procesadores disponibles para cualquier máscara de afinidad personalizada que definiera previamente. Por ejemplo, si ya ha establecido la afinidad del grupo de subprocesos para que utilice 8 procesadores de 32 y ahora establece MaxThreads en -10, el límite superior del grupo de subprocesos sería 10 por 8, o 80 subprocesos. Los valores reales utilizados para esta propiedad del grupo de subprocesos se escriben en el archivo de registro de msmdsrv al iniciarse el servicio. Para obtener más información sobre la optimización de los valores del grupo de subprocesos, vea la Guía de operaciones de Analysis Services. |
Proceso \ 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 valor 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 utilizados para esta propiedad del grupo de subprocesos se escriben en el archivo de registro de msmdsrv al iniciarse el servicio. Para obtener más información sobre la optimización de los valores del grupo de subprocesos, vea la Guía de operaciones de Analysis Services. |
Proceso \ PriorityRatio | int | Entero de 32 bits con signo que se puede utilizar para asegurarse que los subprocesos con menor prioridad se ejecutan en ocasiones incluso aunque una cola con mayor prioridad no esté vacía. | 2 | Propiedad avanzada que no debería cambiar, salvo a petición de expertos en soporte técnico de Microsoft. |
Proceso \ StackSizeKB | int | Entero de 32 bits con signo que se puede usar para ajustar la asignación de memoria durante la ejecución de subprocesos. | 0 | Propiedad avanzada que no debería cambiar, salvo a petición de expertos en soporte técnico de Microsoft. |
Consulta \ Concurrencia | double | Valor de punto flotante de doble precisión que determina el algoritmo para establecer un destino en el número de subprocesos que se pueden poner en cola al mismo tiempo. | 2.0 | Propiedad avanzada que no debería cambiar, salvo a petición de expertos en soporte técnico de Microsoft. Se utiliza simultaneidad para inicializar grupos de subprocesos, que se implementan utilizando puertos de terminación de E/S en Windows. |
Consulta \ GroupAffinity | string | Matriz de valores hexadecimales correspondientes a los grupos de procesadores en el sistema, que se usa para establecer la afinidad de los subprocesos de procesamiento y los procesadores lógicos en cada grupo de procesadores. | ninguno | Puede utilizar esta propiedad para crear afinidades personalizadas. La propiedad está vacía de forma predeterminada. Vea Configurar GroupAffinity para establecer afinidad entre subprocesos y procesadores en un grupo de procesadores para obtener más detalles. |
Consulta \ 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 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 que tiene 32 procesadores lógicos, el valor máximo es 320 subprocesos. El valor máximo está sujeto a los procesadores disponibles para cualquier máscara de afinidad personalizada que definiera previamente. Por ejemplo, si ya ha establecido la afinidad del grupo de subprocesos para que utilice 8 procesadores de 32 y ahora establece MaxThreads en -10, el límite superior del grupo de subprocesos sería 10 por 8, o 80 subprocesos. Los valores reales utilizados para esta propiedad del grupo de subprocesos se escriben en el archivo de registro de msmdsrv al iniciarse el servicio. Para obtener más información sobre la optimización de los valores del grupo de subprocesos, vea la Guía de operaciones de Analysis Services. |
Consulta \ 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 valor 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 utilizados para esta propiedad del grupo de subprocesos se escriben en el archivo de registro de msmdsrv al iniciarse el servicio. Para obtener más información sobre la optimización de los valores del grupo de subprocesos, vea la Guía de operaciones de Analysis Services. |
Consulta \ PriorityRatio | int | Entero de 32 bits con signo que se puede utilizar para asegurarse que los subprocesos con menor prioridad se ejecutan en ocasiones incluso aunque una cola con mayor prioridad no esté vacía. | 2 | Propiedad avanzada que no debería cambiar, salvo a petición de expertos en soporte técnico de Microsoft. |
Consulta \ StackSizeKB | int | Entero de 32 bits con signo que se puede usar para ajustar la asignación de memoria durante la ejecución de subprocesos. | 0 | Propiedad avanzada que no debería cambiar, salvo a petición de expertos en soporte técnico de Microsoft. |
Vertipaq \ Cpus | int | Un entero de 32 bits con signo que especifica el número máximo de procesadores que se van a usar para las consultas tabulares. | 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 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 que tiene 32 procesadores lógicos, el valor máximo es 320 subprocesos. El valor máximo está sujeto a los procesadores disponibles para cualquier máscara de afinidad personalizada que definiera previamente. Por ejemplo, si ya ha establecido la afinidad del grupo de subprocesos para que utilice 8 procesadores de 32 y ahora establece MaxThreads en -10, el límite superior del grupo de subprocesos sería 10 por 8, o 80 subprocesos. Los valores reales utilizados para esta propiedad del grupo de subprocesos se escriben en el archivo de registro de msmdsrv al iniciarse el servicio. |
Vertipaq \ GroupAffinity | string | Matriz de valores hexadecimales correspondientes a los grupos de procesadores en el sistema, que se usa para establecer la afinidad de los subprocesos de procesamiento y los procesadores lógicos en cada grupo de procesadores. | ninguno | Puede utilizar esta propiedad para crear afinidades personalizadas. La propiedad está vacía de forma predeterminada. Vea Configurar GroupAffinity para establecer afinidad entre subprocesos y procesadores en un grupo de procesadores para obtener más detalles. Se aplica solo a modelos tabulares. |
Configurar GroupAffinity para establecer afinidad entre subprocesos y procesadores en un grupo de procesadores
GroupAffinity se proporciona con fines de optimización avanzada. Puede usar la propiedad GroupAffinity para establecer la afinidad entre SQL Server Analysis Services grupos de subprocesos y procesadores específicos; sin embargo, para la mayoría de las instalaciones, SQL Server Analysis Services funciona mejor cuando puede usar todos los procesadores lógicos disponibles. Por tanto, la afinidad de grupo no se especifica de forma predeterminada.
Si las pruebas de rendimiento indican la necesidad de optimizar la CPU, puede considerar la posibilidad de usar un método de nivel superior, como utilizar el Administrador de recursos de Windows Server para establecer afinidad entre 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 método es insuficiente, puede lograr una precisión mayor si define afinidades personalizadas para los grupos de subprocesos. Es más probable que se recomiende personalizar la configuración de afinidad en los sistemas de varios núcleos (ya sean NUMA o no NUMA) que experimentan una degradación del rendimiento debido a que los grupos de subprocesos se extienden a demasiados procesadores. Aunque puede establecer GroupAffinity en sistemas que tienen menos de 64 procesadores lógicos, la ventaja de hacerlo es insignificante e incluso puede reducir el rendimiento.
Nota:
GroupAffinity está restringido por ediciones que limitan el número de núcleos usados por SQL Server Analysis Services. En el inicio, SQL Server Analysis Services usa la información de edición y las propiedades GroupAffinity para calcular máscaras de afinidad para cada grupo de subprocesos administrado por SQL Server Analysis Services. La edición estándar puede usar un máximo de 24 núcleos. Si instala SQL Server Analysis Services edición estándar en un sistema de varios núcleos grande que tenga más de 24 núcleos, SQL Server Analysis Services solo usará 24 de ellos. Para más información sobre los valores máximos del procesador, vea los límites de escala entre cuadros en Características compatibles con las ediciones de SQL Server 2016.
Syntax
El valor es hexadecimal para cada grupo de procesadores, con el hexadecimal que representa los procesadores lógicos que SQL Server 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 solo grupo de procesadores. La máscara de bits es 1 (o 0) para cada procesador lógico del grupo utilizado (o no utilizado) por un grupo de subprocesos. Una vez que calcule la máscara de bits, calcule el valor hexadecimal como el valor para GroupAffinity.
Varios grupos de procesadores
Los grupos de procesadores se determinan al iniciarse el sistema. GroupAffinity acepta valores hexadecimales para cada grupo de procesadores en una lista delimitada por comas. Dados varios grupos de procesadores (hasta 10 en los sistemas más avanzados), puede omitir los grupos individuales si especifica 0x0. Por ejemplo, en un sistema con cuatro grupos de procesadores (0, 1, 2, 3), podría excluir los grupos 0 y 2 si especificara 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 las páginas de propiedades del servidor en SQL Server Management Studio.
Determinar el número de procesadores y grupos de procesadores
Puede descargar la utilidad Coreinfo de winsysinternals.
Ejecute coreinfo para obtener esta información de la sección Asignación de procesadores lógicos a grupos. Se genera una línea diferente para cada procesador lógico.
Secuenciar los procesadores, de derecha a izquierda:
7654 3210
El ejemplo muestra solo 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.
Calcular la máscara de bits para los grupos de procesadores que desea utilizar
7654 3210
Reemplace el número con un 0 o un 1, en función de si desea excluir o incluir el procesador lógico. En un sistema que tenga ocho procesadores, el cálculo podría ser similar al siguiente si desea utilizar los procesadores 7, 6, 5, 4 y 1 para Analysis Services:
1111 0010
Convertir el número binario en un valor hexadecimal
Mediante una calculadora o una herramienta de conversión, convierta el número binario en su equivalente hexadecimal. En nuestro ejemplo,
1111 0010
se convierte en0xF2
.Especificar el valor hexadecimal en la propiedad GroupAffinity
En msmdsrv.ini o en la página de propiedades del servidor en Management Studio, establezca GroupAffinity en el valor calculado en el paso 4.
Importante
La configuración de GroupAffinity es una tarea manual que abarca varios pasos. A la hora de calcular GroupAffinity, compruebe los cálculos detenidamente. Aunque SQL Server Analysis Services devolverá un error si toda la máscara no es válida, una combinación de valores válidos y no válidos da como resultado SQL Server Analysis Services omitir la propiedad. Por ejemplo, si la máscara de bits incluye valores adicionales, SQL Server Analysis Services omite la configuración, usando todos los procesadores del sistema. No hay ningún error o advertencia que le avise cuando se realice esta acción, pero puede comprobar el archivo msmdsrv.log para ver cómo se han establecido realmente las afinidades.
Establecer PerNumaNode para crear subprocesos de E/S con afinidad con un nodo NUMA
En instancias multidimensionales de Analysis Services, puede establecer PerNumaNode en el grupo de subprocesos IOProcess para optimizar aún más la programación y la ejecución de subprocesos. Mientras que GroupAffinity identifica qué conjunto de procesadores lógicos se van a utilizar para un grupo de subprocesos determinado, PerNumaNode va un paso más allá al especificar si se van a crear varios grupos de subprocesos, con afinidad con algún subconjunto de los procesadores lógicos permitidos.
Los valores válidos para PerNumaNode son -1, 0, 1 y 2, como se describe en la sección Referencia de propiedades de grupos de subprocesos de este tema.
Valor predeterminado (recomendado)
En los sistemas que tienen nodos NUMA, se recomienda usar la configuración predeterminada de PerNumaNode=-1, lo que permite que SQL Server Analysis Services ajuste el número de grupos de subprocesos y su afinidad de subprocesos en función del número de nodos. Si el sistema tiene menos de 4 nodos, SQL Server Analysis Services implementa los comportamientos descritos por PerNumaNode=0, mientras que PerNumaNode=1 se usa en sistemas que tienen 4 o más nodos.
Elegir un valor
También puede invalidar el valor predeterminado para usar otro valor válido.
PerNumaNode=0
Los nodos NUMA se pasan por alto. Solo habrá un grupo de subprocesos IOProcess y todos los subprocesos de ese grupo de subprocesos tendrán afinidad con todos los procesadores lógicos. De forma predeterminada (donde PerNumaNode=-1), este es el valor operativo si el equipo tiene menos de 4 nodos NUMA.
PerNumaNode=1
Se crean grupos de subprocesos IOProcess para cada nodo NUMA. El hecho de tener grupos de subprocesos independiente mejora el acceso coordinado a los recursos locales, como la memoria caché local en un nodo NUMA.
PerNumaNode=2
Esta configuración es para sistemas muy de gama alta que ejecutan cargas de trabajo intensivas. Esta propiedad establece la afinidad de grupos de subprocesos de IOProcess en su nivel más específico, creando y estableciendo afinidad de grupos de subprocesos diferentes en el nivel de procesador lógico.
En el ejemplo siguiente, en un sistema que tiene 4 nodos NUMA y 32 procesadores lógicos, al establecer PerNumaNode en 2 se tendrían 32 grupos de subprocesos IOProcess. Los subprocesos de los 8 primeros grupos de subprocesos tendrían afinidad con todos los procesadores lógicos del nodo NUMA 0, pero con el procesador ideal establecido en 0, 1, 2 hasta 7. Los 8 grupos de subprocesos siguientes tendrían afinidad con todos los procesadores lógicos del nodo NUMA 1, con el procesador ideal establecido en 8, 9, 10 hasta 15, y así sucesivamente.
En este nivel de afinidad, el programador siempre intenta utilizar el procesador lógico ideal primero, dentro del nodo NUMA preferido. Si el procesador lógico no está disponible, el programador elige otro procesador del mismo nodo, o del mismo grupo de procesadores si no hay otros subprocesos disponibles. Para más información y ejemplos, vea Valores de configuración de Analysis Services 2012 (blog de Wordpress).
Distribución del trabajo entre los subprocesos IOProcess
Mientras piensa si establece la propiedad PerNumaNode , puede ser útil saber cómo se usan los subprocesos IOProcess para ayudarle a tomar una decisión más informada.
Recuerde que IOProcess se utiliza 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 poner en cola el trabajo de segmento en el grupo de subprocesos utilizado por la partición. En general, todos los segmentos que pertenecen a una partición pondrán en cola sus tareas en el mismo grupo de subprocesos. En los sistemas NUMA, este comportamiento es especialmente ventajoso porque todos los recorridos de una partición utilizarán memoria de la memoria caché del sistema de archivos que se asigna localmente a ese nodo NUMA.
En los escenarios siguientes se sugieren ciertos ajustes que pueden mejorar a veces el rendimiento de las consultas en sistemas NUMA:
Para los grupos de medida que tienen pocas particiones (por ejemplo, que tienen una sola partición), aumente el número de particiones. El uso de una sola partición hará que el motor siempre ponga en cola las tareas en un grupo de subprocesos (grupo de subprocesos 0). Si se agregan más particiones, el motor puede utilizar grupos de subprocesos adicionales.
O bien, si no puede crear particiones adicionales, pruebe a establecer PerNumaNode=0 como medio de aumentar el número de subprocesos disponibles para el grupo de subprocesos 0.
En las bases de datos en las que los recorridos de los 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 grupos de subprocesos IOProcess utilizados por el sistema.
En las soluciones que tienen varias particiones, pero solo se recorre detenidamente una, pruebe a establecer PerNumaNode=0 para ver si mejora el rendimiento.
Aunque los recorridos de particiones y dimensiones utilizan el grupo de subprocesos IOProcess , los recorridos de dimensiones solo utilizan el grupo de subprocesos 0. Esto puede producir una carga ligeramente desigual en ese grupo de subprocesos, pero el desequilibrio debe ser temporal, ya que los recorridos de dimensiones suelen ser muy rápidos e infrecuentes.
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. 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 del procesador en el nivel de base de datos, ni puede establecer afinidad entre particiones individuales y procesadores específicos.
Para más información sobre la arquitectura de los trabajos, vea la sección 2.2 de la Guía de rendimiento de SQL Server Analysis Services.
Propiedades dependientes o relacionadas
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 los valores de CoordinatorExecutionMode y CoordinatorQueryMaxThreads permitan usar el mayor tamaño del grupo de subprocesos en su totalidad.
Analysis Services utiliza un subproceso coordinador para recopilar los datos necesarios para completar una solicitud de procesamiento o de consulta. En primer lugar, el coordinador pone en la cola un trabajo para cada partición que se debe tocar. Cada uno de esos trabajos continúa poniendo en cola más trabajos, en función del número total de segmentos que se deben analizar en la partición.
El valor predeterminado de CoordinatorExecutionMode es -4, lo que significa que hay un límite de 4 trabajos en paralelo por núcleo; esto limita el número total de trabajos de coordinador que una solicitud de subcubo puede ejecutar en paralelo en el motor de almacenamiento.
El valor predeterminado de CoordinatorQueryMaxThreads es 16, lo que limita el número de trabajos de segmento que se pueden ejecutar en paralelo para cada partición.
Determinar la configuración del grupo de subprocesos actual
En cada inicio del servicio, SQL Server 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 y muestra la configuración predeterminada para el grupo de subprocesos Query (MinThread=0, MaxThread=0, Concurrency=2), en un sistema de 4 núcleos con hyper-threading habilitado. La máscara de afinidad es 0xFF, que indica 8 procesadores lógicos. Observe que se anteponen ceros 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. En la entrada de blog siguiente se proporciona información sobre cómo se calculan los valores: Valores de configuración de Analysis Services 2012 (blog de Wordpress). Tenga en cuenta que estos valores y comportamientos están sujetos a ajustes en versiones posteriores.
La lista siguiente muestra ejemplos de otros valores de máscara de afinidad para distintas combinaciones de procesadores:
La afinidad para los procesadores 3-2-1-0 en un sistema de 8 núcleos produce esta máscara de bits: 00001111, y un valor hexadecimal: 0xF
La afinidad para los procesadores 7-6-5-4 en un sistema de 8 núcleos produce esta máscara de bits: 11110000, y un valor hexadecimal: 0xF0
La afinidad para los procesadores 5-4-3-2 en un sistema de 8 núcleos produce esta máscara de bits: 00111100, y un valor hexadecimal: 0x3C
La afinidad para los procesadores 7-6-1-0 en un sistema de 8 núcleos produce 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 diferente para cada grupo, en una lista separada por comas.
Acerca de msmdsrv.ini
El archivo msmdsrv.ini de SQL Server Analysis Services contiene opciones de configuración para una instancia, lo que afecta a todas las bases de datos que se ejecutan en esa instancia. No puede utilizar propiedades de configuración del servidor para optimizar el rendimiento de una sola base de datos y excluir todas las demás. Sin embargo, puede instalar varias instancias de SQL Server 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 están incluidas en el archivo msmdsrv.ini. Los subconjuntos de las propiedades que es más probable que se modifiquen aparecen también en las herramientas de administración, como SSMS. El contenido de msmdsrv.ini son idénticos para las instancias tabulares y multidimensionales, pero algunas opciones de configuración solo se aplican a un modo. Las diferencias en el comportamiento según el modo de servidor se indican en la documentación de referencia de las propiedades.
Consulte también
Acerca de los procesos y subprocesos
Varios procesadores
Grupos de procesadores
Guía de operaciones de SQL Server Analysis Services