sexta-feira, 10 de agosto de 2018

8 Novas DMVs e DMFs do SQL Server 2017

As exibições de gerenciamento dinâmico (DMVs) e as funções de gerenciamento dinâmico (DMFs) são exibições do sistema e funções do sistema que retornam metadados do estado do sistema. Ao consultar os objetos do sistema relacionados, os administradores de banco de dados podem entender os componentes internos do SQL Server. Ele nos permite monitorar o desempenho da instância do SQL Server e diagnosticar problemas com ela.
O SQL Server 2017 vem com várias exibições de gerenciamento dinâmico novas e aprimoradas e funções de gerenciamento dinâmico que ajudarão os DBAs a monitorar a integridade e o desempenho de instâncias do SQL Server. Alguns DMVs existentes, como sys.dm_os_sys_info e sys.dm_db_file_space_usage , foram aprimorados. Alguns também foram recém-construídos e estão disponíveis apenas para o SQL Server 2017.


Os novos ou aprimorados DMVs / DMFs se enquadram nas três categorias:
  • Banco de dados relacionado
    • sys.dm_db_log_stats
    • sys.dm_db_log_info
    • sys.dm_db_stats_histogram
    • sys.dm_db_file_space_usage
    • sys.sys.dm_db_tuning_recommendations
  • Transação relacionada
    • sys.dm_tran_version_store_space_usage
  • Relacionado ao sistema operacional do SQL Server
    • sys.dm_os_host_info
    • sys.dm_os_sys_info

sys.dm_db_log_stats

Vamos dar uma olhada neles criando uma nova consulta aqui e digitando select * from . A primeira visão com a qual quero trabalhar é sys.dm_db_log _ stats . Ele requer o número do ID do banco de dados que você quer investigar, então eu vou digitar o número um dentro do parêntese para indicar o banco de dados mestre.
Vamos em frente e executar a declaração. Este DMV retorna informações sobre os arquivos de log de transação. As informações incluem o modelo de recuperação do banco de dados.
Podemos ver que o banco de dados Python2017 está usando o modelo de recuperação FULL. As outras colunas fornecem o tamanho total do log em megabytes. Além disso, podemos ver algumas informações sobre a última vez que o log foi feito backup. Nesse caso, o log de transações do banco de dados nunca foi submetido a backup, portanto, está relatando a partir de 1º de janeiro de 1900.
image.png

É tão fácil projetar os dados para o banco de dados inteiro através da junção cruzada com a visualização do sistema sys.databases. A saída derivada fornece informações muito úteis sobre o banco de dados e a estrutura de log. 

image.png

sys.dm_db_log_info

sys.dm_db log_info também lida com os arquivos de log. Requer o ID do banco de dados para entrada. Esta visão analisa especificamente os arquivos de log virtuais ou VLFs. Estes compõem o log de transações do banco de dados e ter um grande número de VLFs pode afetar negativamente o tempo de inicialização e recuperação do banco de dados. Com essa visão, podemos ver quantos VLFs seu banco de dados tem atualmente, junto com seu tamanho e status. Esta exibição de gerenciamento substitui o comando do console do banco de dados, informações de log do dbcc .
image.png

No exemplo a seguir, T-SQL, podemos ver que a saída do DMV é unida a sys.databases, uma visualização do sistema para obter dados consolidados sobre todos os bancos de dados da instância do SQL
image.png

sys.dm_db_tuning_recommendations

O novo DMV retorna as informações detalhadas das recomendações de ajuste. Isso requer uma habilitação da opção de ajuste automático (Automatic tuning) . Se o mecanismo de banco de dados identificar o plano que está causando a regressão, uma sugestão será feita para corrigi-lo usando esse dmv.

sys.dm_tran_version_store_space_usage

sys.dm_tran_version_store_space_usage é usado para controlar o uso do armazenamento de versão por banco de dados em tempdb. Isso é bastante útil no monitoramento proativo do dimensionamento de tempdb no requisito de uso de armazenamento de versão de cada banco de dados. Este DMV retorna o espaço de armazenamento de versão agregada consumido em tempdb por banco de dados. Não possui argumentos que precisem ser fornecidos. Os resultados mostram o databaseID, a contagem de páginas reservadas em tempdb para registros de armazenamento de versão e o espaço total em kilobytes.
Por exemplo, o banco de dados Python2017 é configurado com a opção ALLOW_SNAPSHOT_ISOLATION.
image.png

