Articles

SQLShack

Introdução

Neste artigo, estamos a passar por muitas das ferramentas que podemos utilizar para monitorizar o desempenho do SQL Server. O SQL Server está repleto de muitos e bons relatórios que permitem a um DBA detectar rapidamente se existe algum estrangulamento de desempenho actual no SQL Server. Muitos destes situam-se em cima de DMVs, mas dão-nos uma forma visualmente interactiva de olhar e trabalhar com os dados. Vamos começar com os Relatórios do Painel de Desempenho do SQL Server.

Relatórios do Painel

Vamos saltar para o SQL Server Management Studio (SSMS) e a primeira coisa que vamos fazer é levar-vos através de relatórios de painel de instrumentos de todos os níveis, prontos a usar. Podem ser encontrados clicando com o botão direito do rato na instância do SQL Server no Object Explorer, e a partir do menu de contexto, encontrará Relatórios > Relatórios Padrão:

Lista de Relatórios de Desempenho incorporados no SSMS para rastrear o desempenho do SQL Server

Lista de Relatórios de Desempenho incorporados no SSMS para rastrear o desempenho do SQL Server

Todos os relatórios do painel de controlo são úteis, e não vamos passar por todas elas, pois isso exigiria muito tempo/palavras, mas sinta-se à vontade para verificar todas elas sempre que tiver a oportunidade. Para mostrar um exemplo, escolha o Painel do Servidor a partir do menu de contexto. Este relatório dá-nos muita informação sobre o estado actual das instâncias do SQL Server, incluindo a sua configuração, versão, serviços, e actividade no mesmo:

SQL Server Dashboard Report mostrando dados sobre a instância do SQL Server, a sua configuração e actividade no mesmo

SQL Server Dashboard Report mostrando dados sobre a instância do SQL Server, a sua configuração e actividade no mesmo

Aqui também temos opções de configuração não por defeito. Estas são as que foram alteradas a partir da instalação do vanilla:

Lista de opções de configuração não por defeito numa instância do SQL Server

Lista de opções de configuração não por defeito numa instância do SQL Server

Também, ao nível da base de dados, se clicarmos com o botão direito do rato numa base de dados, e entrarmos em relatórios, temos todo o tipo de relatórios de utilização de disco, backup e restauração de eventos, transacções de topo, estatísticas de índice, etc.:

Lista de Relatórios de Desempenho incorporados a nível de base de dados no SSMS para rastrear o desempenho do SQL Server

Lista de Relatórios de Desempenho incorporados a nível de base de dados no SSMS para rastrear o desempenho do SQL Server

Assim, todos estes relatórios de painel são óptimos, são fáceis de consumir e de trabalhar.

Activity Monitor

A seguir, vamos analisar o Activity Monitor que é um monitor em tempo real dentro do SQL Server que podemos utilizar para monitorizar tudo, desde o desempenho até aos custos de E/S a consultas dispendiosas, etc. Para iniciar o Monitor de Actividade, clique com o botão direito do rato na instância do SQL Server no Object Explorer e a partir do menu de contexto escolha Activity Monitor. Pode também lançá-lo a partir da barra de ferramentas Padrão, clicando no ícone do Monitor de Actividade:

Opção Activity Monitor a partir do menu de contexto do SSMS, clique com o botão direito do rato no Object Explorer para monitorizar o desempenho do SQL Server's right-click context menu in Object Explorer for monitoring SQL Server performance

Opção Activity Monitor a partir do menu de contexto do SSMSclique no menu de contexto no Object Explorer para monitorizar o desempenho do SQL Server's right-click context menu in Object Explorer for monitoring SQL Server performance

Activity Monitor sempre foi uma das ferramentas a utilizar se algo de repente correr mal com o desempenho do SQL Server. A primeira coisa que vemos, quando acendemos o Activity Monitor é o painel Overview. Para além disso, esta ferramenta tem seguido painéis expansível e dobrável: Recursos Espera, E/S de Ficheiros de Dados, Consultas Caras Recentes, e Consultas Caras Activas:

Plano do Monitor de Actividade em SSMS

