I keep getting questions on what is improved other than the increased number of secondaries(8 now) with AlwaysOn Availability Group(AG) in SQL 2014. In this blog post I would like to talk about one major enhancement around the increased readable secondaries availability in SQL Server 2014.
In SQL Server 2012 there is a good chance that your read workloads can be killed during network failures. Typically this happens in a multi subnet environment where you have AG nodes in 2 or more data centers.If network failure results a communication failure between primary and secondary replicas, then the secondaries will go into resolving state.In resolving state, the read workloads are basically killed. (Yes, yet another reason why you need to test your AG deployments)
With SQL Server 2014, there is good news. Read workloads are not impacted during network failures, primary replica down or cluster quorum issues.
Yes, it stays up all the time, and will be serving your read workloads. The replica will be in resolving state, however the databases are still available for your read connections/workloads.
Keep in mind : Read-only routing is not yet supported for this, and you cannot use listener for your reporting workloads.Brent Ozar calls out this in his blog post here.
Lets now walk though this enhancement :
I will be using a 2 node AG setup and the data transfer mode(Availability Mode) is asynchronous.
If I query the DMV sys.dm_hadr_availability_replica_states I can see the replica states.
SELECT role_desc,connected_state_desc FROM sys.dm_hadr_availability_replica_states
role_desc connected_state_desc
PRIMARY CONNECTED
SECONDARY CONNECTED
Lets double-check if the data transfer is set as asynchronous
SELECT is_primary_replica, synchronization_state_desc FROM sys.dm_hadr_database_replica_states
is_primary_replica synchronization_state_desc
0 SYNCHRONIZING
1 SYNCHRONIZED
Everything looks good, and now lets take down the primary replica.
Note : Dont try this at home ! (I mean production)
Okay, As this is a test instance I really don’t care and what I did was shutdown the SQL Services to take the primary down.
If we query the DMV again, we can see
SELECT role_desc,connected_state_desc FROM sys.dm_hadr_availability_replica_states
role_desc connected_state_desc
RESOLVING DISCONNECTED
And note, there is no entry for primary as we I have taken it down.
Even though the secondary replica is in resolving state, read connections just works.
USE DemoAG GO SELECT COUNT (*) AS [TotalRowCount] FROM [dbo].[InsertCount]
TotalRowCount
6886
The secondary database is in NOT SYNCHRONIZING, NOT_HEALTHY state, however its ONLINE.
SELECT synchronization_state_desc,synchronization_health_desc,database_state_desc FROM sys.dm_hadr_database_replica_states
synchronization_state_desc synchronization_health_desc database_state_desc
NOT SYNCHRONIZING NOT_HEALTHY ONLINE
Here is a view from Management Studio :
Conclusion:
Yes, this is a very good enhancement which will make sure your readable secondaries are highly available and I’m pretty sure that this is one of those enhancement which will force you to deploy AGs in SQL 2014 rather than opting SQL 2012.
Thanks for reading and keep watching this space for more !