Tenho a necessidade de reportar métricas mensais de uptime do SQL Server, por aplicativo/banco de dados. Isso seria no nível do cluster. IE, se uma réplica secundária ficasse offline, mas uma primária ainda estivesse disponível para processar transações, o tempo de atividade ainda seria considerado 100%.
Analisei várias ferramentas que podem servir a esse propósito, e algumas chegam perto. Mas, nenhum deles parece capturar nada mais do que se o serviço do SQL Server estiver online e aceitando conexões. Eles também não agregam essas métricas no nível do cluster/AG. Isso significa que esses relatórios de tempo de atividade seriam atingidos se uma réplica secundária ficasse offline.
Por exemplo, digamos que um banco de dados fique offline ou um arquivo de log seja preenchido e as transações não possam ser processadas em um único banco de dados. Essas ferramentas diriam que o SQL Server está ativo, mas eu ainda teria pessoas dizendo que era um problema de banco de dados. Assim, essas métricas precisariam refletir que o SQL não estava totalmente ativo naquele momento.
A melhor idéia que tenho neste momento é criar um trabalho do SQL Agent que insira um registro em uma tabela Canary em cada banco de dados, uma vez por minuto. Em seguida, no final do mês, para consultar essa tabela e dividir a contagem de linhas do mês anterior pela contagem de linhas esperada. Achei que não havia melhor maneira de provar que um banco de dados estava realmente disponível do que tentar inserir uma linha.
Já tenho a solução acima desenvolvida, testada e funcionando. Mas estou curioso para saber se alguém conhece uma maneira melhor de fazer isso. Incluindo quaisquer ferramentas de mercadorias ou DMVs que eu possa ter esquecido, que eu poderia usar para extrapolar as métricas de disponibilidade do usuário final de todos os bancos de dados em uma Instância SQL?
Esta é a solução que estou usando, que está funcionando.
O procedimento armazenado abaixo pode ser usado para preencher uma tabela Canary e pode ser executado a cada minuto a partir de um trabalho do SQL Agent.
A consulta a seguir pode ser usada a cada mês para relatar o tempo de atividade com base no número de linhas inseridas com êxito na tabela Canary durante o mês anterior.