Tenho várias exibições que são usadas para exportar dados do SQL-Server para arquivos .csv. Eles são todos executados por meio de pacotes SSIS. Nosso DBA decidiu definir o "Grau máximo de paralelismo" como 1 e me disse para usar MAXDOP onde acho que faz sentido.
Já vi muitas vezes que o MAXDOP realmente ajuda a extrair grandes quantidades de dados (especialmente quando resulta em uma varredura de tabela em todas as partições).
Perguntas
- Como posso usar MAXDOP em uma exibição?
- Existe uma maneira de contornar essa restrição?
Você não pode.
Uma exibição é uma subconsulta armazenada. MAXDOP é uma dica de consulta.
Uma resposta indireta... com base em comentários à pergunta
Isso soa como "multi core" está sendo confundido com "processadores lógicos" de alguma forma
Um "núcleo" é um processador discreto por si só e possui seus próprios (mais ou menos) recursos. Um "soquete" consiste em 1 ou mais núcleos. Então você pode ter 2 soquetes com 12 núcleos entre eles
Cada núcleo pode ser hiperencadeado para fornecer um processador "lógico" extra: isso compartilha recursos naquele núcleo. Portanto, os 12 núcleos acima podem ser 24 "processadores" ou "CPUs" para o sistema operacional.
O SQL Server não diferencia: ele vê todas as "CPUs" apresentadas pelo sistema operacional como iguais. Uma consulta paralela em 2 "CPUs" ou 2 consultas simultâneas, cada uma usando uma única "CPU", pode realmente estar sendo executada no mesmo núcleo, mas usando HT. É aqui que você obterá a contenção de recursos nos caches e pipelines.
Eu consideraria desabilitar o HT (e já o fiz) antes de restringir o paralelismo (nunca fiz isso no nível da instância). Mas apenas com testes.
Basta ver as principais respostas do Google, por exemplo,
http://www.google.co.uk/search?q=sql+server+hyper+threading