Skip to content

vm-ssrs16-prod — SSRS Production VM

Overview

Production SQL Server Reporting Services (SSRS) VM hosting co-located SQL Server 2016 and SSRS.

PropertyValue
VM Namevm-ssrs16-prod
Resource Grouprg-eshars-prod
RegionCentral US
Created2016-07-31
OwnerChris Ertel

Current Configuration (as of 2026-03-05)

PropertyValueStatus
VM SizeStandard D2s v3 (2 vCPUs, 8 GB RAM)UNDERSIZED
OSWindows Server 2012 R2 DatacenterEND OF LIFE (Oct 2023)
SQL ServerSQL Server 2016 StandardAPPROACHING EOL (Jul 2026)
VM GenerationV1Legacy
Data Disks1Needs separation (data/log/tempdb)
Disk EncryptionNot enabledSecurity gap
Health MonitoringNot enabledNo alerting
Auto-shutdownNot enabled
Security TypeStandardConsider Trusted Launch
Private IP10.0.0.5VNet: rg-eshars-prod/default
Public IP23.99.180.223DNS: 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:

  1. Warning 1000 (.NET Runtime) — Kestrel heartbeat delayed >1s (thread pool starvation)
  2. Error 1000 (.NET Runtime) — gRPC GetSqlLogDiskStorageData fails with HTTP/2 connection fault
  3. 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

  1. Windows Server 2012 R2 EOL — No security patches since October 2023. This is a compliance risk (HIPAA, Defender findings).
  2. SQL Server 2016 EOL — Extended support ends July 2026. No further security updates after that date.
  3. Undersized VM — 2 vCPUs / 8 GB RAM cannot adequately run SQL Server + SSRS + OS + IaaS Agent concurrently.
  4. Single data disk — Data files, log files, and tempdb likely share a single volume, causing I/O contention.
  5. No disk encryption — Data at rest is not encrypted.
  6. No health monitoring — No proactive alerting for VM health issues.
  7. Public IP exposed — VM has a public IP; verify NSG rules and access restrictions.

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:

PropertyTarget Value
VM SizeStandard E8bds v5 (8 vCPUs, 64 GB RAM)
OSWindows Server 2022 Datacenter
SQL ServerSQL Server 2022 Standard (or evaluate PBIRS)
VM GenerationV2 (UEFI, Trusted Launch)
Disk LayoutSeparate Premium SSD v2 for data, log, tempdb
Disk EncryptionAzure Disk Encryption enabled
Health MonitoringEnabled with Azure Monitor

Memory allocation for E8bds_v5 (64 GB):

ComponentAllocation
SQL Server max server memory38,400 MB (~60%)
SSRS WorkingSetMaximum16,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