@@ -247,6 +247,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
247247 /* Other configuration variables */
248248 @priority_boost bit ,
249249 @lightweight_pooling bit ,
250+ @affinity_mask bigint ,
251+ @affinity_io_mask bigint ,
252+ @affinity64_mask bigint ,
253+ @affinity64_io_mask bigint ,
250254 /* TempDB configuration variables */
251255 @tempdb_data_file_count integer ,
252256 @tempdb_log_file_count integer ,
@@ -2960,6 +2964,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29602964 CROSS JOIN sys .configurations AS c2
29612965 WHERE c1 .name = N ' priority boost'
29622966 AND c2 .name = N ' lightweight pooling' ;
2967+
2968+ /* Collect affinity mask settings */
2969+ SELECT
2970+ @affinity_mask =
2971+ CONVERT (bigint , c1 .value_in_use ),
2972+ @affinity_io_mask =
2973+ CONVERT (bigint , c2 .value_in_use ),
2974+ @affinity64_mask =
2975+ CONVERT (bigint , c3 .value_in_use ),
2976+ @affinity64_io_mask =
2977+ CONVERT (bigint , c4 .value_in_use )
2978+ FROM sys .configurations AS c1
2979+ CROSS JOIN sys .configurations AS c2
2980+ CROSS JOIN sys .configurations AS c3
2981+ CROSS JOIN sys .configurations AS c4
2982+ WHERE c1 .name = N ' affinity mask'
2983+ AND c2 .name = N ' affinity I/O mask'
2984+ AND c3 .name = N ' affinity64 mask'
2985+ AND c4 .name = N ' affinity64 I/O mask' ;
29632986 END ;
29642987
29652988 /*
@@ -3498,6 +3521,110 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34983521 );
34993522 END ;
35003523
3524+ /* Affinity Mask check */
3525+ IF @affinity_mask <> 0
3526+ BEGIN
3527+ INSERT INTO
3528+ #results
3529+ (
3530+ check_id,
3531+ priority,
3532+ category,
3533+ finding,
3534+ details,
3535+ url
3536+ )
3537+ VALUES
3538+ (
3539+ 1008 ,
3540+ 50 , /* Medium priority */
3541+ N ' Server Configuration' ,
3542+ N ' Affinity Mask Configured' ,
3543+ N ' Affinity mask has been manually configured to ' +
3544+ CONVERT (nvarchar (20 ), @affinity_mask) +
3545+ N ' . This can limit SQL Server CPU usage and should only be used when necessary for specific CPU binding scenarios.' ,
3546+ N ' https://erikdarling.com/sp_PerfCheck/#AffinityMask'
3547+ );
3548+ END ;
3549+
3550+ /* Affinity I/O Mask check */
3551+ IF @affinity_io_mask <> 0
3552+ BEGIN
3553+ INSERT INTO
3554+ #results
3555+ (
3556+ check_id,
3557+ priority,
3558+ category,
3559+ finding,
3560+ details,
3561+ url
3562+ )
3563+ VALUES
3564+ (
3565+ 1009 ,
3566+ 50 , /* Medium priority */
3567+ N ' Server Configuration' ,
3568+ N ' Affinity I/O Mask Configured' ,
3569+ N ' Affinity I/O mask has been manually configured to ' +
3570+ CONVERT (nvarchar (20 ), @affinity_io_mask) +
3571+ N ' . This binds I/O completion to specific CPUs and should only be used for specialized workloads.' ,
3572+ N ' https://erikdarling.com/sp_PerfCheck/#AffinityMask'
3573+ );
3574+ END ;
3575+
3576+ /* Affinity64 Mask check */
3577+ IF @affinity64_mask <> 0
3578+ BEGIN
3579+ INSERT INTO
3580+ #results
3581+ (
3582+ check_id,
3583+ priority,
3584+ category,
3585+ finding,
3586+ details,
3587+ url
3588+ )
3589+ VALUES
3590+ (
3591+ 1010 ,
3592+ 50 , /* Medium priority */
3593+ N ' Server Configuration' ,
3594+ N ' Affinity64 Mask Configured' ,
3595+ N ' Affinity64 mask has been manually configured to ' +
3596+ CONVERT (nvarchar (20 ), @affinity64_mask) +
3597+ N ' . This can limit SQL Server CPU usage on high-CPU systems and should be carefully evaluated.' ,
3598+ N ' https://erikdarling.com/sp_PerfCheck/#AffinityMask'
3599+ );
3600+ END ;
3601+
3602+ /* Affinity64 I/O Mask check */
3603+ IF @affinity64_io_mask <> 0
3604+ BEGIN
3605+ INSERT INTO
3606+ #results
3607+ (
3608+ check_id,
3609+ priority,
3610+ category,
3611+ finding,
3612+ details,
3613+ url
3614+ )
3615+ VALUES
3616+ (
3617+ 1011 ,
3618+ 50 , /* Medium priority */
3619+ N ' Server Configuration' ,
3620+ N ' Affinity64 I/O Mask Configured' ,
3621+ N ' Affinity64 I/O mask has been manually configured to ' +
3622+ CONVERT (nvarchar (20 ), @affinity64_io_mask) +
3623+ N ' . This binds I/O completion on high-CPU systems and should be carefully evaluated.' ,
3624+ N ' https://erikdarling.com/sp_PerfCheck/#AffinityMask'
3625+ );
3626+ END ;
3627+
35013628 /* Check for value_in_use <> running_value */
35023629 INSERT INTO
35033630 #results
0 commit comments