Skip to content
Cloud Efficiency Hub

Azure Virtual Desktop Host Pools Without an Autoscale Scaling Plan

The short version

Azure Virtual Desktop session hosts are ordinary Azure virtual machines, billed for compute every hour they are running whether or not anyone is signed in.

PointFive Research

Cloud cost research at PointFive

Category
Compute
Reference
CER-0409
Type
Inefficient Configuration

Explanation

Why the waste happens and who it affects.

Desktop demand follows the working day, so host pools whose session hosts run around the clock pay for nights, weekends and holidays with few or no sessions. In personal host pools the pattern repeats per user: a desktop that stays running after its user disconnects or signs out keeps billing until someone shuts it down.

AVD provides autoscale scaling plans for exactly this purpose: Microsoft describes them as a way to scale session host VMs in a host pool up or down according to schedule to optimize deployment costs. Scaling plans are a separate resource that must be created and assigned to each host pool, with the Desktop Virtualization Power On Off Contributor role granted first, so host pools deployed without one simply stay at their full size. Start VM on Connect, which powers hosts on only when a user needs them, is likewise configured per host pool and is off unless enabled.

Billing model

The pricing dimensions that drive this cost.

AVD costs come from the Azure infrastructure behind each host pool.

Session host compute
Session hosts are billed as Azure VMs for every hour they are running or stopped but still allocated
Deallocated session hosts
Compute is not billed while a host is deallocated or hibernated, but its disks and networking continue to incur charges
User access rights
Separate per-user licensing or per-user access pricing that does not change with how long hosts run

How to detect

5 checks to find it in your estate.

  • List host pools and compare them with the host pool assignments of existing scaling plans to find pools with no scaling plan assigned
  • Compare session host running hours with actual use: query the WVDConnections table in Log Analytics by SessionHostName and hour, and look for hosts running through periods with no connections
  • For personal host pools, find desktops that remain running long after their user's last connection, which indicates no disconnect or sign-out action is configured
  • Check the host pool Start VM on Connect property; without it, a user connection cannot power on a deallocated host, which pushes teams to leave hosts running
  • Note host pools already scaled by Azure Automation or Logic Apps scripts, since autoscale and those scripts cannot be used on the same host pool

How to fix

5 ways to remove the waste.

  • Assign the Desktop Virtualization Power On Off Contributor role to the Azure Virtual Desktop service principal or a host pool managed identity, then create a scaling plan and assign it to each host pool
  • For pooled host pools, define ramp-up, peak, ramp-down and off-peak phases with a minimum percentage of hosts and a capacity threshold that match observed session counts; autoscale only shuts hosts down when remaining sessions fit within the threshold
  • For personal host pools, configure disconnect and sign-out actions to deallocate or hibernate desktops after a set number of minutes; do not use hibernate with FSLogix or App Attach, which do not support it
  • Enable Start VM on Connect, which Microsoft highly recommends if the scaling plan does not start hosts during ramp-up; users wait for the VM to boot on first connection
  • Use the exclusion tag for hosts in maintenance or drain mode, and remove any Automation or Logic Apps scaling scripts before assigning a scaling plan

Documentation

Vendor references for pricing and configuration.