Processos – dá-nos a capacidade de olhar para os processos em execução actualmente para que possamos geri-los. O clique com o botão direito do rato faz surgir o menu de contexto a partir do qual podem ser terminados, rastreados no SQL Server Profiler (mais sobre isso mais tarde), vistos como um plano de execução, e por último, mas não menos importante, os detalhes da sessão que surgem num diálogo mostrando o último lote de comandos T-SQL:

Caixa de detalhes da sessão mostrando o último lote de comandos T-SQL

Caixa de detalhes da sessão mostrando o último lote de comandos T-SQL

Espera de recursos – mostra informações sobre as esperas de recursos:

Painel de espera de recursos do monitor de actividade

Arquivo de dados I/O – mostra a informação actual de I/O do ficheiro de dados que está a acontecer ao nível do ficheiro:

Painel de E/S do ficheiro de dados do monitor de Actividade

P>P>Pesquisas recentes/activas dispendiosas – mostra as consultas recentes/activas dispendiosas que utilizam muitos recursos (memória, actividade do disco, rede):

Painel de Consultas CarasRecentes do monitor de Actividade

Este é um óptimo ponto de partida para descobrir quais as consultas que estão a causar problemas, que utilizam demasiados recursos, etc. porque, uma vez encontradas, podem ser vistas como o plano de execução para que os pontos quentes possam ser facilmente encontrados:

Active Expensive Queries pane of the Activity monitor showing an execution plan

Active Expensive Queries pane of the Activity monitor showing an execution plan

Top DBA DMVs

Moving on, vamos verificar os DMV de topo que todos os DBA devem saber. Estes são os DMV que deve ter sempre no seu bolso. Para obter uma lista rápida de todos os DMO (DMV e DMF) basta consultar o lote abaixo:

1
2
3
4
5
6
7

— Lista de todos os DMOs (DMVs & DMFs)
SELECT name,
tipo,
tipo_desc
do sistema.system_objects so
WHERE so.name LIKE ‘dm_%’
ORDER BY so.nome;

Isto devolverá todos os DMVs & DMFs no SQL Server. Veja a coluna de tipo e note que “V” significa uma vista, e “IF” para uma função:

Script para retornar a lista de todos os DMOs no SQL Server

Script para retornar a lista de todos os DMOs no SQL Server

A consulta acima retornou 243 DMOs num sistema. Aqui está a lista dos mais úteis:

Execução

sys.dm_exec_connections = Ligação estabelecida
sys.dm_exec_sessions = Sessões autenticadas
sys.dm_exec_requests = Pedidos actuais

Execução (relacionados com a consulta)

p>sys.dm_exec_cached_plans = Planos de execução em cache
sys.dm_exec_query_plan = Mostrar plano para um determinado plano_handle em cache
sys.dm_exec_query_stats = Consultar estatísticas de desempenho
sys.dm_exec_sql_text = Texto SQL dado por um sql_handle

Index

sys.dm_db_index_index_physical_stats = Tamanho e fragmentação do índice
sys.dm_db_index_usage_stats = utilização do índice através do optimizador de consulta
sys.dm_db_missing_index_details = Descobrir índices em falta

OS

sys.dm_os_performance_counters = Lista de todos os contadores e valores de desempenho do SQL Server
sys.dm_os_schedulers = Detectar pressão da CPU
sys.dm_os_waiting_tasks = Tarefas à espera nos recursos
sys.dm_os_wait_stats = Todos os tipos de espera e estatísticas

I/O

sys.dm_io_virtual_file_stats = Estatísticas de E/S para dados e ficheiros de registo
sys.dm_io_pending_io_requests = Pedidos de E/S pendentes

CLR

sys.dm_clr_loaded_assemblies = Montagens carregadas
sys.dm_clr_tasks = tarefas relacionadas com o CLR

Os livros online (docs.microsoft.com) têm uma óptima página de visão geral para todos os DMOs. Sinta-se à vontade para copiar qualquer nome da grelha de resultados, colá-lo no browser e pesquisar por ele. Muito provavelmente o primeiro artigo no topo será de MS docs mostrando a visão geral e utilização do T-SQL.

