Microsoft’s pricing for SQL Server in the cloud, SQL Azure, has been announced. It’s free for now, but around November it’ll be:
- $9.99 per month for 0-1GB
- $99.99 per month up to 10GB
There’s currently a 10GB maximum size cap for SQL Azure. For larger data storage needs, you’ll need to break the database into smaller sizes.
Scaling SQL Azure Applications
If you think you’re going to need 100GB in the near term, it probably makes sense to break your application up into multiple separate databases from the get-go (10 x $9.99 = $99.99 anyway) and just make really sure none of the individual databases exceed 10GB. Ugh. I’m surprised by this strategy because Microsoft’s never been pro-sharding before, and now they’re asking database developers to make that jump. One of the things I love about SQL Server is that it scales so well: we can start with just a single database and grow it like crazy. DBAs who like that approach will not like Azure’s 10GB-per-database limits.
I’ve worked with companies who spin up a new database for every new client, copying the same database hundreds or thousands of times, and that has some serious maintenance challenges. Those companies will love SQL Azure’s scaling model, though; if each client has their own SQL Azure database, then it’s easy to pass the database hosting costs on to your clients.
Beep Beep, Back That Database Up
The bandwidth costs for SQL Azure are $.15 per GB of outbound bandwidth. Assuming that you don’t compress the data before you pull it out of the cloud, that means daily backups of a 1GB database will add another $4.50 per month, and a 10GB database will add another $45/month. Daily backups will cost about half of what your monthly service charges cost.
It’s not completely clear from the press release, but if Microsoft follows Amazon’s pricing model, bandwidth between the Microsoft cloud services will not incur a cost. That would mean it might make sense to spin up an Windows Azure computing application for $.12 per hour, use that application to compress your SQL Azure database, and then send the compressed data off to Azure storage for backup. That would eliminate the data in/out costs, and minimize the Azure storage costs ($.15/GB). Database administrators would back up their SQL Azure data to Azure Storage, keep a history of backups there, and restore them to SQL Azure faster when needed.
Of course, there’s no native backup support in SQL Azure, and it’s not clear whether Windows Azure will include tools like SQL Server Integration Services.
SQL Azure Service Level Agreements (SLAs)
The cloud isn’t 100% reliable, as the CloudComputing Incidents Database attests. The press release gives SLAs for Azure computing and storage, but not SQL Azure. The computing SLA says:
“For compute, we guarantee that when you deploy two or more role instances in different fault and upgrade domains your Internet facing roles will have external connectivity at least 99.95% of the time. Additionally, we will monitor all of your individual role instances and detect within two minutes when a role instance’s process is not running and initiate corrective action.”
They’re essentially pushing the SLA back onto you: you need to make sure to spin up two web servers in two different datacenters, and only then they’ll guarantee 99.95% availability. That’s 4.38 hours of downtime per year, 21.56 minutes of downtime per month. Note that they didn’t distinguish between planned and unplanned downtime.
The storage SLA says:
“For storage, we guarantee that at least 99.9% of the time we will successfully process correctly formatted requests that we receive to add, update, read and delete data. We also guarantee that your storage accounts will have connectivity to our Internet gateway.”
Note that bold part, “that we receive” – that’s because the second part of the SLA guarantees that your storage accounts will have connectivity. Nice. The three-nines rate means 8.76 hours of downtime per year, 43.2 minutes per month.
If you’re a DBA scoffing at these costs and availabilities, make sure you have your own numbers ready before your boss asks. Sooner or later, your boss is going to compare costs and SLAs in the cloud with your own internal costs and SLAs. You need answers.
My Internal Costs vs SQL Azure
A quick back-of-the-envelope calculation using a 2-cpu server with 8gb ram, SATA drives, Windows 2008 and 2 CPUs of SQL Server Standard at list price puts me around $15,000. (Yes, enterprises get dramatically discounted stuff, but enterprises don’t need SQL Azure at rack price either.)
Let’s say I use this server for three years – that’s $416 per month. That does not include:
- Connectivity costs (but neither does the Azure $9-$99 price, either. Remember that bandwidth costs extra for Azure.)
- Management (but neither does Azure, since you still have to roll some of your own utilities. Remember that Azure doesn’t support things like Profiler.)
- Backups (but neither does Azure, and no, Microsoft telling me “it’s backed up” doesn’t count.)
- Clustering or geographic high availability. I probably wouldn’t achieve three nines of uptime with this configuration, but if I wanted to go for that, I’d add a second server in another location with SQL Server’s database mirroring.
The tough part of all this is the future:
- Will SQL Azure’s costs go down? Hardware prices always go down, so it’s interesting to try to compare long-term pricing between the two.
- Will SQL Azure add more features? I can back up a locally hosted database easily, but backing up Azure is going to be a little tricky for now. If I want to add filestream data or TDE, that’s a piece of cake with local databases, but not with Azure.
- Will SQL Azure stick? If I had a dollar for every piece of technology built then Microsoft abandoned, I’d be Steve Jobs. The nice thing about developing for SQL Azure is that it’s a subset of SQL Server anyway. Worst case scenario, Microsoft abandons SQL Azure – you just light up your own SQL Server and deploy your app there anyway.
Learning More About SQL Azure
For more information about the charges that will be appearing on your credit card next year: