Skip to main content

Choosing the right “SQL flavour” on Azure

 When you're moving SQL to Azure, you'll face a lot of choices. Azure has several different ways you can run SQL, with each own tradeoffs around control, compatibility, cost, and how much day-to-day work is involved. If you focus only on moving quickly, you might end up with higher costs down the road, run into missing features, or give yourself more maintenance headaches than expected.

Before you start comparing the different products, step back and think about what you really need to accomplish. As you weigh your options, keep these three big requirements in mind:
1. Scalability and cost shape
Decide early on if you'll need to scale up (make a server bigger) or scale out (spread across more servers). Scaling up is usually easier, while scaling out gives you more flexibility, but might mean changing your application and being more disciplined operationally. Think about your workload: if it's pretty steady, provisioned compute is a good fit; if it varies a lot, you'll want something more flexible. Picking the wrong cost model can lead to surprise expenses, even long after your migration is done.
2. Availability and recovery targets
When it comes to availability, you need to think about both uptime and how quickly you can recover if something goes wrong. Make sure your choice matches your recovery point and recovery time goals, your need for failover, and whether you need read replicas. Some setups are all about high performance and resilience with lots of replicas; others are designed for big scale and fast backup or restore. If your business can't handle long recovery times, make that a top-level requirement from the start.
3. Security, compliance, and data protection
Security, compliance, and data protection are critical—don't leave them as an afterthought. Think about how you’ll encrypt data at rest, when it’s moving, and even when it’s in use. Make sure you have secure connections (TLS), know how your data is encrypted on disk, and who manages the keys—sometimes you’ll need to manage them yourself. Combine these with things like identity controls, network isolation, audit records, and monitoring. The earlier you plan for security, the less pain (and cost) you'll have later.

Once you've got these three areas covered, you can pick the SQL option that actually fits your situation—instead of just following what looks easiest.
Azure SQL Database: cloud-first, database-scoped PaaS
Azure SQL Database is a fully managed service, so you don’t have to worry about the underlying operating system or the SQL Server instance itself. It’s a great fit for modern apps that can treat the database as just a single unit and take advantage of built-in elasticity. This option really shines if your team wants to spend less time patching and maintaining and more time building features. If you have lots of similar databases (like one per customer or region), elastic pools let you share resources easily and keep costs under control.
Azure SQL Managed Instance: lift-and-shift with instance features
Managed Instance is also a platform service, but it gives you a whole SQL Server instance boundary to work with—so it’s meant for migrations where you don’t want to redesign too much. It’s especially handy if you rely on features like SQL Server Agent, CLR, Database Mail, distributed transactions, or other things that don’t fit easily into the single-database model. You can run multiple databases on the same instance, which can make migrations and operations simpler.
SQL Server on Azure Virtual Machines: maximum control and... responsibility
If you need maximum control, SQL Server on Azure Virtual Machines gives you full access to both the OS and SQL Server—so you can do whatever you want with versions, custom agents, or tricky extensions that are hard to refactor. But keep in mind, you’ll be on the hook for patching, backups, and keeping things available, just like you would if it were running on-premises. This setup is usually for legacy workloads, complicated vendor software, or really customized environments.
Sanity check
And just to sanity check: sometimes a traditional relational database isn’t the right fit. If you need global distribution, super low latency between regions, flexible schemas, or massive horizontal scaling, you might actually be better off with a NoSQL service instead.

Comments

Popular posts from this blog

Why Database Modernization Matters for AI

  When companies transition to the cloud, they typically begin with applications and virtual machines, which is often the easier part of the process. The actual complexity arises later when databases are moved. To save time and effort, cloud adoption is more of a cloud migration in an IaaS manner, fulfilling current, but not future needs. Even organisations that are already in the cloud find that their databases, although “migrated,” are not genuinely modernised. This disparity becomes particularly evident when they begin to explore AI technologies. Understanding Modernisation Beyond Migration Database modernisation is distinct from merely relocating an outdated database to Azure. It's about making your data layer ready for future needs, like automation, real-time analytics, and AI capabilities. AI needs high throughput, which can be achieved using native DB cloud capabilities. When your database runs in a traditional setup (even hosted in the cloud), in that case, you will enc...

How to audit an Azure Cosmos DB

In this post, we will talk about how we can audit an Azure Cosmos DB database. Before jumping into the problem let us define the business requirement: As an Administrator I want to be able to audit all changes that were done to specific collection inside my Azure Cosmos DB. The requirement is simple, but can be a little tricky to implement fully. First of all when you are using Azure Cosmos DB or any other storage solution there are 99% odds that you’ll have more than one system that writes data to it. This means that you have or not have control on the systems that are doing any create/update/delete operations. Solution 1: Diagnostic Logs Cosmos DB allows us activate diagnostics logs and stream the output a storage account for achieving to other systems like Event Hub or Log Analytics. This would allow us to have information related to who, when, what, response code and how the access operation to our Cosmos DB was done. Beside this there is a field that specifies what was th...

[Post Event] Azure AI Connect, March 2025

On March 13th, I had the opportunity to speak at Azure AI Connect about modern AI architectures.  My session focused on the importance of modernizing cloud systems to efficiently handle the increasing payload generated by AI.