Server Health Report – RockyPC – 2026-06-04
Tuning Goal: Server Health
Executive Summary
🟢 Lifecycle Green Mainstream support until 2028-01-12 🔴 Patch Red Installed build is 385 days old; update to latest SQL Server 2022 CU
Overall, this server is functionally stable but operationally exposed. The most important risks are:
- Critical integrity gap: DBCC CHECKDB is overdue or effectively never recorded for nearly all user databases.
- Critical backup/recovery gap: several databases have no full backups recorded, and FULL recovery databases lack log backups.
- Patch currency risk: SQL Server 2022 is supported, but the instance is on an outdated patch level and should be moved to the latest CU.
- Compilation overhead: compilations/sec are very high relative to batch requests/sec, and
optimize for ad hoc workloadsis disabled. - Indexing opportunities: high-value missing index recommendations exist across 6 databases; SQLStorm has the strongest candidate on
dbo.PostHistory. - Concurrency signal: one deadlock occurred in the past 7 days and should be investigated before it becomes recurrent.
Top Priorities
- Patch SQL Server 2022 to the latest CU after validation.
- Run CHECKDB for all user databases immediately; establish a recurring schedule.
- Implement a real backup strategy, especially for FULL recovery databases.
- Enable
optimize for ad hoc workloadsto reduce compilation and plan cache churn. - Review and implement validated missing indexes, starting with SQLStorm.
What Does Not Look Critical
- Storage latency is generally healthy; tempdb row-file latency is acceptable at ~7 ms overall.
- No active
RESOURCE_SEMAPHOREwaiters are present. - Lock manager memory is only 3.42 MB, not remotely near the critical threshold.
- No evidence of current memory-grant pressure or excessive lock memory usage.
- The only unencrypted connection is the local shared-memory SQL telemetry session, which is minimal risk and can be ignored.
- 🟢 Lifecycle No version support urgency.
- 🔴 Patch Treat patching as a near-term operational task. Remaining on RTM-GDR-level code for over a year increases exposure to already-fixed engine defects and performance issues.
Health Dashboard
| Area | Status | Key Evidence | Assessment |
|---|---|---|---|
| Lifecycle | 🟢 Green | Mainstream support through 2028-01-12 | Version is supportable. |
| Patch Currency | 🔴 Red | Patch age 385 days; latest CU recommended | High priority to update. |
| I/O | 🟢 Green | SQLStorm 5 ms reads, tempdb 7 ms overall, logs near 0-12 ms | No material storage bottleneck visible. |
| Memory | 🟢 Green | No RESOURCE_SEMAPHORE waiters; modest grants; lock manager 3.42 MB | No present grant/lock memory crisis. |
| Plan Cache / Compilation | 🟡 Warning | 32,646 compilations/sec vs 61,175 batch requests/sec; single-use ratio 30.8% | High compilation churn; improve plan reuse. |
| Integrity | 🔴 Red | Most CHECKDB values show Jan 1 1900 or 52+ days stale | Critical integrity maintenance gap. |
| Backups | 🔴 Red | Several DBs have no full backups; FULL recovery DBs missing log backups | Critical recovery exposure. |
| Security | 🟢 Good | One sysadmin only; user connections encrypted; only unencrypted shared-memory telemetry | No meaningful current security alarm from connection encryption data. |
Detailed Prioritized Recommendations
-
Immediately establish integrity validation.
Run
DBCC CHECKDBfor all user databases, then schedule at least weekly for critical databases and monthly at minimum for lower-value databases. - Fix backup and log-backup coverage. Databases in FULL recovery without log backups are at risk of unbounded log growth and broken recovery objectives.
- Patch to the latest SQL Server 2022 CU. This is the most important platform-level maintenance item after backup/integrity.
-
Reduce compilation overhead.
Enable
optimize for ad hoc workloads; then monitor compilation ratio and single-use plans. - Validate and implement missing indexes, starting with SQLStorm. Use targeted index review in SQLStorm, CRM, tpcc, tpch, tpch10, and WideWorldImporters.
- Investigate the recent deadlock. One deadlock in 7 days is not a crisis, but it is a clear sign of concurrency contention needing root-cause review.
- Retain current MAXDOP/CTFP unless workload testing suggests otherwise. MAXDOP 8 and cost threshold 30 are reasonable for a 16-logical-CPU system.
- Keep Query Store enabled everywhere; tune only selected settings. Current Query Store posture is generally good.
- Optionally enable blocked process threshold for troubleshooting. Helpful if deadlocks/blocking recur.
Performance
Findings
- Top waits are dominated by
PWAIT_DIRECTLOGCONSUMER_GETNEXTand Query Store sleep waits such asQDS_PERSIST_TASK_MAIN_LOOP_SLEEPandQDS_ASYNC_QUEUE. These are typically benign background or idle waits and are not primary bottlenecks. CXCONSUMERandCXPACKETare present but low as a share of total waits. They do not currently indicate severe parallelism problems.- I/O latency is healthy overall. tempdb is the busiest I/O consumer, but its observed row-file latency around 7 ms overall is acceptable.
- Memory pressure is low right now:
- No active
RESOURCE_SEMAPHOREwaiters. - Top memory grant is only 1,024 KB.
- Lock manager cache is only 3.42 MB, far below the 20-25% critical threshold.
- No active
- Compilation load is high:
- Batch Requests/sec: 61,175
- SQL Compilations/sec: 32,646
- Compilation rate is roughly 53% of batch rate, which is too high for efficient plan reuse.
- Plan cache pollution is moderate:
- Single-use plans: 8 of 26 plans (30.8%)
optimize for ad hoc workloadsis currently disabled
- Buffer pool distribution query timed out, so exact per-database buffer residency could not be confirmed.
Recommendations
- Enable optimize for ad hoc workloads. This is the clearest configuration improvement based on the observed compilation churn and single-use plan ratio.
- Do not treat current waits as evidence of major storage or memory distress. The server’s present bottleneck is more likely query/plan efficiency than raw infrastructure.
- Continue monitoring tempdb. Current tempdb file layout looks good: 8 evenly utilized data files for 16 schedulers, and latency is acceptable.
- Retain MAXDOP 8 and cost threshold 30 for now. These values are reasonable for this hardware and SQL Server 2022 unless workload-specific testing proves a better alternative.
Configuration
Positive Configuration Notes
max server memoryis capped at 23,168 MB on a 32.5 GB machine, leaving room for the OS.max degree of parallelism = 8is appropriate for 16 logical CPUs.cost threshold for parallelism = 30is reasonable and much better than the default 5.clr enabled,xp_cmdshell,Ole Automation Procedures, and external scripts are disabled, which reduces attack surface.
Configuration Issues to Address
optimize for ad hoc workloads = 0should be changed to 1.backup checksum default = 0should be enabled to improve backup validation quality.blocked process threshold = 0limits troubleshooting visibility for blocking/deadlock analysis.remote admin connections = 0is acceptable for local/lab use, but enabling DAC can help during severe production incidents.tempdb metadata memory-optimized = 0is not automatically a problem; only consider enabling if you observe metadata contention, which is not shown here.
Patch and Lifecycle
- 🟢 Lifecycle Green SQL Server 2022 remains in mainstream support until 2028-01-12.
- 🔴 Patch Red The installed patch level is materially stale. Apply the latest SQL Server 2022 CU after regression testing.
Index Optimization
Findings
- There are 9+ high-impact missing index suggestions across 6 databases.
- The strongest candidate in the provided data is:
- SQLStorm.dbo.PostHistory on equality column
PostIdincludingPostHistoryTypeId - Impact score: 70,054,034
- SQLStorm.dbo.PostHistory on equality column
- Several other DMV suggestions appear suspicious because they reference objects that look like constraints or oddly mismatched schemas. Those should be validated carefully before implementation.
| Affected Database | Priority | Observation | Recommendation |
|---|---|---|---|
| SQLStorm | High | dbo.PostHistory(PostId) INCLUDE (PostHistoryTypeId) is a plausible, high-value candidate. |
Validate against workload and existing indexes; likely first implementation candidate. |
| CRM | Medium | Missing index entries appear partially suspect. | Run comprehensive index analysis before creating anything. |
| tpcc / tpch / tpch10 | Medium | Suggestions may be synthetic/test workload artifacts. | Review index needs per workload, not by DMV alone. |
| WideWorldImporters | Medium | Some suggestions look clearly non-production-like or mismapped. | Validate object names and queries before any index creation. |
Recommended next step: run a comprehensive Index Tuning analysis for CRM, SQLStorm, tpcc, tpch, tpch10, and WideWorldImporters.
Query Store
Assessment
- Query Store is enabled and writable on all listed databases. This is good and should be retained.
- Storage utilization is low, so there is no current Query Store pressure.
- SQLStorm is well-positioned for plan regression analysis because it is on compatibility level 160 with Query Store active.
- WideWorldImporters is still at compatibility level 130 even though the instance is SQL Server 2022. This means it is not using newer optimizer behaviors such as Parameter Sensitive Plan optimization.
- WideWorldImporters has
Max Plans Per Query = 1000, which is unnecessarily high for most workloads.
Recommendations
- Keep Query Store enabled everywhere.
- For production-like databases, consider reducing
MAX_PLANS_PER_QUERYfrom 1000 to 200 unless there is a strong reason to keep the larger value. - Evaluate raising
WideWorldImporterscompatibility level from 130 to 160 if application testing permits, to use SQL Server 2022 optimizer features. - Use Query Store to validate the before/after effect of any new index or configuration changes.
Database Integrity
Findings
| Database | Last CHECKDB | Status |
|---|---|---|
| WideWorldImporters | Jan 1 1900 | 🔴 Critical |
| SQLStorm | Jan 1 1900 | 🔴 Critical |
| tpcc | Jan 1 1900 | 🔴 Critical |
| tpch | Jan 1 1900 | 🔴 Critical |
| CRM | Jan 1 1900 | 🔴 Critical |
| tpch10 | Jan 1 1900 | 🔴 Critical |
| DigitsSolver | 2026-04-12 | 🔴 Critical |
Recommendations
- Run CHECKDB immediately on every user database.
- Schedule recurring CHECKDB jobs and record results centrally.
- If maintenance windows are tight, use full CHECKDB on a rotating basis and reserve
PHYSICAL_ONLYfor interim checks only; it is not a substitute for full logical consistency checks.
Security
Findings
- Only one sysadmin login exists:
RockyPC\k_a_f. This aligns with least-privilege principles better than most environments. - All user sessions shown are encrypted over shared memory.
- The only unencrypted connection is
NT SERVICE\SQLTELEMETRYusing shared memory forSQLServerCEIP. As requested, this is minimal risk and can be ignored because user data is not exposed and shared memory is local only. - Integrated Security Only is disabled, so SQL authentication may be allowed. No specific login risk data was provided beyond sysadmin membership.
Recommendations
- Retain the current small sysadmin surface; continue using least privilege.
- If remote client connections will be used, standardize encrypted connections with TLS and consider Force Encryption where operationally appropriate.
- Audit all SQL-authenticated logins and disable any that are unused.
Concurrency
Findings
- One deadlock was captured in the last 7 days.
- No blocking chain data was provided, and the deadlock graph payload is truncated, so a precise lock/resource diagram cannot be rendered reliably.
- Current lock counts by session are low and do not indicate runaway lock accumulation.
- Lock manager memory is tiny, so there is no sign of lock-memory pressure.
Deadlock Summary
Deadlock #1: 2026-05-31 15:37:34 UTC
Deadlock XML exists but was truncated in the input. A detailed resource/statement rendering is therefore not reliable from the supplied data.
[Process A] --waits on--> [Resource X held by Process B]
[Process B] --waits on--> [Resource Y held by Process A]
Result: SQL Server chose one victim and terminated it.
Conceptual deadlock shape only. Use the full deadlock XML for exact statement, object, and lock-mode analysis.
Recommendations
- Run a dedicated deadlock analysis using the Fix Deadlocks goal.
- Enable blocked process threshold for better troubleshooting if blocking/deadlocks continue.
- Use Query Store and deadlock XML together to identify the statement pair and apply targeted indexing or transaction-scoping fixes.
DBCC FREESYSTEMCACHE ('Lock Manager : Node 0') are not recommended now. Keep it only as an emergency remediation option if lock-manager memory ever becomes excessive.
Operations & Recovery
Critical Backup / Recovery Findings
- No full backup recorded for: master, model, msdb, DigitsSolver, tpcc, CRM, tpch10.
- FULL recovery but no log backups recorded for: model, DigitsSolver, tpcc, tpch, CRM, tpch10.
- WideWorldImporters full backup is 1335 days old.
- SQLStorm full backup is 221 days old.
Recommendations
- Start immediate full backups for all databases lacking them.
- For FULL recovery databases, begin regular transaction log backups or switch to SIMPLE if point-in-time recovery is not required.
- Enable backup checksum default.
- Test restores; backup existence alone is not recovery readiness.
- Because uptime is only 7 days, ensure startup, maintenance, and backup jobs are all validated after recent restart.
Confidence Levels
| Area | Confidence | Reason |
|---|---|---|
| Patch / lifecycle assessment | High (95%) | Direct version and lifecycle data supplied. |
| Integrity maintenance risk | High (98%) | CHECKDB timestamps are explicit and critically overdue. |
| Backup / recovery risk | High (97%) | Backup history and recovery-model mismatches are explicit. |
| Compilation / plan cache recommendation | High (90%) | Strong supporting metrics: high compile rate and disabled ad hoc optimization. |
| Storage bottleneck assessment | High (88%) | Per-file latencies are consistently low. |
| Memory pressure assessment | Medium-High (85%) | No semaphore waiters, grants tiny, lock memory tiny; buffer pool distribution data unavailable. |
| Index recommendations | Medium (72%) | One strong candidate exists, but several DMV entries appear suspicious and need validation. |
| Deadlock root-cause specificity | Medium-Low (55%) | Deadlock XML was truncated, limiting exact diagnosis. |
Scripts
Enable optimize for ad hoc workloads to reduce plan cache churn and compilation overhead
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;
RECONFIGURE;
GO
Enable backup checksum by default to improve backup validation quality
USE [master];
GO
EXEC sys.sp_configure N'show advanced options', 1;
RECONFIGURE;
GO
EXEC sys.sp_configure N'backup checksum default', 1;
RECONFIGURE;
GO
Enable blocked process threshold for troubleshooting blocking and deadlocks
USE [master];
GO
EXEC sys.sp_configure N'show advanced options', 1;
RECONFIGURE;
GO
EXEC sys.sp_configure N'blocked process threshold (s)', 5;
RECONFIGURE;
GO
Run DBCC CHECKDB for all user databases immediately to implement integrity validation
USE [master];
GO
DECLARE @sql nvarchar(max) = N'';
SELECT @sql = @sql + N'
DBCC CHECKDB (N''' + REPLACE(name,'''','''''') + N''') WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
'
FROM sys.databases
WHERE database_id > 4
AND state_desc = N'ONLINE';
EXEC sys.sp_executesql @sql;
GO
Switch selected databases from FULL to SIMPLE recovery if point-in-time restore 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
Create a high-value candidate nonclustered index on SQLStorm.dbo.PostHistory
USE [SQLStorm];
GO
IF NOT EXISTS
(
SELECT 1
FROM sys.indexes
WHERE object_id = OBJECT_ID(N'dbo.PostHistory')
AND name = N'IX_PostHistory_PostId_PostHistoryTypeId'
)
BEGIN
CREATE NONCLUSTERED INDEX [IX_PostHistory_PostId_PostHistoryTypeId]
ON [dbo].[PostHistory] ([PostId])
INCLUDE ([PostHistoryTypeId]);
END
GO
Reduce Query Store max plans per query for WideWorldImporters to a more controlled setting
USE [master];
GO
ALTER DATABASE [WideWorldImporters]
SET QUERY_STORE (
MAX_PLANS_PER_QUERY = 200
);
GO
Raise WideWorldImporters compatibility level to 160 to use SQL Server 2022 optimizer features
USE [master];
GO
ALTER DATABASE [WideWorldImporters]
SET COMPATIBILITY_LEVEL = 160;
GO
Emergency-only command to flush lock manager cache if lock-manager memory ever becomes excessive
USE [master];
GO
DBCC FREESYSTEMCACHE ('Lock Manager : Node 0');
GO