terça-feira, 8 de outubro de 2019

Monitorando AlwaysOn

Nos posts anteriores mostrei como configurar AlwaysOn Availability Groups (links abaixo), neste post vou mostrar como monitorar um ambiente de AlwaysOn.  As opções que irei mostrar neste post serem tanto para AlwaysOn Availability Groups quanto Read-scale Availability Group.


Links Configurando AlwaysOn Availability Groups:

O ambiente de AlwaysOn pode ser monitorado da interface gráfica ou por T-SQL, além de contadores no System Monitor.

Utilizando o SQL Server Management Studio no Object Explorer, temos acesso ao Dashboard do AlwaysOn, basta clicar com o botão direito do mouse no grupo em Availability Groups.


O Dashboard mostra todas as Réplicas e o Status de cada Banco de Dados.


Podemos acrescentar mais informações ao Dashboard, algumas bem úteis para avaliar a transferência das transações para as demais Réplicas, principalmente no modo de operação assíncrono.


Recomendo as duas colunas em destaque abaixo, para monitorar a fila de envio de transações para as Réplicas, além da fila de execução destas transações nas Réplicas.


Conseguimos obter informações similares utilizando T-SQL, acessando Views de sistema.

SELECT n.group_name as GrupoAlwaysOn,n.replica_server_name as Servidor,
db_name(drs.database_id) as BAnco,
drs.synchronization_state_desc as StatusSincronia,
drs.synchronization_health_desc as StatusAlwaysOn

FROM sys.dm_hadr_availability_replica_cluster_nodes n
join sys.dm_hadr_availability_replica_cluster_states cs on n.replica_server_name = cs.replica_server_name
join sys.dm_hadr_availability_replica_states rs on rs.replica_id = cs.replica_id
join sys.dm_hadr_database_replica_states drs on rs.replica_id=drs.replica_id


ORDER BY n.replica_server_name, db_name(drs.database_id)


SELECT r.replica_server_name as Servidor, db_name(rs.database_id) as Banco,
rs.synchronization_state_desc as StatusAlwaysOn,
isnull(convert(varchar(20),rs.last_commit_time,103) + ' ' + convert(varchar(20),rs.last_commit_time,108),'n/a') as UltimaDataHoraSinc,
isnull(rs.log_send_rate,0) as FilaEnvio,isnull(rs.log_send_queue_size,0) as FilaExecReplica

FROM sys.availability_replicas r
join sys.dm_hadr_database_replica_states rs on r.replica_id = rs.replica_id

WHERE 1=1

ORDER BY r.replica_server_name, db_name(rs.database_id)


Podemos acessar também os contadores do AlwaysOn via TSQL View “sys.dm_os_performance_counters”.

SELECT object_name,counter_name,instance_name,cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name = 'SQLServer:Availability Replica'


Até o próximo post.

Saudações Tricolores,
Landry


Nenhum comentário: