Skip to content

Commit 7beb8bd

Browse files
Update sp_PerfCheck.sql
1 parent 363903f commit 7beb8bd

1 file changed

Lines changed: 127 additions & 0 deletions

File tree

sp_PerfCheck/sp_PerfCheck.sql

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)