No final, vamos dar uma espreitadela ao SQL Server Profiler para criar e reproduzir um traço. Isso é extremamente útil na resolução de problemas, sejam eles de uma aplicação ou internamente dentro da base de dados. A criação de um rastreio permite-nos capturar uma carga de trabalho. E se essa carga de trabalho for a que causa problemas do que ter a capacidade de reproduzir esse problema tornará muito mais fácil verificar se realmente o resolvemos ao resolver o problema.

Infelizmente, a Microsoft anunciou a depreciação do SQL Server Profiler, mas esta funcionalidade ainda está disponível no SQL Server 2016 e será removida nas futuras versões.

Por isso, passemos ao SQL Server Profiler e vejamos como funciona. Para iniciar o SQL Server Profiler, carregar no ícone Start do Windows ou premir a tecla Windows e introduzir “SQL Server Profiler 17”:

Ícone do SQL Server Profiler do Windows Start

Ícone do SQL Server Profiler do Windows Start

Recordar, o SQL Server Profiler também pode ser inicializado a partir do Activity Monitor, basta clicar no painel Processos, clicar com o botão direito do rato no processo que deseja perfilar, e depois a partir do menu de contexto do botão direito do rato escolher a opção Trace Process in SQL Server Profiler.

Assim, assim que isto se activar, clique no primeiro botão que diz, “New Trace” (Novo Rastreio). Isto fará surgir o diálogo de ligação à sua instância:

Conectar ao Servidor a partir do SQL Server Profiler

Conectar ao Servidor a partir do SQL Server Profiler

Depois de estabelecida a ligação à instância que pretende perfilar e criar vestígios contra, aparecerá a janela Trace Properties. Dê um nome ao traço na caixa Trace name. E uma vez que queremos reproduzir este traço, seleccionar um modelo de traço integrado porque existem alguns requisitos com reproduções, certos eventos e campos precisam de ser capturados e a forma mais fácil de o fazer é escolher o modelo TSQL_Replay a partir da lista Utilizar o modelo:

Guia Geral da janela de Propriedades de Rastreio

Guia Geral da janela de Propriedades de Rastreio

Por enquanto, guardar isto como ficheiro, verificando a opção Guardar no ficheiro e depois alterar a tabulação para Selecção de Eventos. Uma vez que escolhemos um modelo, ele vai pré-seleccionar muitos eventos. A partir daqui, pode jogar com as opções, mostrar todos os eventos/colunas, adicionar/remover certos eventos, etc.:

Events Selection tab da janela Trace Properties

Neste caso, vamos clicar no botão Column Filters (Filtros de Coluna) para definir um filtro no nome de uma base de dados. Apenas pretendemos apanhar os eventos que atingem a base de dados AdventureWorks2014. Esta é uma óptima maneira de aparar todo o ruído extra que virá num cenário do mundo real:

Editar janela de Filtro

Editar janela de Filtro

Uma vez tudo isto configurado, clique em OK no diálogo Editar Filtro para guardar a configuração e fechá-la. De volta às janelas iniciais, carregar no botão Executar para iniciar o rastreio. Assim, este traço está agora em execução, monitorizando tudo o que está a acontecer na base de dados AdventureWorks2014:

Running trace within SQL Server Profiler windows capturando informação sobre o desempenho do SQL Server

Running trace within SQL Server Profiler windows capturando informação sobre o desempenho do SQL Server

Switch over SSMS e executar algumas consultas ou simplesmente deixá-lo correr em segundo plano durante algum tempo. Vários eventos serão capturados mesmo que nenhuma consulta do utilizador esteja a carregar na base de dados:

Running trace within SQL Server Profiler window showing various events captured on SQL Server

Depois de se sentar aí durante algum tempo, parar o traço clicando no botão vermelho de paragem, como mostrado abaixo:

Button para parar um traço dentro da janela do SQL Server Profiler

Button para parar um traço dentro da janela do SQL Server Profiler

Agora, o que conseguimos capturar dentro daquele ficheiro previamente guardado, podemos, por exemplo, executar esta repetição numa instância diferente. Porquê? Porque pode ser extremamente útil quando se está a ter um problema na produção. É muito improvável que quaisquer grandes problemas possam ser resolvidos directamente num servidor de produção. Neste caso de utilização, a melhor abordagem seria copiar a produção para testar, pegar naquele vestígio que foi capturado em produção, e depois podemos fazer tudo o que quisermos nessa base de dados de teste em termos de resolução de problemas e reparação do problema.

