Come menzionato da Kaboing, MAXDOP(n)
controlla effettivamente il numero di core della CPU utilizzati nel Query Processor.
In un sistema completamente inattivo, SQL Server tenterà di caricare le tabelle in memoria il più rapidamente possibile e di unirle in memoria. Potrebbe essere che, nel tuo caso, sia meglio farlo con una singola CPU. Questo potrebbe avere lo stesso effetto dell'utilizzo di OPTION (FORCE ORDER)
che obbliga Query Optimizer a utilizzare l'ordine dei join che hai specificato. IN alcuni casi, ho visto OPTION (FORCE PLAN)
ridurre una query da 26 secondi a 1 secondo di tempo di esecuzione.
Books Online prosegue affermando che sono possibili valori per MAXDOP
sono:
0:utilizza il numero effettivo di CPU disponibili in base al carico di lavoro del sistema corrente. Questo è il valore predefinito e l'impostazione consigliata.
1 - Sopprime la generazione di piani paralleli. L'operazione verrà eseguita in serie.
2-64 - Limita il numero di processori al valore specificato. È possibile utilizzare meno processori a seconda del carico di lavoro corrente. Se viene specificato un valore maggiore del numero di CPU disponibili, viene utilizzato il numero effettivo di CPU disponibili.
Non sono sicuro di quale sia il miglior utilizzo di MAXDOP
è, tuttavia, farei un'ipotesi e direi che se hai una tabella con 8 partizioni su di essa, vorresti specificare MAXDOP(8)
a causa di limitazioni di I/O, ma potrei sbagliarmi.
Ecco alcuni collegamenti rapidi che ho trovato su MAXDOP
:
Libri online:grado di parallelismo
Linee guida generali da utilizzare per configurare l'opzione MAXDOP