The release of SQL 2012 brought about SQL Server AlwaysOn Availability Groups (AGs) as a new way to manage HA for databases.
With AGs came a whole lot of new DMVs to give you information. They also provided a nice dashboard which gives a view into the status of a particular AG
This can be quite useful, however it is missing a great deal of information, that as a DBA, I would find useful, like read routing and listener configurations. On top of that the dashboard only provides information on one of the AGs at a time. If you have more than one AG then you have to open up an entirely new dashboard.
This just wasn’t working out for me, and so I wrote a stored procedure (sp_GetAGInformation) to provide me with the configuration information for all the AGs running on a server.
When executed it provides:
- Availability Group Name
- Listener Name (if exists)
- Primary Replica Name
- Automatic Failover Partner (if exists)
- Sync Secondary Replicas (if any)
- Async Secondary Replicas (if any)
- Read Routing Replicas (if any, in routing order)
- List of Databases in Availability Group
Results of executing sp_GetAGInformation
As you can quickly see in the above example the AGAdvWrks AG has a listener, an auto-failover partner and two servers in the read routing order. It also contains two databases. AGTestAG doesn’t have any sync secondaries, or a listener, and only contains a single database.
If you have several AGs running in your environment this can be a real time saver. What’s also great is to pull this data centrally and report against it.
For example, right now I have a PowerShell process that queries every server, pulls the data back to a central location and reports on any changes in the configuration (if a servers gets pulled out for some reason, or a database added or removed from an AG). This can be an a real timesaver, in particular when you need to connect to a primary, but aren’t sure which server it is (given that neither SQLPS nor SSMS support multisubnet failover connection settings).
One of the limitations is that the data can only be obtained from the primary in an AG as certain sets of the data only reside there, and the read routing configuration can be (and should be) set differently on each server.
Give sp_GetAGInformation as try and let me know what you think. Any ideas for improvements are warmly welcomed.