Warning: Constant WP_TEMP_DIR already defined in /var/www/html/blogs/joe/wp-config.php on line 93

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/blogs/joe/wp-config.php:93) in /var/www/html/blogs/joe/wp-includes/rest-api/class-wp-rest-server.php on line 1902
{"id":499,"date":"2012-04-19T00:19:00","date_gmt":"2012-04-19T00:19:00","guid":{"rendered":"\/blogs\/joe\/post\/Answering-Questions-with-the-AlwaysOn-Dashboard.aspx"},"modified":"2013-01-20T09:52:34","modified_gmt":"2013-01-20T17:52:34","slug":"answering-questions-with-the-alwayson-dashboard","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/joe\/answering-questions-with-the-alwayson-dashboard\/","title":{"rendered":"Answering Questions with the AlwaysOn Dashboard"},"content":{"rendered":"

The word \u201cdashboard\u201d immediately puts me into a state of suspicion. This is probably because I\u2019ve been a part of the corporate world for 18 years now and, fair or not, the word \u201cdashboard\u201d gives me flashbacks of executive conversations where I\u2019m asked to summarize complicated information into a single square \u2013 while somehow defying the laws of physics and providing all the necessary detail being asked for.<\/p>\n

So when I heard of the \u201cAlwaysOn Dashboard<\/em>\u201d \u2013 I was pretty sure I wouldn\u2019t like it and that I would stick primarily with other methods.<\/p>\n

\n

\"SNAGHTML1d45817\"<\/a><\/p>\n

Well \u2013 I was wrong.<\/p>\n

While any tool could use further improvement, the AlwaysOn Dashboard is definitely something I\u2019ll be using in the future. Hence the purpose of this post was just to show the various questions the dashboard can answer.<\/p>\n

Where am I?<\/strong><\/p>\n

I start with this question because depending on which replica you\u2019re launching the dashboard from, you\u2019ll see a different view of the world. For example, the following is the first section of the dashboard when launched from the primary replica of an availability group called EMU-AG1:<\/p>\n

\"SNAGHTML1d4043d\"<\/a><\/p>\n

As you can see, from the primary I\u2019m getting three sections and a view of my replicas, availability databases and more (which I\u2019ll get in to later in this post).<\/p>\n

Contrast this to launching the dashboard from a secondary replica:<\/p>\n

\"SNAGHTML1d3bc65\"<\/a><\/p>\n

You can see that I\u2019m getting information from the perspective of just <\/em>that replica. You may have no other choice in a disaster recovery scenario \u2013 and in that case, you will see even less. But the key is not to be surprised to see this subset of information if you\u2019re launching the dashboard from a secondary instead of the primary. If you want to ensure you\u2019re connecting to the primary, you could connect with SSMS to the Availability Group listener name instead, again assuming you\u2019re not in an outage scenario.<\/p>\n

What can I find out by default?<\/strong><\/p>\n

 <\/p>\n

You saw by the earlier screen shots that we can find out quite a bit by default:<\/p>\n

\u00b7 Where is the primary replica? (called \u201cprimary instance\u201d on the dashboard)<\/p>\n

\u00b7 What are the roles of each replica? (primary or secondary)<\/p>\n

\u00b7 What are the failover modes? (automatic or manual)<\/p>\n

\u00b7 What are the synchronization states? (for example \u2013 \u201cnot synchronizing\u201d, \u201csynchronizing\u201d, \u201csynchronized\u201d)<\/p>\n

\u00b7 What are the availability databases?<\/p>\n

\u00b7 What are their individual availability database states?<\/p>\n

\u00b7 What are the database failover readiness states? (data loss possible, no data loss)<\/p>\n

\u00b7 Any issues at the replica scope?<\/p>\n

\u00b7 Any issues at the availability database scope?<\/p>\n

Regarding the \u201cissues\u201d \u2013 let\u2019s say one of my Windows Server Failover Cluster (WSFC) nodes is paused, and thus, one of my replicas is now offline. The issues column in the availability replicas shows the following:<\/p>\n

\"SNAGHTML1d29a73\"<\/a><\/p>\n

Clicking on the link-text, I see additional information in the Policy Evaluation Result on Availability Replica dialog box:<\/p>\n

\"SNAGHTML1d235b9\"<\/a><\/p>\n

So the theme is becoming clear that the dashboard is pointing out the summarized things I should be concerned with and then allowing me to click through to add additional information \u2013 instead of overwhelming me with information by default.<\/p>\n

What else?<\/strong><\/p>\n

Right-click on the availability replica section and you\u2019ll see other very useful data points:<\/p>\n

\"SNAGHTML1d2ff4e\"<\/a><\/p>\n

We start seeing information that merges the availability group and Windows Server Failover Cluster (WSFC) worlds \u2013 such as Quorum Votes and Member State (for example \u2013 if I pause a WSFC node, I\u2019ll see Member State = Offline).<\/p>\n

 <\/p>\n

We have the same ability to add columns for the availability databases section. Right clicking the column headers reveals quite a few useful statistics (and again \u2013 I\u2019m impressed that the UI designers exerted editorial control and didn\u2019t try to stuff all columns into the report by default):<\/p>\n

\"SNAGHTML1d16df7\"<\/a><\/p>\n

Some excellent data points here \u2013 including Estimated Recovery Time, Estimated Data Loss, Synchronization Performance, Log Send Queue Size and Redo Queue Size. And while this isn\u2019t replacing Perfmon for trending analysis \u2013 if you\u2019re in the middle of a \u201cthings are slow now<\/em>\u201d scenario, this additional information is incredibly useful.<\/p>\n

Where else can I go?<\/strong><\/p>\n

In the upper-right hand corner of the dashboard (I\u2019m using the 11.0.2316 version of the SQL Server 2012, by the way), I can navigate into three different useful areas\u2026<\/p>\n

\"SNAGHTML1d134de\"<\/a><\/p>\n

The \u201cStart Failover Wizard\u201d is as you might suspect. This wizard allows me to fail over to a secondary replica, making it the new primary replica.<\/p>\n

The View AlwaysOn Health Events option allows you to explore Extended Events captured via the \u201cAlwaysOn_health\u201d session (which Jonathan has already talked about in more detail). What I love about this viewer (pictured below) is that unlike the dashboard which gives us a moment in time, with the viewer I can see what has happened recently that is noteworthy. And just like the dashboard, I can add the columns I\u2019m interested in by right-clicking the column headers and then choosing what I need and also clicking specific rows to reveal details:<\/p>\n

\"SNAGHTML1d0f5ad\"<\/a><\/p>\n

Back to the main dashboard, if I click the \u201cView Cluster Quorum Information\u201d link, I\u2019ll see data from a WSFC quorum perspective (nodes, member type, member state, and vote assignment):<\/p>\n

\"SNAGHTML1d0c3a5\"<\/a><\/p>\n

What about the T-SQL?<\/strong><\/p>\n

The information captured on the dashboard also provides us (if you snoop via Extended Events or SQL Trace) with guidance on the new catalog views and DMVs. Below I\u2019ve capturing the commands behind the scenes \u2013 removing most of the extraneous T-SQL to show the core areas where some of this data is pulled for the dashboard. I didn\u2019t clean up the original formatting from what I captured \u2013 so please forgive everything being in lower-case. Also \u2013 in many cases more information is pulled than displayed \u2013 and many fields are converted to a more readable format for use on the dashboard. I still find it useful to understand the origins of the data:<\/p>\n

\"SNAGHTML1d08ada\"<\/a><\/p>\n

select<\/span><\/span><\/span> *<\/span><\/span> <\/span><\/span><\/span><\/p>\n

from<\/span><\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span><\/span>availability_groups;<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0 <\/span><\/span><\/span><\/span><\/p>\n

select<\/span><\/span><\/span> agstates<\/span><\/span>.<\/span><\/span>group_id<\/span><\/span>,<\/span><\/span> agstates<\/span><\/span>.<\/span><\/span>primary_replica<\/span><\/span> <\/span><\/span><\/span><\/p>\n

from<\/span><\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span>dm_hadr_availability_group_states<\/span><\/span> as<\/span><\/span> <\/span>agstates;<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0 <\/span><\/span><\/span><\/span><\/p>\n

select<\/span><\/span><\/span> group_id<\/span><\/span>,<\/span><\/span> replica_id<\/span><\/span>,<\/span><\/span> replica_metadata_id<\/span><\/span> <\/span><\/span><\/span><\/p>\n

from<\/span><\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span><\/span>availability_replicas;<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><\/span><\/span><\/p>\n

select<\/span><\/span><\/span> replica_id<\/span><\/span>,<\/span><\/span> is_local<\/span><\/span>,<\/span><\/span> role<\/span><\/span> <\/span><\/span><\/span><\/p>\n

from<\/span><\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span><\/span>dm_hadr_availability_replica_states;<\/span><\/span><\/span><\/span><\/p>\n

\n

\"SNAGHTML1d017fc\"<\/a><\/p>\n

select<\/span><\/span><\/span> *<\/span><\/span> <\/span><\/span><\/span><\/p>\n

from<\/span><\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span><\/span>availability_groups;<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0 <\/span><\/span><\/span><\/span><\/p>\n

select<\/span><\/span><\/span> group_id<\/span><\/span>,<\/span><\/span> replica_id<\/span><\/span>,<\/span><\/span> replica_server_name<\/span><\/span>,<\/span><\/span>create_date<\/span><\/span><\/span>,<\/span><\/span><\/span><\/span><\/p>\n

\u00a0<\/span><\/span>modify_date<\/span><\/span>,<\/span><\/span> endpoint_url<\/span><\/span>,<\/span><\/span> read_only_routing_url<\/span><\/span>,<\/span><\/span> <\/span><\/span><\/span><\/p>\n

\u00a0<\/span><\/span>primary_role_allow_connections<\/span><\/span>,<\/span><\/span> secondary_role_allow_connections<\/span><\/span>,<\/span><\/span> <\/span><\/span><\/span><\/p>\n

\u00a0<\/span><\/span>availability_mode<\/span><\/span>,<\/span><\/span>failover_mode<\/span><\/span>,<\/span><\/span> session_timeout<\/span><\/span>,<\/span><\/span> backup_priority<\/span><\/span>,<\/span><\/span> <\/span><\/span><\/span><\/p>\n

\u00a0<\/span><\/span>owner_sid<\/span><\/span><\/span>\u00a0 <\/span><\/span><\/span><\/span><\/p>\n

\u00a0<\/span><\/span>from<\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span><\/span>availability_replicas;<\/span><\/span><\/span><\/span><\/p>\n

\n

\u00a0<\/span><\/span>select<\/span><\/span> group_id<\/span><\/span>,<\/span><\/span> replica_id<\/span><\/span>,<\/span><\/span> role<\/span><\/span>,<\/span><\/span>operational_state<\/span><\/span>,<\/span><\/span>recovery_health<\/span><\/span><\/span>,<\/span><\/span><\/span><\/span><\/p>\n

\u00a0<\/span><\/span>synchronization_health<\/span><\/span>,<\/span><\/span>connected_state<\/span><\/span>,<\/span><\/span> last_connect_error_number<\/span><\/span><\/span>,<\/span><\/span><\/span><\/span><\/p>\n

\u00a0<\/span><\/span>last_connect_error_description<\/span><\/span>,<\/span><\/span> last_connect_error_timestamp<\/span><\/span> <\/span><\/span><\/span><\/p>\n

from<\/span><\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span><\/span>dm_hadr_availability_replica_states;<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0 <\/span><\/span><\/span><\/span><\/p>\n

select<\/span><\/span><\/span> replica_id<\/span><\/span>,<\/span><\/span>join_state<\/span><\/span> <\/span><\/span><\/span><\/p>\n

from<\/span><\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span><\/span>dm_hadr_availability_replica_cluster_states;<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0 <\/span><\/span><\/span><\/span><\/p>\n

SELECT<\/span><\/span><\/span> DISTINCT<\/span><\/span> replica_server_name<\/span><\/span>,<\/span><\/span> node_name<\/span><\/span> <\/span><\/span><\/span><\/p>\n

FROM<\/span><\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span>dm_hadr_availability_replica_cluster_nodes<\/span><\/span> AS<\/span><\/span> arrc<\/span><\/span> <\/span><\/span><\/span><\/p>\n

LEFT<\/span><\/span><\/span> OUTER<\/span><\/span> JOIN<\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span>dm_hadr_cluster_members<\/span><\/span> AS<\/span><\/span> cm<\/span><\/span> ON<\/span><\/span> <\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span>UPPER<\/span><\/span>(<\/span><\/span>arrc<\/span><\/span>.<\/span><\/span>node_name<\/span><\/span>)<\/span><\/span> =<\/span><\/span> UPPER<\/span><\/span>(<\/span><\/span>cm<\/span><\/span>.<\/span><\/span>member_name<\/span><\/span>)<\/span><\/span> ;<\/span><\/span><\/span><\/p>\n

\n

select<\/span><\/span><\/span> *<\/span><\/span> from<\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span><\/span>dm_hadr_availability_group_states;<\/span><\/span><\/span><\/span><\/p>\n

\n

\"SNAGHTML1cfe114\"<\/a><\/p>\n

select<\/span><\/span><\/span> *<\/span><\/span> <\/span><\/span><\/span><\/p>\n

from<\/span><\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span><\/span>availability_groups;<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0 <\/span><\/span><\/span><\/span><\/p>\n

select<\/span><\/span><\/span> group_id<\/span><\/span>,<\/span><\/span> replica_id<\/span><\/span>,<\/span><\/span>replica_server_name<\/span><\/span>,<\/span><\/span>availability_mode<\/span><\/span><\/span>\u00a0 <\/span><\/span><\/span><\/span><\/p>\n

from<\/span><\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span><\/span>availability_replicas;<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0 <\/span><\/span><\/span><\/span><\/p>\n

select<\/span><\/span><\/span> replica_id<\/span><\/span>,<\/span><\/span>group_database_id<\/span><\/span>,<\/span><\/span>database_name<\/span><\/span>,<\/span><\/span>is_database_joined<\/span><\/span>,<\/span><\/span>is_failover_ready<\/span><\/span><\/span>\u00a0 <\/span><\/span><\/span><\/span><\/p>\n

from<\/span><\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span><\/span>dm_hadr_database_replica_cluster_states;<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0 <\/span><\/span><\/span><\/span><\/p>\n

select<\/span><\/span><\/span>*<\/span><\/span><\/span><\/span><\/p>\n

from<\/span><\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span><\/span>dm_hadr_database_replica_states;<\/span><\/span><\/span><\/span><\/p>\n

\n

select<\/span><\/span><\/span> replica_id<\/span><\/span>,<\/span><\/span>role<\/span><\/span>,<\/span><\/span>is_local<\/span><\/span> <\/span><\/span><\/span><\/p>\n

from<\/span><\/span><\/span> master<\/span><\/span>.<\/span><\/span>sys<\/span><\/span>.<\/span><\/span><\/span>dm_hadr_availability_replica_states;<\/span><\/span><\/span><\/span><\/p>\n

\n

\"SNAGHTML1cf9e2b\"<\/a><\/p>\n

declare<\/span><\/span><\/span> @cluster_name<\/span><\/span> nvarchar<\/span><\/span>(<\/span><\/span>128<\/span>)<\/span><\/span><\/span><\/span><\/p>\n

declare<\/span><\/span><\/span> @quorum_type<\/span><\/span> <\/span>tinyint<\/span><\/span><\/span><\/span><\/p>\n

declare<\/span><\/span><\/span> @quorum_state<\/span><\/span> <\/span>tinyint<\/span><\/span><\/span><\/span><\/p>\n

BEGIN<\/span><\/span><\/span>TRY<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0 <\/span><\/span>SELECT<\/span><\/span> @cluster_name<\/span><\/span> =<\/span><\/span> cluster_name<\/span><\/span>,<\/span><\/span> <\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span>@quorum_type<\/span><\/span> =<\/span><\/span> quorum_type<\/span><\/span><\/span>,<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span>@quorum_state<\/span><\/span> =<\/span><\/span> <\/span>quorum_state<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0 <\/span><\/span>FROM<\/span><\/span> sys<\/span><\/span>.<\/span><\/span><\/span>dm_hadr_cluster<\/span><\/span><\/span><\/span><\/p>\n

END<\/span><\/span><\/span>TRY<\/span><\/span><\/span><\/span><\/p>\n

BEGIN<\/span><\/span><\/span>CATCH<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0 <\/span><\/span>IF<\/span><\/span>(<\/span><\/span>ERROR_NUMBER<\/span><\/span>()<\/span><\/span> !=<\/span><\/span> 297<\/span>)<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0 <\/span><\/span>BEGIN<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span>THROW<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0 <\/span><\/span>END<\/span><\/span><\/span><\/span><\/p>\n

END<\/span><\/span><\/span>CATCH<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><\/span><\/span><\/p>\n

\n

SELECT<\/span><\/span><\/span><\/p>\n

ISNULL<\/span><\/span><\/span>(<\/span><\/span>@cluster_name<\/span><\/span>,<\/span><\/span><\/span> ”<\/span><\/span>)<\/span><\/span> AS<\/span><\/span> [ClusterName]<\/span><\/span><\/span>,<\/span><\/span><\/span><\/span><\/p>\n

ISNULL<\/span><\/span><\/span>(<\/span><\/span>@quorum_type<\/span><\/span>,<\/span><\/span><\/span> 4)<\/span><\/span> AS<\/span><\/span> [ClusterQuorumType]<\/span><\/span><\/span>,<\/span><\/span><\/span><\/span><\/p>\n

ISNULL<\/span><\/span><\/span>(<\/span><\/span>@quorum_state<\/span><\/span>,<\/span><\/span><\/span> 3)<\/span><\/span> AS<\/span><\/span> <\/span>[ClusterQuorumState]<\/span><\/span><\/span><\/span><\/p>\n

\n

SELECT<\/span><\/span><\/span><\/p>\n

‘Server[@Name=’<\/span><\/span><\/span> +<\/span><\/span> quotename<\/span><\/span>(<\/span><\/span>CAST<\/span><\/span><\/span>(<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span>serverproperty<\/span><\/span>(<\/span><\/span>N’Servername’<\/span><\/span><\/span>)<\/span><\/span><\/span><\/span><\/p>\n

\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span>AS<\/span><\/span> sysname<\/span><\/span>),<\/span><\/span>””<\/span><\/span>)<\/span><\/span> +<\/span><\/span> ‘]’<\/span><\/span> +<\/span><\/span> ‘\/ClusterMemberState[@Name=’<\/span><\/span> +<\/span><\/span> quotename<\/span><\/span>(<\/span><\/span>cm<\/span><\/span>.<\/span><\/span>member_name<\/span><\/span>,<\/span><\/span>””<\/span><\/span>)<\/span><\/span> +<\/span><\/span> ‘]’<\/span><\/span> AS<\/span><\/span> [Urn]<\/span><\/span><\/span>,<\/span><\/span><\/span><\/span><\/p>\n

cm<\/span><\/span><\/span>.<\/span><\/span>member_name<\/span><\/span><\/span> AS<\/span><\/span> [Name]<\/span><\/span><\/span>,<\/span><\/span><\/span><\/span><\/p>\n

cm<\/span><\/span><\/span>.<\/span><\/span>member_type<\/span><\/span><\/span> AS<\/span><\/span> [MemberType]<\/span><\/span><\/span>,<\/span><\/span><\/span><\/span><\/p>\n

ISNULL<\/span><\/span><\/span>(<\/span><\/span>cm<\/span><\/span>.<\/span><\/span>member_state<\/span><\/span>,<\/span><\/span><\/span> 2)<\/span><\/span> AS<\/span><\/span> [member_state]<\/span><\/span><\/span>,<\/span><\/span><\/span><\/span><\/p>\n

ISNULL<\/span><\/span><\/span>(<\/span><\/span>cm<\/span><\/span>.<\/span><\/span>number_of_quorum_votes<\/span><\/span>,<\/span><\/span><\/span> –<\/span><\/span>1)<\/span><\/span> AS<\/span><\/span> <\/span>[NumberOfQuorumVotes]<\/span><\/span><\/span><\/span><\/p>\n

FROM<\/span><\/span><\/span><\/p>\n

sys<\/span><\/span><\/span>.<\/span><\/span>dm_hadr_cluster_members<\/span><\/span><\/span>cm<\/span><\/span><\/span><\/span><\/p>\n

\n

How often does the dashboard refresh?<\/strong><\/p>\n

First of all, you have an \u201con\u201d and \u201coff\u201d option in the upper right-hand corner:<\/p>\n

\"SNAGHTML1cf50a8\"<\/a><\/p>\n

And in SSMS you can configure the refresh interval in seconds using Tools\/Options\/SQL Server AlwaysOn\/Dashboard:<\/p>\n

\"SNAGHTML1cf06ec\"<\/a><\/p>\n

(Initial) Wish List<\/strong><\/p>\n

So regarding what I would like to see added or improved upon, I think this will evolve over time, but initially I\u2019d like to see the following:<\/p>\n

\u00b7 Ability to \u201csnapshot\u201d the report to an external file (PDF or XML file for example). Granted, I can just take a screen shot, but it would be nice to take a quick snapshot if I\u2019ve stumbled across some unusual or short lived conditions.<\/p>\n

\u00b7 Ability to access the full availability group metadata from the dashboard of secondary replicas. This extends beyond the dashboard and into the data available through the data sources themselves.<\/p>\n

Not a very long list yet \u2013 and again, I\u2019ll certainly be adding the AlwaysOn Dashboard to my \u201cuseful\u201d list of tools. Unlike the executive dashboards I mentioned at the beginning of the post, this one is actually quite useful and strikes that rare balance of providing just<\/em> enough detail while also exerting editorial restraint.<\/p>\n","protected":false},"excerpt":{"rendered":"

The word \u201cdashboard\u201d immediately puts me into a state of suspicion. This is probably because I\u2019ve been a part of the corporate world for 18 years now and, fair or not, the word \u201cdashboard\u201d gives me flashbacks of executive conversations where I\u2019m asked to summarize complicated information into a single square \u2013 while somehow defying […]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-499","post","type-post","status-publish","format-standard","hentry","category-availability-groups"],"yoast_head":"\nSQL Server AlwaysOn Availability Groups Dashboard - Joe Sack<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/answering-questions-with-the-alwayson-dashboard\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server AlwaysOn Availability Groups Dashboard - Joe Sack\" \/>\n<meta property=\"og:description\" content=\"The word \u201cdashboard\u201d immediately puts me into a state of suspicion. This is probably because I\u2019ve been a part of the corporate world for 18 years now and, fair or not, the word \u201cdashboard\u201d gives me flashbacks of executive conversations where I\u2019m asked to summarize complicated information into a single square \u2013 while somehow defying […]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/joe\/answering-questions-with-the-alwayson-dashboard\/\" \/>\n<meta property=\"og:site_name\" content=\"Joe Sack\" \/>\n<meta property=\"article:published_time\" content=\"2012-04-19T00:19:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-01-20T17:52:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/answering-questions-with-the-alwayson-da\/79744e2c\/snaghtml1d45817_thumb.png\" \/>\n<meta name=\"author\" content=\"Joseph Sack\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joseph Sack\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/answering-questions-with-the-alwayson-dashboard\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/answering-questions-with-the-alwayson-dashboard\/\",\"name\":\"SQL Server AlwaysOn Availability Groups Dashboard - Joe Sack\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#website\"},\"datePublished\":\"2012-04-19T00:19:00+00:00\",\"dateModified\":\"2013-01-20T17:52:34+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/answering-questions-with-the-alwayson-dashboard\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/joe\/answering-questions-with-the-alwayson-dashboard\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/answering-questions-with-the-alwayson-dashboard\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Availability Groups\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/category\/availability-groups\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Answering Questions with the AlwaysOn Dashboard\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/\",\"name\":\"Joe Sack\",\"description\":\"SQL Server Performance Tuning, High Availability and Disaster Recovery Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648\",\"name\":\"Joseph Sack\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g\",\"caption\":\"Joseph Sack\"},\"description\":\"Joe Sack is a Principal Consultant with SQLskills. He has worked as a SQL Server professional since 1997 and has supported and developed for SQL Server environments in financial services, IT consulting, manufacturing, retail and the real estate industry. Prior to joining SQLskills he worked at Microsoft as a Premier Field Engineer supporting very large enterprise customer environments. He was responsible for providing deep SQL Server advisory services, training, troubleshooting and ongoing solutions guidance. His areas of expertise include performance tuning, scalability, T-SQL development and high-availability. In 2006 Joe earned the \u201cMicrosoft Certified Master: SQL Server 2005\u201d certification and in 2008 he earned the \u201cMicrosoft Certified Master: SQL Server 2008\u201d certification. In 2009 he took over responsibility for the entire SQL Server Microsoft Certified Master program and held that post until 2011. He was given the SQL Server MVP award in 2013.\",\"sameAs\":[\"http:\/\/3.209.169.194\/blogs\/joe\",\"https:\/\/twitter.com\/https:\/\/twitter.com\/josephsack\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/author\/joe\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SQL Server AlwaysOn Availability Groups Dashboard - Joe Sack","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqlskills.com\/blogs\/joe\/answering-questions-with-the-alwayson-dashboard\/","og_locale":"en_US","og_type":"article","og_title":"SQL Server AlwaysOn Availability Groups Dashboard - Joe Sack","og_description":"The word \u201cdashboard\u201d immediately puts me into a state of suspicion. This is probably because I\u2019ve been a part of the corporate world for 18 years now and, fair or not, the word \u201cdashboard\u201d gives me flashbacks of executive conversations where I\u2019m asked to summarize complicated information into a single square \u2013 while somehow defying […]","og_url":"https:\/\/www.sqlskills.com\/blogs\/joe\/answering-questions-with-the-alwayson-dashboard\/","og_site_name":"Joe Sack","article_published_time":"2012-04-19T00:19:00+00:00","article_modified_time":"2013-01-20T17:52:34+00:00","og_image":[{"url":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-content\/uploads\/windows-live-writer\/answering-questions-with-the-alwayson-da\/79744e2c\/snaghtml1d45817_thumb.png"}],"author":"Joseph Sack","twitter_misc":{"Written by":"Joseph Sack","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/answering-questions-with-the-alwayson-dashboard\/","url":"https:\/\/www.sqlskills.com\/blogs\/joe\/answering-questions-with-the-alwayson-dashboard\/","name":"SQL Server AlwaysOn Availability Groups Dashboard - Joe Sack","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#website"},"datePublished":"2012-04-19T00:19:00+00:00","dateModified":"2013-01-20T17:52:34+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/answering-questions-with-the-alwayson-dashboard\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/joe\/answering-questions-with-the-alwayson-dashboard\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/answering-questions-with-the-alwayson-dashboard\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/joe\/"},{"@type":"ListItem","position":2,"name":"Availability Groups","item":"https:\/\/www.sqlskills.com\/blogs\/joe\/category\/availability-groups\/"},{"@type":"ListItem","position":3,"name":"Answering Questions with the AlwaysOn Dashboard"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/joe\/","name":"Joe Sack","description":"SQL Server Performance Tuning, High Availability and Disaster Recovery Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/joe\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648","name":"Joseph Sack","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g","caption":"Joseph Sack"},"description":"Joe Sack is a Principal Consultant with SQLskills. He has worked as a SQL Server professional since 1997 and has supported and developed for SQL Server environments in financial services, IT consulting, manufacturing, retail and the real estate industry. Prior to joining SQLskills he worked at Microsoft as a Premier Field Engineer supporting very large enterprise customer environments. He was responsible for providing deep SQL Server advisory services, training, troubleshooting and ongoing solutions guidance. His areas of expertise include performance tuning, scalability, T-SQL development and high-availability. In 2006 Joe earned the \u201cMicrosoft Certified Master: SQL Server 2005\u201d certification and in 2008 he earned the \u201cMicrosoft Certified Master: SQL Server 2008\u201d certification. In 2009 he took over responsibility for the entire SQL Server Microsoft Certified Master program and held that post until 2011. He was given the SQL Server MVP award in 2013.","sameAs":["http:\/\/3.209.169.194\/blogs\/joe","https:\/\/twitter.com\/https:\/\/twitter.com\/josephsack"],"url":"https:\/\/www.sqlskills.com\/blogs\/joe\/author\/joe\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts\/499","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/comments?post=499"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts\/499\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/media?parent=499"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/categories?post=499"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/tags?post=499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}