vm-ssrs16-prod — SSRS Production VM
Overview
Production SQL Server Reporting Services (SSRS) VM hosting co-located SQL Server 2016 and SSRS.
| Property | Value |
|---|---|
| VM Name | vm-ssrs16-prod |
| Resource Group | rg-eshars-prod |
| Region | Central US |
| Created | 2016-07-31 |
| Owner | Chris Ertel |
Current Configuration (as of 2026-03-05)
| Property | Value | Status |
|---|---|---|
| VM Size | Standard D2s v3 (2 vCPUs, 8 GB RAM) | UNDERSIZED |
| OS | Windows Server 2012 R2 Datacenter | END OF LIFE (Oct 2023) |
| SQL Server | SQL Server 2016 Standard | APPROACHING EOL (Jul 2026) |
| VM Generation | V1 | Legacy |
| Data Disks | 1 | Needs separation (data/log/tempdb) |
| Disk Encryption | Not enabled | Security gap |
| Health Monitoring | Not enabled | No alerting |
| Auto-shutdown | Not enabled | — |
| Security Type | Standard | Consider Trusted Launch |
| Private IP | 10.0.0.5 | VNet: rg-eshars-prod/default |
| Public IP | 23.99.180.223 | DNS: prodreportserver.centralus.cloudapp.azure.com |
Known Issues
Thread Pool Starvation (2026-03-05)
The SQL IaaS Agent extension experiences .NET thread pool starvation causing gRPC failures.
Event log pattern:
- Warning 1000 (.NET Runtime) — Kestrel heartbeat delayed >1s (thread pool starvation)
- Error 1000 (.NET Runtime) — gRPC
GetSqlLogDiskStorageDatafails with HTTP/2 connection fault - Warning 54609 (SQL IaaS Agent) — gRPC channel unavailable
Root cause: 8 GB RAM is insufficient for co-located SQL Server + SSRS. SQL Server consumes most available memory, starving the IaaS agent process. The D2s_v3 SKU has a 4:1 memory-to-vCore ratio — SQL workloads need 8:1.
Critical Risks
- Windows Server 2012 R2 EOL — No security patches since October 2023. This is a compliance risk (HIPAA, Defender findings).
- SQL Server 2016 EOL — Extended support ends July 2026. No further security updates after that date.
- Undersized VM — 2 vCPUs / 8 GB RAM cannot adequately run SQL Server + SSRS + OS + IaaS Agent concurrently.
- Single data disk — Data files, log files, and tempdb likely share a single volume, causing I/O contention.
- No disk encryption — Data at rest is not encrypted.
- No health monitoring — No proactive alerting for VM health issues.
- Public IP exposed — VM has a public IP; verify NSG rules and access restrictions.
Recommended Remediation
Phase 1: Immediate (Operational)
- Update SQL IaaS Agent extension to latest version (Azure Portal > SQL VM > Repair)
- Set SQL Server
max server memory(currently likely unlimited — cap at 4,800 MB for 8 GB VM) - Enable Lock Pages in Memory for SQL Server service account
- Verify NSG rules on the public IP
Phase 2: VM Rebuild (Short-term)
This VM needs a full rebuild, not just a resize, due to the EOL OS and V1 generation.
Target configuration:
| Property | Target Value |
|---|---|
| VM Size | Standard E8bds v5 (8 vCPUs, 64 GB RAM) |
| OS | Windows Server 2022 Datacenter |
| SQL Server | SQL Server 2022 Standard (or evaluate PBIRS) |
| VM Generation | V2 (UEFI, Trusted Launch) |
| Disk Layout | Separate Premium SSD v2 for data, log, tempdb |
| Disk Encryption | Azure Disk Encryption enabled |
| Health Monitoring | Enabled with Azure Monitor |
Memory allocation for E8bds_v5 (64 GB):
| Component | Allocation |
|---|---|
SQL Server max server memory | 38,400 MB (~60%) |
SSRS WorkingSetMaximum | 16,384 MB (~25%) |
| OS + IaaS Agent + other | ~10 GB (~15%) |
Phase 3: Architecture (Medium-term)
- Evaluate separating SSRS onto its own VM
- Evaluate migrating to Power BI Report Server (SSRS 2022 is final release, EOL 2033)
- Implement read replicas for reporting queries to offload primary SQL Server
- Consider moving ReportServer catalog to Azure SQL Managed Instance
Related
- Investigation:
ssrs-vm-thread-pool-starvation-and-iaas-agent-failures(control-center) - Azure VM Size Best Practices for SQL Server
- Azure Storage Best Practices for SQL Server