This is very rare interview question I faced in one of my interview and
thought to write a quick article with reference of MSDN.
When SQL Server runs on a computer with more than one microprocessor or
CPU, it detects the best degree of parallelism, that is, the number of
processors employed to run a single statement, for each parallel plan
execution. You can use the max degree of parallelism option to limit the number
of processors to use in parallel plan execution. To enable the server to
determine the maximum degree of parallelism, set this option to 0, the default
value. Setting maximum degree of parallelism to 0 allows SQL Server to use all
the available processors up to 64 processors. To suppress parallel plan
generation, set max degree of parallelism to 1. Set the value to a number
greater than 1 to restrict the maximum number of processors used by a single
query execution. The maximum value for the degree of parallelism setting is
controlled by the edition of SQL Server, CPU type, and operating system. If a
value greater than the number of available processors is specified, the actual
number of available processors is used. If the computer has only one processor,
the max degree of parallelism value is ignored.
| 
Use below guidelines to configure  
1.       
  For servers that use more than eight processors, use the following
  configuration:  
          MAXDOP=8 
2.       
  For servers that use eight or fewer processors, use the following
  configuration:  
MAXDOP=0 to
  N (N represents the number of processors)  
Also, the maximum value of 8 that is mentioned in
  these guidelines is applicable for typical SQL Server activity and the
  overhead for the exchange operators that are used in parallel query plans.
  You can vary this maximum value, depending on your specific application
  patterns and the concurrent activity on the instance of SQL Server. For
  example, consider the following situations: 
·        
  If you have very small number of queries that are executing at the same
  time compared with the number of processors, you can set the MAXDOP value to
  a larger value. For example, you can set the MAXDOP value to 16.  
·        
  If you a have very large number of queries that are executing at the
  same time compared with the number of processors, you can set the MAXDOP
  value to a smaller value. For example, you can set the MAXDOP value to 4.  
The max degree of parallelism option is an advanced option. If you are
  using the sp_configure system stored procedure to change the setting, you can
  change max degree of parallelism only when show advanced options is set to 1.
  The setting takes effect immediately (without restarting the MSSQLSERVER
  service). 
The following example sets the max degree of parallelism option to 8. 
sp_configure 'show
  advanced options', 1; 
GO 
RECONFIGURE WITH
  OVERRIDE; 
GO 
sp_configure 'max
  degree of parallelism', 8; 
GO 
RECONFIGURE WITH
  OVERRIDE; 
GO 
Using Management Studio 
1.       
  In Object Explorer, right-click a server and select Properties. 
2.       
  Click the Advanced node. 
3.       
  In the Max Degree of Parallelism box, select the maximum number of
  processors to use in parallel plan execution. 
The default value of 0 uses all available
  processors. Set max degree of parallelism to 1 to suppress parallel plan
  generation. Set the value to a number greater than 1 to restrict the maximum
  number of processors used by a single parallel query execution. If a value
  greater than the number of available processors is specified, the actual
  number of available processors is used. If the computer has only one
  processor, the max degree of parallelism value is ignored. 
Note: The max degree of parallelism
  configuration option does not limit the number of processors that SQL Server
  uses. To configure the number of processors that SQL Server uses, use the affinity
  mask configuration option. 
                                                      
  Affinity Mask Option 
To carry out multitasking, Microsoft Windows 2000
  and Windows Server 2003 sometimes move process threads among different
  processors. Although efficient from an operating system point of view, this
  activity can reduce SQL Server performance under heavy system loads, as each
  processor cache is repeatedly reloaded with data. Assigning processors to
  specific threads can improve performance under these conditions by
  eliminating processor reloads and reducing thread migration across processors
  (thereby reducing context switching); such an association between a thread
  and a processor is called processor affinity. 
Affinity
  support for servers with 33 to 64 processors is only available on 64-bit
  operating systems. 
Changes to the affinity masks occur dynamically,
  allowing for on-demand startup and shutdown of the CPU schedulers that bind
  process threads within SQL Server. This can occur as conditions change on the
  server. For example, if a new instance of SQL Server is added to the server,
  it may be necessary to make adjustments to the affinity mask option to
  redistribute processor load.  
Modifications to the affinity bitmasks require SQL
  Server to enable a new CPU scheduler and disable the existing CPU scheduler.
  New batches can then be processed on the new or remaining schedulers.  
To start a new CPU scheduler, SQL Server creates a
  new scheduler and adds it to the list of its standard schedulers. The new
  scheduler is considered only for the new incoming batches. Current batches
  continue to run on the same scheduler. The workers migrate to the new
  scheduler as they free up, or as new workers are created. Shutting down a
  scheduler requires all batches on the scheduler to complete their activities
  and exit. A scheduler that has been shut down is marked as offline so that no
  new batch is scheduled on it. 
Whether a new scheduler is added or removed, the
  permanent system tasks such as lockmonitor, checkpoint, system task thread
  (processing DTC), and signal process continue to run on the scheduler while
  the server is operational. These permanent system tasks do not dynamically
  migrate. To redistribute processor load for these system tasks across
  schedulers, it is necessary to restart the SQL Server instance. If SQL Server
  attempts to shut down a scheduler associated with a permanent system task,
  the task continues to run on the offline scheduler (no migration). This
  scheduler is bound to the processors in the modified affinity mask and should
  not put any load on the processor it was affinitized with before the change.
  Having extra offline schedulers, should not significantly affect the load of
  the system. If this is not the case, a database server reboot is required to
  reconfigure these tasks.  
The I/O affinity tasks (such as lazywriter and
  logwriter) are directly affected by the I/O affinity mask. If the lazywriter
  and logwriter tasks are not affinitized, they follow the same rules defined
  for the other permanent tasks such as lockmonitor or checkpoint. 
The values for affinity mask are as follows: 
1.       
  A one-byte affinity mask covers up to 8 CPUs in a multiprocessor
  computer. 
2.       
  A two-byte affinity mask covers up to 16 CPUs in a multiprocessor
  computer. 
3.       
  A three-byte affinity mask covers up to 24 CPUs in a multiprocessor
  computer. 
4.       
  A four-byte affinity mask covers up to 32 CPUs in a multiprocessor
  computer. 
5.       
  To cover more than 32 CPUs, configure a four-byte affinity mask for the
  first 32 CPUs and up to a four-byte affinity64 mask for the remaining CPUs. 
As an example of setting the affinity mask option,
  if processors 1, 2, and 5 are selected as available with bits 1, 2, and 5 set
  to 1 and bits 0, 3, 4, 6, and 7 set to 0, a hexadecimal value of 0x26 or the
  decimal equivalent of 38 is specified. Number the bits from right to left.
  The affinity mask option starts counting processors from 0 to 31, so that in
  the following example the counter 1 represents the second processor on the
  server. 
sp_configure 'show
  advanced options', 1; 
RECONFIGURE; 
GO 
sp_configure 'affinity
  mask', 38; 
RECONFIGURE; 
GO 
These are affinity mask values for an 8-CPU
  system. 
 
The affinity mask option is an advanced option. If
  you are using the sp_configure system stored procedure to change the setting,
  you can change affinity mask only when show advanced options is set to 1.
  After executing the Transact-SQL RECONFIGURE command, the new setting takes
  effect immediately without requiring a restart of the SQL Server instance. 
Refer
  below links for detailed information | ||||||||||||||||||||||||||||
 
 
No comments:
Post a Comment