sys.dm_db_stats_histogram

O próximo dmv é sys.dm_db_stats_histogram . Ele requer dois argumentos, object_ID e um stats_ID que obtemos na visualização do sistema sys.stats . Este DMV é semelhante a dbcc show_statistics com o comando histogram.
image.png
Vamos dar uma olhada nas estatísticas desse objeto. Os resultados contêm detalhes sobre a frequência de ocorrência de cada valor distinto na tabela. Estes são os valores que o otimizador de consulta usa para ajudar a escolher um plano ao executar uma consulta. 
Essa tabela em particular tinha 10.000 registros com um inteiro único em cada um. As linhas são avaliadas entre os intervalos 0 e 1, 1 e 9.999 e 10.000. Portanto, o histograma mostra que os dados são divididos em três etapas. A primeira etapa inclui os valores entre zero e a chave alta do intervalo de um. O segundo passo inclui os números entre 1 e 9999. Ele mostra que temos 99.997 registros que estão dentro desse intervalo e um registro que corresponde exatamente à chave alta de 9999. Finalmente, o último intervalo é para todos os números entre 9999 e 10000. Não há nenhum dentro desse intervalo, e há apenas um único que corresponde à chave alta.

sys.dm_os_host_info

sys.dm_os_host_info retorna informações sobre o sistema operacional do host que a instância do servidor está executando. Isso também será executado em máquinas Linux e também identificará a distribuição do Linux. 
image.png

sys.dm_os_sys_info

sys.dm_os_sys_info retorna algumas informações úteis sobre os recursos usados, bem como disponíveis para a instância do SQL Server. As três colunas recém-adicionadas são:
  • socket_count
  • cores_per_socket
  • numa_node_count
image.png

sys.dm_db_file_space_usage

sys.dm_db_file_space_usage é o DMV que retorna informações de uso de espaço do banco de dados.
A coluna recém-adicionada coluna modified_extent_page_count nos dá a flexibilidade para gerenciar backups. A contagem de páginas modificada pode ser usada para rastrear mudanças diferenciais no banco de dados desde o último backup completo para decidir se um backup diferencial é benéfico. A coluna é o número total de páginas modificadas nas extensões alocadas do arquivo desde o último backup completo do banco de dados.

Demo:

Vamos considerar uma estratégia de backup para VLDB
  1. Backup completo semanal
  2. Backup diferencial diário
  3. Backups de log por hora
O backup diferencial é uma coleção de páginas modificadas desde o último backup completo. O DMV sys.dm_db_file_space_usage introduz uma nova coluna chamada modified_extent_page_count que nos fornece detalhes sobre as páginas modificadas desde o último backup completo. O valor dessa coluna é usado como referência para iniciar o processo de backup diferencial.
  1. Backup do banco de dados
  2. Consultar o  sys.dm_db_file_space_usage  dmv
  3. Validar a alteração diferencial, a quantidade de dados alterados desde o último backup completo; vemos uma mudança de 14,55% nos dados
  4. Construa a lógica para iniciar um processo de backup diferencial; no nosso caso, se houver uma alteração de 10% ou mais, um backup diferencial será iniciado
image.png

Wrapping up

A visão geral das novas exibições de gerenciamento dinâmico e das funções de gerenciamento dinâmico fornecidas com o SQL Server 2017 foi explicada em detalhes. Eles podem ser usados para obter mais informações sobre o status do sistema. Pode ser informativo e útil para os administradores entenderem os metadados pertencentes à instância do SQL Server. Para mim, o sys.dm_db_file_space_usage e o sys.dm_db_tuning_recommendations são algo que eu estava procurando há muito tempo. E quanto a você? Fiquem à vontade para comentar.

Referências

Gustavo Damatto
MCSD - Microsoft Certified Solutions Developer

linkedin.com/in/damatto

Ribeirão Preto-SP


quarta-feira, 8 de agosto de 2018

Numero De Conexões por aplicação - SQL Server

Nesta dica rápida, iremos demonstrar a utilidade da SYSPROCESSES, onde podemos identificar as sessões conectadas na nossa instância do SQL Server e especifico detalhar por aplicações. 



Esta informação é muito útil quando planejamos uma janela de manutenção ou quando queremos identificar se há um aumento no fluxo dados e quantidade de sessões por usuário.

abraços

Gustavo Damatto
MCSD - Microsoft Certified Solutions Developer


Ribeirão Preto-SP