SQL Server 2012 AlwaysOn – Performance Best Practices

availability-groupssql serversql-server-2012

Is it best practice to have 2 Primary then 1 Secondary for SQL Server AlwaysOn Availability Groups?

My purpose for having 2 Primary instances is to balance the database load. (e.g. my db1 and db2 is on 1st Primary Server then my db3 and db4 is on 2nd Primary Server, then i will configure my AG to add db1 and db2 to 2nd Primary as passive and db3 and db4 to my 1st Primary Server as passive).

Will this improve the performance of my SQL Server?

Best Answer

AlwaysON in a roundabout way can help with overall performance but it does that by helping you scale out the reads to other nodes which then also help you with blocking/locking.

From how you described it you are spreading out your databases across 2 different instances, but then making replica's of each instance on the other database server. Outside of locking/blocking benefits you won't get too much out of this, so no, I wouldn't consider this a 'best practice' for performance. Your active production databases are still sharing server resources with the read only copies. Thus, this isn't a 'best practice' for performance and AGs. Also AG's represent a issue where you have to decide if you're willing to get data that's a little bit stale and near real time, or if you want to force performance loss on the master writer and keep the data on the secondary up to date.

If you're interested, here is how StackExchange uses AGs to give you a bit more idea of how enterprises use it.