Server Health Report – RockyPC – 2026-06-16

Tuning Goal: Server Health
Server: RockyPC
Database: master
Version: SQL Server 2022 (16.x) RTM-GDR, build 16.0.1180.1
Edition: Developer Edition (64-bit) / Engine Edition: Enterprise
OS: Windows 10 Home x64 (Hypervisor)

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

  1. Establish integrity checks immediately. Six databases show an apparent never-run CHECKDB timestamp, and DigitsSolver is 64 days old. This is the highest operational risk.
  2. Fix backup and log-backup gaps. model, DigitsSolver, tpcc, CRM, and tpch10 have no full backups recorded; FULL recovery databases also lack log backups. tpch shows LOG_BACKUP holdup with 9.1 GB active log.
  3. 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.
  4. Reduce plan cache churn. Compilation rate nearly equals batch rate; enable optimize for ad hoc workloads and review highly dynamic query patterns.
  5. 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

Server health posture summary Lifecycle 🟢 Supported CU Currency 🔴 Outdated CHECKDB 🔴 Overdue Backups 🔴 Gaps Performance 🟡 Compile-heavy
This summary visual highlights the dominant operational priorities: integrity, backups, and patching before deeper performance tuning.

Detailed Prioritized Recommendations

  1. Implement immediate integrity validation and recurring CHECKDB jobs.
    • Critical: WideWorldImporters, SQLStorm, tpcc, tpch, CRM, and tpch10 show the sentinel date 1900-01-01, which effectively means no recorded CHECKDB.
    • DigitsSolver is also overdue at 64 days.
    • Recommendation: run full DBCC CHECKDB now, then schedule weekly for all user databases. For smaller development systems, weekly full checks are reasonable.
    • Confidence: 99%
  2. Establish a valid backup strategy, especially for FULL recovery databases.
    • No full backups recorded for master, model, msdb, DigitsSolver, tpcc, CRM, and tpch10.
    • tpch, tpcc, DigitsSolver, CRM, tpch10, and model are in FULL recovery without log backups recorded.
    • tpch has 168 VLFs with 149 active and truncation holdup LOG_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%
  3. 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%
  4. Reduce ad hoc compilation overhead.
    • Batch Requests/sec = 4,611 and SQL Compilations/sec = 4,568 is 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 workloads and review applications generating literal-heavy dynamic SQL.
    • Confidence: 95%
  5. Investigate parallel query behavior, but do not change MAXDOP blindly.
    • MAXDOP = 8 and cost threshold for parallelism = 30 are reasonable starting values for 16 logical CPUs.
    • CXCONSUMER, CXPACKET, and CXSYNC_PORT together 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%
  6. 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%
  7. 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, and WideWorldImporters.
    • 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%
  8. 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.
    • WideWorldImporters remains 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 WideWorldImporters if application validation succeeds.
    • Confidence: 90%
  9. Maintain current security posture, but do not overreact to the telemetry connection.
    • The only unencrypted session shown is NT SERVICE\SQLTELEMETRY over 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%
  10. Address isolated storage configuration risk.
    • WideWorldImporters file WWI_InMemory_Data_1 has 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, and QDS_ASYNC_QUEUE. The Query Store waits are background/sleep related and not a bottleneck by themselves.
  • PWAIT_DIRECTLOGCONSUMER_GETNEXT often 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 MAXDOP or cost threshold without workload-specific evidence.
  • User database data and log I/O latencies are excellent; tempdb is the only notable I/O concentration.

Recommendations

  1. Enable optimize for ad hoc workloads to reduce plan cache waste from single-use plans.
  2. Parameterize dynamic SQL in the application tier where possible.
  3. Use Query Store top resource queries in SQLStorm, CRM, tpch, and tpch10 to target statements causing tempdb use and parallel scans.
  4. 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 default so future backups use checksums by default.
  • Optional operational improvement: enable remote admin connections on production-like systems for break-glass troubleshooting. On a local developer machine this is lower priority.
  • No change recommended now: max server memory = 23168 MB on 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.
  • WideWorldImporters settings 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 WideWorldImporters closer to the other databases unless there is a reason for its custom settings.
  • Recommendation: prioritize compatibility level testing for WideWorldImporters to 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: DigitsSolver last 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 SQLServerCEIP telemetry 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=True in 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, and msdb; 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 WideWorldImporters FILESTREAM/In-Memory related storage object.

Proactive Maintenance

  1. Weekly DBCC CHECKDB on all user databases.
  2. Daily full backups for important databases; log backups every 5-15 minutes for databases that stay in FULL recovery and need PITR.
  3. Monthly review of Query Store regressions and top tempdb consumers.
  4. Quarterly review of sysadmin membership, unused SQL logins, and connection encryption posture.
  5. Quarterly index health review using Query Store plus usage stats, not just missing index DMVs.
  6. 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