Atualização de estatísticas paralelas


14

No SQL Server 2008 ou posterior, há UPDATE STATISTICS WITH FULLSCANuma operação thread única ou pode usar paralelismo? Que tal estatísticas de atualização com amostragem padrão - ele pode usar paralelismo? Não vejo uma opção especificando MAXDOPcom estatísticas de atualização.

Respostas:


22

A atualização de estatísticas paralelas está disponível desde o SQL Server 2005. Está documentada no artigo TechNet, "Estatísticas usadas pelo Query Optimizer no Microsoft SQL Server 2005" :

Extrato do artigo

Onde uma verificação completa é realizada (solicitada explicitamente ou não), a consulta interna gerada para a coleta de dados tem a forma geral:

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 a MAXDOPdica lá (embora não haja como um usuário especificar a dica manualmente). Onde as estatísticas amostradas são coletadas, a consulta interna usa a TABLESAMPLEcláusula, que impede o paralelismo. O mecanismo também gera uma MAXDOP 1dica na consulta interna, que é um pouco redundante.

Se você precisar reduzir o paralelismo, a MAXDOPdica na consulta interna poderá ser substituída usando o Administrador de Recursos (somente Enterprise).

O SQL Server 2016 adiciona atualização de estatísticas com amostra paralela .


1

A partir do SQL Server 2016 SP2, você poderia usar a MAXDOPopção

A atualização adiciona suporte à opção MAXDOP para as instruções CREATE STATISTICS e UPDATE STATISTICS :

Esta atualização adiciona suporte à opção MAXDOP para as instruções CREATE STATISTICS e UPDATE STATISTICS no Microsoft SQL Server 2016 e 2017. Isso permite que você substitua a configuração padrão para MAXDOP (max degree of parallelism) especificada no nível do banco de dados ou do servidor.

Nota: O grau de paralelismo resultante é limitado pela configuração MAX_DOP do grupo de carga de trabalho se o Administrador de Recursos for usado.

Por exemplo, suponha que a tabela Sales.SalesOrderDetail seja usada e várias estatísticas já tenham sido criadas nela. Nesse caso, o script a seguir atualiza cada estatística com um grau de paralelismo igual a 8.

UPDATE STATISTICS Sales.SalesOrderDetail WITH MAXDOP = 8

-3

UPDATE STATISTICS não possui nenhum tipo de paralelismo interno. Não importa se você está executando com FULLSCAN ou SAMPLING. Obviamente, você pode executar vários comandos UPDATE STATISTICS de uma só vez, cada um em uma conexão diferente, por meio de vários trabalhos do SQL Agent ou de algum outro artifício. Dependendo da sua situação exata com o hardware e os dados, você pode descobrir que simplesmente reindexar as tabelas é mais rápido do que UPDATE STATISTICS with FULLSCAN e, possivelmente, uma opção melhor.


Peço desculpas pela redução, mas você não tem idéia do que está falando. Neste documento, msdn.microsoft.com/en-us/library/dd535534(v=sql.100).aspx " Coleta de estatísticas paralelas para fullscan: Para estatísticas coletadas com fullscan, a criação de um único objeto de estatísticas pode ser feita em paralelo para tabelas não particionadas e particionadas ". No entanto, estou paralelismo ver não é capaz quando eu uso UPDATE STATISTICS com varredura completa na mesa 30 milhões de linhas
SQL Learner

Além disso, o update stat usa o bloqueio de estabilidade do esquema; portanto, se você executar outras estatísticas de atualização, ele aguardará até a conclusão anterior.
SQL Learner

4
@SQLLearner: Sem ofensas, mas, independentemente da exatidão desta resposta, por que você está fazendo esta pergunta se leu esse white paper? Dá uma resposta para tudo o que você pediu. Se você não vê paralelismo para o seu cenário específico, edite a pergunta para indicar isso e outros detalhes relevantes.
Jon Seigel

Jon Seigel, encontrou e leu o whitepaper depois de postar a pergunta, no entanto, chegando à Web, ainda não tenho certeza se as estatísticas de atualização podem usar paralelismo.
SQL Learner

4
Você está certo, em relação ao white paper e ao sql2008. Acabei de ler aquele white paper; as informações na minha cabeça estão desatualizadas. Eu tive muitos problemas com o sql2005 ou talvez o sql2000 com relação à reindexação, UPDATE STATISTICS, FULLSCAN vs. SAMPLE, tempo necessário para trabalhos e a qualidade estocástica dos dados nas páginas de estatísticas. Eu acho que toda essa dor é água debaixo da ponte agora. Eu diria que você pode executar UPDATE STATS em tabelas diferentes em paralelo, mas isso parece mais complicado do que vale a pena e você pode ter muita disputa de E / S para que valha a pena.
darin strait
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.