10 Azure Cost Optimisation Tips for SMBs

Azure spend tends to grow faster than usage. Resources are provisioned for peaks and left running at valleys. Oversized VMs carry features that nobody asked for. Data accumulates in the wrong storage tier. Idle test environments run through the weekend. None of this is deliberate, and all of it is controllable.

These ten techniques are the highest-return activities for organisations wanting to reduce Azure spend without reducing what the platform does for them.

1. Right-size virtual machines

The most common source of VM overspend is provisioning at a safe overestimate and never revisiting it. A VM provisioned at Standard_D8s_v5 for a workload that runs at 15% CPU utilisation is paying for seven eighths of its compute capacity to sit idle.

Azure Advisor's Cost recommendations identify VMs with low average CPU utilisation and suggest appropriate downsizing targets. Enable it in the portal under Advisor > Cost. Each recommendation shows the estimated monthly saving and the suggested VM size.

Before downsizing, validate the recommendation against peak utilisation, not average. A VM that averages 15% CPU but spikes to 90% during a nightly batch job is correctly sized if that batch job is business-critical. Use a 14-day or 30-day CPU percentile view (p95 or p99) rather than average to make the sizing decision.

2. Use Reserved Instances for predictable workloads

On-demand VM pricing is the highest tier. If a VM runs continuously for 12 months, a 1-year Reserved Instance typically saves 30-40% compared to on-demand pricing. A 3-year reservation saves 60-70%.

Reserved Instances are a billing commitment, not a resource reservation. If the VM is decommissioned, the reservation cost continues. Match reservations to workloads with predictable long-term requirements: production databases, always-on application servers, persistent infrastructure.

Do not apply reservations to variable workloads, development environments, or anything with an uncertain lifecycle. For those, on-demand or spot pricing is more appropriate.

3. Shut down development and test environments out of hours

A development VM running 24/7 costs the same as a production VM. If developers work 8 hours a day, 5 days a week, the VM is idle for roughly 75% of the hours it is billed for. Auto-shutting it down during non-working hours reduces compute cost by up to 75% for that resource.

Azure Automation runbooks, scheduled triggers, or the built-in auto-shutdown feature on individual VMs can handle this. For AKS development clusters, scaling the node pool to zero outside hours achieves the same result for the node compute (though the control plane has a fixed cost).

Apply this to: development VMs, test databases, staging clusters, QA environments, CI/CD agent pools not in continuous use.

4. Use the correct storage tier

Azure Blob Storage tiers: Hot (frequent access, highest cost), Cool (infrequent access, lower storage cost, higher access cost), Cold (rarely accessed), and Archive (near-zero storage cost, high rehydration cost and time).

The default tier for most storage accounts is Hot. Data that is written once and accessed infrequently (log archives, old backup data, compliance records) sits in Hot storage paying a premium for access speed it never benefits from.

Enable Lifecycle Management policies to move data automatically between tiers based on last-accessed date. A policy that moves data to Cool after 30 days without access and Archive after 180 days saves 40-70% on storage costs for archival data without any manual intervention.

5. Delete idle resources

Unused resources continue to generate costs. Common culprits: stopped VMs (which still pay for attached managed disks), orphaned managed disks (detached from deleted VMs), unused public IP addresses, idle App Service plans, empty App Services, and old snapshots.

Azure Advisor identifies many of these. Supplement Advisor with a Cost Management query filtered to resources with zero utilisation metrics for the past 30 days. Build a monthly hygiene task into your operations calendar to review and clean up orphaned resources.

6. Use Azure Hybrid Benefit for Windows and SQL licences

If your organisation has existing Windows Server or SQL Server licences with Software Assurance, Azure Hybrid Benefit applies those licences to Azure VMs, reducing the OS and SQL component of the VM cost. Windows Server Hybrid Benefit saves approximately 40% on Windows VM costs. SQL Server Hybrid Benefit saves 50% or more on SQL Server VMs.

Enable it on existing VMs via the portal (VM > Configuration > Azure Hybrid Benefit) or apply it at provisioning. If you are moving Windows or SQL workloads to Azure and have existing on-premise licences, applying Hybrid Benefit should be the first cost decision.

7. Consolidate small databases onto Elastic Pools

Multiple Azure SQL databases with separate DTU or vCore allocations each pay for their allocated capacity independently. An Elastic Pool shares compute capacity across multiple databases: databases that are busy at different times share a single pool, and the pool is sized for peak across the group rather than peak for each individual database.

For 10 databases that each need at most 50 DTUs but rarely peak simultaneously, an Elastic Pool sized at 200-300 DTUs is cheaper than 10 separate databases at 50 DTUs each (500 DTUs total).

Evaluate Elastic Pool suitability using Azure Advisor or by reviewing the DTU utilisation patterns of your databases. Databases with variable and non-correlated workloads are the best candidates.

8. Optimise Log Analytics retention

Log Analytics charges for data ingested and for data retained beyond the free retention window (31 days for most tables at the workspace level, 90 days with the interactive retention setting). Data retained longer than the interactive window and needed for compliance archival can be moved to Basic tier or archive tier at a significantly lower cost.

Audit your Log Analytics workspace for high-volume data sources. Application performance traces, custom event data, and diagnostic logs from verbose resources can dominate ingestion costs. For each high-volume source, evaluate whether the data is actively queried or is being retained for compliance. Use Commitment Tier pricing if your daily ingestion consistently exceeds 100 GB.

9. Use Spot VMs for interruptible workloads

Azure Spot VMs offer up to 90% discount on on-demand pricing by using spare Azure capacity. Spot VMs can be evicted with 30 seconds notice when Azure needs the capacity back. For workloads that can tolerate interruption, this discount is significant.

Use cases: CI/CD build agents (jobs retry on eviction), batch processing, ML training jobs, non-critical background processing. Combine Spot with node pools in AKS or use Azure Batch for workloads designed around task retry.

10. Set budgets and monitor spend weekly

Cost optimisation is not a one-time exercise. Workloads change, teams provision new resources, data volumes grow. The organisations that control Azure spend long-term are the ones that monitor it weekly rather than discovering surprises on the monthly invoice.

Set budgets in Azure Cost Management at the subscription and resource group level. Configure alerts at 50%, 75%, and 100% of budget. Review the Cost Management dashboard weekly, not monthly. Look for resources that did not exist last week. Look for resources that cost significantly more this week than last. Both are worth investigating.

Where Critical Cloud comes in

Cost optimisation is easiest when it is built into how the platform is operated rather than treated as a periodic cleanup task. We manage Azure for technology-led businesses with cost visibility and optimisation as a standing operational function: right-sizing recommendations, hygiene processes, Reserved Instance planning, and spend monitoring all included. As the world's first Powered by Datadog accredited partner, we surface cost signals alongside reliability and performance signals in a single operational view. See how Critical Support works.