Server Health Report – RockyPC – 2026-06-16
Tuning Goal: Server Health
Executive Summary
Top Risk
Integrity & Recoverability
Most user databases have no recent
DBCC CHECKDB, and several databases in FULL recovery have no log backup chain.Patch Posture
🔴 CU Outdated
Installed build
16.0.1180.1 vs latest build 16.0.4255.1.Immediate Performance Theme
Compilation Overhead
Batch Requests/sec 4,611 vs SQL Compilations/sec 4,568 strongly suggests ad hoc plan churn.
Top priorities
- Establish integrity checks immediately. Six databases show an apparent never-run
CHECKDBtimestamp, andDigitsSolveris 64 days old. This is the highest operational risk. - Fix backup and log-backup gaps.
model,DigitsSolver,tpcc,CRM, andtpch10have no full backups recorded; FULL recovery databases also lack log backups.tpchshowsLOG_BACKUPholdup with 9.1 GB active log. - Patch SQL Server 2022 to the latest CU. Lifecycle is healthy, but CU currency is not. You are far behind the current CU and should update for stability and security.
- Reduce plan cache churn. Compilation rate nearly equals batch rate; enable
optimize for ad hoc workloadsand review highly dynamic query patterns. - Validate and implement high-value missing indexes carefully. Missing index signals are strong across 6 databases, but several object names appear suspicious or metadata-derived; validate before creating indexes.
What looks healthy: tempdb has 8 equally sized data files with uniform fixed 64 MB growth; general user database I/O latency is excellent; lock manager memory is low and not critical; no RESOURCE_SEMAPHORE waiters; no deadlocks in the last 7 days; sysadmin membership is minimal; instant file initialization is enabled.
Health Overview
| Area | Status | Assessment |
|---|---|---|
| SQL Server lifecycle | 🟢 Green | Mainstream support until 2028-01-12; extended support until 2033-01-11. |
| CU currency | 🔴 Outdated | SQL Version: 2022; Installed CU: unknown; Installed Build: 16.0.1180.1; Latest CU: CU25; Latest Build: 16.0.4255.1; CU Age Months: 0; Servicing Model: Active CU. Recommendation: “Upgrade to the latest CU to ensure stability and security.” |
| Wait profile | 🟡 Mixed | Largest waits are Query Store sleep/background waits and PWAIT_DIRECTLOGCONSUMER_GETNEXT, which are not primary distress signals here. Actionable waits are parallelism-related (CXPACKET, CXCONSUMER, CXSYNC_PORT) plus high compilation activity. |
| I/O | 🟡 Tempdb moderate | User databases are mostly 0-3 ms latency. tempdb data files are 17-18 ms overall and are the clear I/O hotspot. |
| Memory | 🟢 Stable | No RESOURCE_SEMAPHORE waiters. Lock manager is only ~21 MB and far below critical thresholds. Buffer pool is small because SQL committed memory is currently low, not because lock memory is crowding it out. |
| Integrity checks | 🔴 Critical | Most databases have overdue or missing CHECKDB. |
| Backup posture | 🔴 Critical | Several databases have no recorded full backups; FULL recovery databases lack log backups. |
| Query Store | 🟢 Good baseline | Enabled and writable in all listed user databases. WideWorldImporters runs at compatibility level 130, limiting SQL Server 2022 optimizer benefits. |
| Security | 🟢 Generally good | Only one sysadmin. The only unencrypted session shown is shared-memory SQL telemetry, which is minimal risk and does not expose user data. |
High-level health posture diagram
This summary visual highlights the dominant operational priorities: integrity, backups, and patching before deeper performance tuning.
Detailed Prioritized Recommendations
-
Implement immediate integrity validation and recurring CHECKDB jobs.
- Critical:
WideWorldImporters,SQLStorm,tpcc,tpch,CRM, andtpch10show the sentinel date1900-01-01, which effectively means no recorded CHECKDB. DigitsSolveris also overdue at 64 days.- Recommendation: run full
DBCC CHECKDBnow, then schedule weekly for all user databases. For smaller development systems, weekly full checks are reasonable. - Confidence: 99%
- Critical:
-
Establish a valid backup strategy, especially for FULL recovery databases.
- No full backups recorded for
master,model,msdb,DigitsSolver,tpcc,CRM, andtpch10. tpch,tpcc,DigitsSolver,CRM,tpch10, andmodelare in FULL recovery without log backups recorded.tpchhas 168 VLFs with 149 active and truncation holdupLOG_BACKUP; this is operationally significant even though VLF count itself is not excessive.- Recommendation: take immediate full backups; for FULL recovery databases, begin recurring log backups or switch to SIMPLE if point-in-time recovery is not required.
- Confidence: 98%
- No full backups recorded for
-
Patch the SQL Server instance to the latest SQL Server 2022 CU.
- Lifecycle remains healthy: 🟢 Green.
- CU currency is separate and currently poor: 🔴 Outdated.
- Installed Build:
16.0.1180.1; Latest Build:16.0.4255.1. - Status meaning: Outdated means two or more CUs behind; upgrade to the latest CU for stability and security.
- Honor the provided recommendation: “Upgrade to the latest CU to ensure stability and security.”
- Confidence: 97%
-
Reduce ad hoc compilation overhead.
Batch Requests/sec = 4,611andSQL Compilations/sec = 4,568is an unusually high ratio.- Plan cache single-use ratio is 31.8%, not extreme in size terms, but the compile rate indicates constant generation of new plans.
- Recommendation: enable
optimize for ad hoc workloadsand review applications generating literal-heavy dynamic SQL. - Confidence: 95%
-
Investigate parallel query behavior, but do not change MAXDOP blindly.
MAXDOP = 8andcost threshold for parallelism = 30are reasonable starting values for 16 logical CPUs.CXCONSUMER,CXPACKET, andCXSYNC_PORTtogether indicate active parallel workload, but not necessarily misconfiguration.- Recommendation: focus first on compile reduction, query/index tuning, and current CU adoption before adjusting parallelism settings.
- Confidence: 83%
-
Review tempdb workload drivers rather than tempdb layout.
- tempdb has 8 equally sized data files for a 16-CPU server, matching best-practice starting guidance for more than 8 logical CPUs.
- Growth is fixed at 64 MB and uniform across files, which is good.
- tempdb is the main I/O hotspot with 17-18 ms average latency across data files; investigate sorts, hashes, spills, version-store usage, and temp table workloads.
- Confidence: 91%
-
Validate and tune missing index opportunities database by database.
- At least 17 high-impact missing index requests span 6 databases:
CRM,SQLStorm,tpcc,tpch,tpch10, andWideWorldImporters. - Some reported “tables” look like constraints or internal object names, so these DMV suggestions must be validated before creation.
- Recommendation: run a comprehensive Index Tuning analysis for each affected database and consolidate overlapping suggestions.
- Confidence: 88%
- At least 17 high-impact missing index requests span 6 databases:
-
Use Query Store as the primary tuning control plane and modernize compatibility where safe.
- Query Store is enabled and writable in all listed user databases, which is excellent.
WideWorldImportersremains at compatibility level 130, so it does not benefit from SQL Server 2022 features like Parameter Sensitive Plan optimization and DOP feedback.- Recommendation: test and raise compatibility to 160 for
WideWorldImportersif application validation succeeds. - Confidence: 90%
-
Maintain current security posture, but do not overreact to the telemetry connection.
- The only unencrypted session shown is
NT SERVICE\SQLTELEMETRYover shared memory. - Shared memory is local-only, and telemetry does not expose user data; this is minimal risk and should not be treated as a user-data encryption gap.
- One sysadmin login is reasonable and aligns with least privilege.
- Confidence: 96%
- The only unencrypted session shown is
-
Address isolated storage configuration risk.
WideWorldImportersfileWWI_InMemory_Data_1has autogrowth disabled. If it fills, operations can fail.- Recommendation: enable controlled growth or ensure strong proactive capacity monitoring.
- Confidence: 92%
Performance Improvements
Findings
- Top waits are dominated by
PWAIT_DIRECTLOGCONSUMER_GETNEXT,QDS_PERSIST_TASK_MAIN_LOOP_SLEEP, andQDS_ASYNC_QUEUE. The Query Store waits are background/sleep related and not a bottleneck by themselves. PWAIT_DIRECTLOGCONSUMER_GETNEXToften appears with background log consumption or ADR-related processing and is not, on its own, evidence of distress.- The most actionable performance pattern is compile intensity: almost every batch is compiling.
- Parallelism waits are present but not yet enough to justify changing
MAXDOPorcost thresholdwithout workload-specific evidence. - User database data and log I/O latencies are excellent; tempdb is the only notable I/O concentration.
Recommendations
- Enable
optimize for ad hoc workloadsto reduce plan cache waste from single-use plans. - Parameterize dynamic SQL in the application tier where possible.
- Use Query Store top resource queries in
SQLStorm,CRM,tpch, andtpch10to target statements causing tempdb use and parallel scans. - If tempdb latency remains sustained above ~15-20 ms during peak load, consider faster storage or separating tempdb from other data paths.
Configuration Optimizations
- Good settings:
MAXDOP = 8,cost threshold = 30, fixed tempdb growth,xp_cmdshell = 0,clr enabled = 0, IFI enabled. - Recommended change: enable
optimize for ad hoc workloads. - Recommended change: enable
backup checksum defaultso future backups use checksums by default. - Optional operational improvement: enable
remote admin connectionson production-like systems for break-glass troubleshooting. On a local developer machine this is lower priority. - No change recommended now:
max server memory = 23168 MBon a 32.5 GB machine is reasonable. - No lock-memory emergency:
OBJECTSTORE_LOCK_MANAGER = 21.29 MB, far below the 20-25% of SQL memory critical threshold.
Index Optimization Opportunities
Impact is potentially high, but validation is mandatory. Missing index DMVs report high scores, yet several object names appear inconsistent with real user tables. This can happen in synthetic/demo workloads or where metadata joins are imperfect.
| Database | Candidate Pattern | Assessment |
|---|---|---|
| SQLStorm | dbo.PostHistory(PostId) INCLUDE (PostHistoryTypeId) |
High-value and plausible; good candidate for validation and likely implementation. |
| SQLStorm | dbo.Votes(UserId) INCLUDE (VoteTypeId[, BountyAmount]) |
Likely overlapping requests; consolidate into one validated design if supported by workload. |
| tpch / tpch10 | customer_pk(Reputation) |
Potential scan reduction candidate if predicate is truly common. |
| CRM / WWI / tpcc | Objects named like constraints | Do not implement directly from DMV output until object mapping is verified. |
Recommendation: run Index Tuning for CRM, SQLStorm, tpcc, tpch, tpch10, and WideWorldImporters.
Query Store Optimization
- All listed user databases have Query Store in
READ_WRITE; this is a strong foundation. - Storage consumption is low, so Query Store is not under pressure.
WideWorldImporterssettings differ from the others: flush interval 50 minutes, stats interval 15 minutes, max plans per query 1000.- Recommendation: keep Query Store enabled everywhere; for consistency and easier analysis, consider normalizing
WideWorldImporterscloser to the other databases unless there is a reason for its custom settings. - Recommendation: prioritize compatibility level testing for
WideWorldImportersto unlock SQL Server 2022 optimizer enhancements.
Database Integrity Maintenance
Overdue or missing CHECKDB
- Critical / no valid recorded CHECKDB:
WideWorldImporters,SQLStorm,tpcc,tpch,CRM,tpch10 - Critical / stale:
DigitsSolverlast checked 64 days ago
Recommendation: run full integrity checks immediately, preferably during low activity, then schedule at least weekly for all user databases and after storage incidents, patching anomalies, or forced shutdowns.
Security Enhancements
- Sysadmin membership: only
RockyPC\k_a_f. This is acceptable and aligns with least privilege. - Connection encryption: the only unencrypted connection shown is the shared-memory
SQLServerCEIPtelemetry session. Because it is local shared memory and not carrying user application traffic, this is minimal risk. - Recommendation: for any future TCP client access, use TLS certificates and
Encrypt=Truein connection strings; shared memory sessions do not require the same treatment. - Integrated Security Only:
No. If SQL logins are unnecessary, consider restricting login surface over time.
Concurrency and Locking
- No deadlocks detected in the last 7 days.
- No active locks at collection time.
- No RESOURCE_SEMAPHORE waiters are present.
- Lock manager cache is only 21.31 MB, so there is no evidence of runaway lock memory.
- The emergency lock-manager remediation command is not needed now, but if lock memory ever becomes excessive, the emergency option is
DBCC FREESYSTEMCACHE ('Lock Manager : Node 0').
Because no deadlock graph or blocking-chain data was provided, no deadlock or blocking diagram is included.
Operational Best Practices
- Patch to the latest CU on a planned maintenance window after standard validation.
- Back up
master,model, andmsdb; system database backups are essential for recoverability. - Review recovery models for developer/demo databases. If point-in-time recovery is not needed, switching certain databases from FULL to SIMPLE can reduce unnecessary log-management risk.
- Enable backup checksums by default.
- Monitor the disabled autogrowth on
WideWorldImportersFILESTREAM/In-Memory related storage object.
Proactive Maintenance
- Weekly
DBCC CHECKDBon all user databases. - Daily full backups for important databases; log backups every 5-15 minutes for databases that stay in FULL recovery and need PITR.
- Monthly review of Query Store regressions and top tempdb consumers.
- Quarterly review of sysadmin membership, unused SQL logins, and connection encryption posture.
- Quarterly index health review using Query Store plus usage stats, not just missing index DMVs.
- After CU installation, baseline waits, compiles/sec, tempdb latency, and log growth again.
Scripts
Enable optimize for ad hoc workloads and backup checksum default to reduce compile waste and strengthen backup validation
USE [master];
GO
EXEC sys.sp_configure N'show advanced options', 1;
RECONFIGURE;
GO
EXEC sys.sp_configure N'optimize for ad hoc workloads', 1;
EXEC sys.sp_configure N'backup checksum default', 1;
RECONFIGURE;
GO
Run immediate DBCC CHECKDB for overdue user databases
USE [master];
GO
DBCC CHECKDB (N'WideWorldImporters') WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
DBCC CHECKDB (N'SQLStorm') WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
DBCC CHECKDB (N'tpcc') WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
DBCC CHECKDB (N'tpch') WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
DBCC CHECKDB (N'CRM') WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
DBCC CHECKDB (N'tpch10') WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
DBCC CHECKDB (N'DigitsSolver') WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
Take immediate full backups for system and user databases lacking recorded full backups
USE [master];
GO
BACKUP DATABASE [master]
TO DISK = N'C:\Backups\master_FULL.bak'
WITH INIT, CHECKSUM, COMPRESSION, STATS = 10;
GO
BACKUP DATABASE [model]
TO DISK = N'C:\Backups\model_FULL.bak'
WITH INIT, CHECKSUM, COMPRESSION, STATS = 10;
GO
BACKUP DATABASE [msdb]
TO DISK = N'C:\Backups\msdb_FULL.bak'
WITH INIT, CHECKSUM, COMPRESSION, STATS = 10;
GO
BACKUP DATABASE [DigitsSolver]
TO DISK = N'C:\Backups\DigitsSolver_FULL.bak'
WITH INIT, CHECKSUM, COMPRESSION, STATS = 10;
GO
BACKUP DATABASE [tpcc]
TO DISK = N'C:\Backups\tpcc_FULL.bak'
WITH INIT, CHECKSUM, COMPRESSION, STATS = 10;
GO
BACKUP DATABASE [CRM]
TO DISK = N'C:\Backups\CRM_FULL.bak'
WITH INIT, CHECKSUM, COMPRESSION, STATS = 10;
GO
BACKUP DATABASE [tpch10]
TO DISK = N'C:\Backups\tpch10_FULL.bak'
WITH INIT, CHECKSUM, COMPRESSION, STATS = 10;
GO
Begin transaction log backups for FULL recovery databases that need point-in-time recovery
USE [master];
GO
BACKUP LOG [DigitsSolver]
TO DISK = N'C:\Backups\DigitsSolver_LOG.trn'
WITH INIT, CHECKSUM, COMPRESSION, STATS = 10;
GO
BACKUP LOG [tpcc]
TO DISK = N'C:\Backups\tpcc_LOG.trn'
WITH INIT, CHECKSUM, COMPRESSION, STATS = 10;
GO
BACKUP LOG [tpch]
TO DISK = N'C:\Backups\tpch_LOG.trn'
WITH INIT, CHECKSUM, COMPRESSION, STATS = 10;
GO
BACKUP LOG [CRM]
TO DISK = N'C:\Backups\CRM_LOG.trn'
WITH INIT, CHECKSUM, COMPRESSION, STATS = 10;
GO
BACKUP LOG [tpch10]
TO DISK = N'C:\Backups\tpch10_LOG.trn'
WITH INIT, CHECKSUM, COMPRESSION, STATS = 10;
GO
Switch selected databases to SIMPLE recovery if point-in-time recovery is not required
USE [master];
GO
ALTER DATABASE [DigitsSolver] SET RECOVERY SIMPLE WITH NO_WAIT;
GO
ALTER DATABASE [tpcc] SET RECOVERY SIMPLE WITH NO_WAIT;
GO
ALTER DATABASE [CRM] SET RECOVERY SIMPLE WITH NO_WAIT;
GO
ALTER DATABASE [tpch10] SET RECOVERY SIMPLE WITH NO_WAIT;
GO
Enable controlled autogrowth on the WideWorldImporters FILESTREAM container to reduce out-of-space risk
USE [master];
GO
ALTER DATABASE [WideWorldImporters]
MODIFY FILE
(
NAME = N'WWI_InMemory_Data_1',
FILEGROWTH = 256MB
);
GO
Validate high-value missing index candidates before implementation
USE [master];
GO
SELECT
DB_NAME(mid.database_id) AS database_name,
OBJECT_SCHEMA_NAME(mid.object_id, mid.database_id) AS schema_name,
OBJECT_NAME(mid.object_id, mid.database_id) AS object_name,
mid.equality_columns,
mid.inequality_columns,
mid.included_columns,
migs.user_seeks,
migs.user_scans,
migs.avg_total_user_cost,
migs.avg_user_impact,
CAST((migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans)) AS DECIMAL(18,2)) AS impact_score
FROM sys.dm_db_missing_index_group_stats AS migs
JOIN sys.dm_db_missing_index_groups AS mig
ON migs.group_handle = mig.index_group_handle
JOIN sys.dm_db_missing_index_details AS mid
ON mig.index_handle = mid.index_handle
WHERE DB_NAME(mid.database_id) IN (N'CRM', N'SQLStorm', N'tpcc', N'tpch', N'tpch10', N'WideWorldImporters')
ORDER BY impact_score DESC;
GO
Raise WideWorldImporters compatibility level to 160 after application testing to unlock SQL Server 2022 optimizer features
USE [master];
GO
ALTER DATABASE [WideWorldImporters] SET COMPATIBILITY_LEVEL = 160;
GO
Optional emergency command if lock manager memory ever becomes excessive
USE [master];
GO
DBCC FREESYSTEMCACHE ('Lock Manager : Node 0');
GO