Actualización de estadísticas paralelas

14

En SQL Server 2008 o posterior, ¿es UPDATE STATISTICS WITH FULLSCANuna operación de subproceso único o puede usar paralelismo? ¿Qué tal actualizar estadísticas con muestreo predeterminado? ¿Puede usar paralelismo? No veo una opción que especifique MAXDOPcon las estadísticas de actualización.

Aprendiz de SQL
fuente

Respuestas:

22

La actualización de estadísticas paralelas ha estado disponible desde SQL Server 2005. Está documentada en el artículo de TechNet, "Estadísticas utilizadas por el optimizador de consultas en Microsoft SQL Server 2005" :

Extracto del artículo

Cuando se realiza una exploración completa (ya sea explícitamente solicitada o no), la consulta interna generada para la recopilación de datos tiene la forma general:

SELECT
    StatMan([SC0])
FROM 
(
    SELECT TOP 100 PERCENT
        [Column] AS [SC0]
    FROM [Table] WITH (READUNCOMMITTED)
    ORDER BY [SC0]
) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 16)

Observe la MAXDOPpista allí (aunque no hay forma de que un usuario especifique la pista manualmente). Cuando se recopilan estadísticas muestreadas, la consulta interna utiliza la TABLESAMPLEcláusula, que evita el paralelismo. El motor también genera unMAXDOP 1 pista sobre la consulta interna, que es un poco redundante.

Si alguna vez necesita reducir el paralelismo, la MAXDOPsugerencia en la consulta interna se puede anular utilizando el regulador de recursos (solo Enterprise).

SQL Server 2016 agrega actualización de estadísticas muestreadas en paralelo .

Paul White 9
fuente
1

A partir de SQL Server 2016 SP2, puede usar MAXDOP opción.

La actualización agrega soporte para la opción MAXDOP para las declaraciones CREATE STATISTICS y UPDATE STATISTICS :

Esta actualización agrega soporte para la opción MAXDOP para las declaraciones CREATE STATISTICS y UPDATE STATISTICS en Microsoft SQL Server 2016 y 2017. Esto le permite anular la configuración predeterminada para el grado máximo de paralelismo (MAXDOP) que se especifica a nivel de la base de datos o del servidor.

Nota: El grado de paralelismo resultante está limitado por la configuración del grupo de carga de trabajo MAX_DOP si se usa el regulador de recursos.

Por ejemplo, suponga que se usa la tabla Sales.SalesOrderDetail y que ya se han creado varias estadísticas. En este caso, el siguiente script actualiza cada estadística con un grado de paralelismo igual a 8.

UPDATE STATISTICS Sales.SalesOrderDetail WITH MAXDOP = 8
lad2025
fuente
-3

ACTUALIZAR ESTADÍSTICAS no tiene ningún tipo de paralelismo interno. No importa si está ejecutando FULLSCAN o SAMPLING. Por supuesto, puede ejecutar varios comandos de ACTUALIZAR ESTADÍSTICAS a la vez, cada uno en una conexión diferente, a través de múltiples trabajos del Agente SQL o algún otro dispositivo. Dependiendo de su situación exacta con el hardware y los datos, puede encontrar que simplemente reindexar las tablas es más rápido que ACTUALIZAR ESTADÍSTICAS con FULLSCAN y posiblemente una mejor opción.

estrecho de Darin
fuente
Pido disculpas por Mark Down pero no tienes idea de lo que estás hablando. De este documento técnico msdn.microsoft.com/en-us/library/dd535534(v=sql.100).aspx "Recopilación de estadísticas paralelas para fullscan: para las estadísticas recopiladas con fullscan, la creación de un único objeto de estadísticas se puede hacer en paralelo para tablas no particionadas y particionadas ". Sin embargo, no puedo ver paralelismo cuando uso ACTUALIZAR ESTADÍSTICAS con exploración completa en la tabla de 30 millones de filas
SQL Learner,
Además, la actualización de estadísticas toma el bloqueo de estabilidad del esquema, por lo que si ejecuta otras estadísticas de actualización, esperará hasta que se complete una anterior.
SQL Learner
44
@SQLLearner: Sin ofender, pero independientemente de la exactitud de esta respuesta, ¿por qué hace esta pregunta si ha leído ese documento? Le da una respuesta a todo lo que ha preguntado. Si no está viendo paralelismo para su escenario específico, edite la pregunta para indicar eso y cualquier otro detalle relevante.
Jon Seigel
Jon Seigel, encontró y leyó el documento después de publicar la pregunta, sin embargo, buscando en la web todavía no estoy seguro de si el estado de actualización puede usar el paralelismo.
SQL Learner
44
Tiene razón, con respecto al libro blanco y sql2008. Acabo de leer ese libro blanco; La información en mi cabeza está desactualizada. Tuve muchos problemas con sql2005 o quizás sql2000 con respecto a la reindexación, ACTUALIZAR ESTADÍSTICAS, FULLSCAN vs. SAMPLE, el tiempo requerido para los trabajos y la calidad estocástica de los datos en las páginas de estadísticas. Supongo que todo ese dolor es agua debajo del puente ahora. Diría que podría ejecutar ACTUALIZACIÓN DE ESTADÍSTICAS en diferentes tablas en paralelo, pero eso parece ser más problemático de lo que vale y puede tener demasiada contención de E / S para que valga la pena.
Darin estrecho