Para tal, abrir o traço no SQL Server Profiler:

Opção para abrir um traço no SQL Server Profiler

Opção para abrir um traço no SQL Server Profiler

Agora, vá para Reproduzir e escolha Iniciar:

Opção para iniciar uma repetição de um traço no SQL Server Profiler

Opção para iniciar uma repetição de um traço no SQL Server Profiler

Isto irá, mais uma vez, trazer o diálogo de ligação do SQL Server à sua instância:

Conectar à caixa Servidor

Conectar à caixa Servidor

Que nos levará então à janela de Configuração de Repetição na qual podemos alterar o servidor de repetição se for necessário para o propósito mencionado anteriormente. É bastante simples a partir deste ponto. Basta premir OK para reproduzir o traço:

Basic Reply Options tab na janela Configuração da Resposta

Basic Reply Options tab na janela Configuração da Resposta

A primeira linha conterá sempre todo o Evento de Configuração da Repetição. Depois, sempre que houver um evento, ele irá disparar esse evento. O conjunto de resultados apenas indicará que está feito:

Replay Setting Event

Se nos deslocarmos para a direita, qualquer conjunto de resultados terá a duração medida do profiler – quanto tempo demorou a executar um evento:

Coluna de duração medida do perfil dentro da janela do SQL Server Profiler

Coluna de duração medida do perfil dentro da janela do SQL Server Profiler

Mesmo no fim, encontrará o Evento de Estatísticas de Repetição que mostra o total de eventos, erros de fornecedor/internos que ocorreram, estatísticas de taxa de acerto, e o tempo total de repetição:

Replay Statistics Statistics Event statistics

Replay Statistics Statistics Event statistics

Mais uma vez, isto é bom para cenários em que há um problema com o desempenho do SQL Server e se pretende recriar o problema. Em primeiro lugar, capture o problema que nos dará então o fluxo de trabalho dentro de um traço que podemos fazer o que for necessário no SQL Server para resolver e corrigir o problema do desempenho do SQL Server e depois, finalmente, podemos reproduzir esse traço, reproduzir esse problema para ver se o corrigimos com sucesso.

Conclusion

Neste artigo, cobrimos quatro ferramentas para monitorizar o desempenho do SQL Server. Esperemos que agora seja possível recolher o desempenho e informação do sistema usando Relatórios de Base de Dados para uma visão visual interactiva sobre o que o SQL Server está a fazer. Depois analisámos uma ferramenta em tempo real para monitorizar o desempenho do SQL Server chamada Activity Monitor. Também analisámos como utilizar DMV e, no final, aprendemos a utilizar o SQL Server Profiler.

  • Autor
  • Posts recentes
Bojan Petrovic
Bojan aka “Boksi”, um AP licenciado em Tecnologia Informática focado em Redes e tecnologia electrónica da Escola de Design e Tecnologia de Copenhaga, é um analista de software com experiência em garantia de qualidade, suporte de software, evangelismo de produtos e envolvimento de utilizadores.
Escreveu extensivamente tanto sobre o SQL Shack como sobre o ApexSQL Solution Center, em tópicos que vão desde tecnologias de clientes como resolução e temática 4K, manipulação de erros até estratégias de índice, e monitorização do desempenho.
Bojan trabalha no ApexSQL em Nis, Sérvia como parte integrante da equipa que se concentra na concepção, desenvolvimento, e teste da próxima geração de ferramentas de base de dados, incluindo MySQL e SQL Server, e ambas ferramentas autónomas e integrações no Visual Studio, SSMS, e VSCode.
Ver mais sobre Bojan no LinkedIn
Ver todos os posts de Bojan Petrovic

Bojan Petrovic
Latest posts de Bojan Petrovic (ver todos)
ul>

  • Código do Estúdio Visual para desenvolvimento MySQL e MariaDB – 13 de Agosto, 2020
  • explicada a sintaxe SQL UPDATE – 10 de Julho de 2020
  • CREATE VIEW SQL: Trabalhar com vistas indexadas no SQL Server – 24 de Março de 2020
  • Deixe uma resposta

    O seu endereço de email não será publicado. Campos obrigatórios marcados com *