É possível que uma consulta do SQL Server em execução com um grau efetivo de paralelismo x
tenha trabalhadores paralelos atribuídos a mais de x
agendadores distintos? Mesmo que o plano de execução tenha muitas zonas paralelas?
relate perguntas
-
SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
Até SQL Server 2000 sim; no SQL Server 2005 e posterior, não.
De acordo com o Parallel Query Execution Presentation de Craig Freedman , até o SQL Server 2000, qualquer thread de trabalho paralelo poderia ser executado em qualquer CPU. Isso significa que pode haver mais threads ativos do que DOP, portanto, reduzir o DOP pode não reduzir o uso da CPU. Para ser claro, uma única consulta paralela pode realmente usar mais de
x
agendadores distintos se tiver mais de uma ramificação/zona paralela no plano de execução.O comportamento foi alterado do SQL Server 2005 em diante para que o número de agendadores por consulta seja limitado a DOP. Isso significa que uma única consulta paralela nunca usa mais do que CPUs DOP e, portanto, reduzir o DOP reduz o uso da CPU. Isso se aplica independentemente do número de zonas paralelas (filiais) no plano de execução.
Meu entendimento é que o comportamento anterior a 2005 era um bug/descuido de implementação.
Nota: Os threads de trabalho paralelos adicionais são limitados a agendadores DOP; por exemplo, uma consulta paralela que é executada em DOP 4 em uma instância com 8 agendadores disponíveis usaria 4 agendadores para os trabalhadores paralelos. A consulta como um todo pode usar 5 agendadores: 1 fornecido pela sessão mais os 4 para os trabalhadores paralelos adicionais.