Monitoramento no Microsoft SQL Server 2012: utilizando a ferramenta SQL Server Profiler | .NET Coders
Ferramentas de Administração »
É inegável a importância que os bancos de dados relacionais desfrutam nas mais variadas organizações. A esmagadora maioria das soluções de software modernas depende em algum grau destes repositórios, sendo uma prática bastante comum a destinação de vultosas verbas para suportar tais operações.
O crescimento no uso de sistemas computacionais costuma estar atrelado a pesados investimentos em infraestrutura, com ações visando à otimização no uso de bases relacionais sendo relegadas em alguns casos a um segundo plano. Por mais que a expansão dos recursos de hardware seja fundamental em tais situações, o monitoramento da forma como as aplicações interagem com um gerenciador de bancos de dados é primordial para um uso mais racional e performático destas estruturas.
No caso específico do SQL Server 2012, este SGBD disponibiliza um utilitário conhecido como SQL Server Profiler (ou simplesmente Profiler) para a monitoração de instruções enviadas a bases de dados. Este tipo de ação acontece através da criação de Traces, que nada mais são do que conjuntos de registros em que são registrados/logados todos os comandos transmitidos a um banco de dados durante um período de tempo. Importante destacar que o Profiler pode auxiliar não apenas DBAs em suas atividades rotineiras, como também desenvolvedores preocupados em entender o comportamento de aplicações e frameworks no processo de comunicação com um servidor SQL Server.
Dentre os principais recursos do SQL Server Profiler, é possível destacar a existência de funcionalidades para a monitoração em tela do uso de um servidor SQL Server, um filtro que permite selecionar quais eventos serão logados (considerando para isto diferentes atributos que identificam um determinado tipo de ocorrência), além de mecanismos para a gravação de Traces em arquivos ou mesmo em tabelas de bancos de dados.
O objetivo deste post é apresentar como a ferramenta Profiler pode ser utilizada no monitoramento em tela de instruções enviadas a uma base num servidor SQL. Para isto, será executada uma consulta a partir de uma aplicação .NET, empregando o Entity Framework como mecanismo de acesso a dados.
A fim de demonstrar como o SQL Server Profiler pode ser utilizado, o primeiro passo consistirá em iniciar a execução desta ferramenta. O Profiler pode ser ativado de várias maneiras:
A partir do menu Iniciar do Windows (em máquinas que possuam as ferramentas do SQL Server 2012 instaladas);
Acionando o menu "Tools", opção "SQL Server Profiler" dentro do SQL Server Management Studio (conforme indicado na Imagem 1).
Imagem 1. Acionando o SQL Server Profiler
Aparecerá neste momento a tela inicial do Profiler, sendo necessário informar as credenciais para o acesso a um servidor SQL Server (Imagem 2).
Imagem 2. Acessando o SQL Server Profiler
Será exibida agora então a janela "Trace Properties", a partir da qual serão especificadas as configurações para registrar instruções enviadas a uma base de dados. Na aba "General" é possível definir em qual arquivo ou tabela serão persistidas estas informações (para o exemplo aqui abordado será demonstrado o processo de monitoramento em tela apenas, não se fazendo uso de tais opções), além de outras informações que identificam um Trace. Preencher o campo "Trace name" com o valor "Teste Profiler" (Imagem 3).
Imagem 3. Configurações do trace a ser criado
Prosseguindo com o processo de criação de um novo Trace, selecionar agora a aba "Events Selection". Marcar a opção "Show All Columns", a fim de habilitar o item que possibilitará filtrar o banco de dados a ser monitorado (Imagem 4).
Imagem 4. Definindo os tipos de eventos a serem logados
Acionar então dentro da aba "Events Selection" a opção "Column Filters", preenchendo no filtro "Database name" o nome da base que estará sendo monitorada (Imagem 5). Confirmar em seguida este procedimento clicando sobre o botão "OK". Para este exemplo específico foi utilizado um banco chamado "TesteEFCodeFirst".
Imagem 5. Especificando um filtro para a geração de um Trace
Preenchida a condição a ser atendida pelo filtro, o próximo passo será iniciar a execução do Trace correspondente. Para isto, clicar no botão "Run" dentro da janela "Trace Properties" (Imagem 6).
Imagem 6. Iniciando a execução de um Trace a partir da ferramenta Profiler
Na Imagem 7 é possível observar o conteúdo do Trace logo após o início de sua execução. Até este momento nenhuma instrução foi enviada à base TesteEFCodeFirst.
Imagem 7. Trace já iniciado
Executando uma aplicação que faça uso da base especificada no filtro, o Trace já será atualizado com as instruções enviadas ao servidor SQL Server. É o que pode ser observado na Imagem 8, em que o acesso à base TesteEFCodeFirst aconteceu a partir de trechos de código que fazem uso do Entity Framework Code First. Como é possível observar, constam neste Trace o horário de início e término de um comando, a conta utilizada no acesso ao servidor SQL Server, dentre outras informações.
Imagem 8. Trace após a execução de consultas SQL
A última consulta executada ilustra bem uma questão que passa despercebida ao se utilizarem frameworks de mapeamento objeto-relacional (ORM) como o Entity Framework e o NHibernate. Embora estes mecanismos evoluam continuamente no que se refere à performance e otimização no uso de recursos de um banco de dados, nem sempre as consultas SQL geradas pelos mesmos encontram-se numa forma considerada ideal. A Imagem 9 apresenta em detalhes um exemplo disto, em que uma consulta empregando duas tabelas (Estados e Regiões) fez uso de um Sub-SELECT apenas para ordenar o resultado final (foi utilizada neste caso a versão 6.0.2 do Entity Framework).
Imagem 9. Detalhes de uma consulta logada a partir da ferramenta Profiler
Procurei demonstrar ao longo deste post de que forma o SQL Server Profiler pode ser útil no monitoramento de bancos criados a partir do SQL Server. Talvez o grande trunfo desta ferramenta esteja na ajuda que a mesma oferece para identificar gargalos, permitindo a identificação de instruções SQL que estejam degradando a performance no acesso a uma base.
Embora presente em todas os releases comercializados do SQL Server, o utilitário Profiler não é distribuído com a versão Express. Uma alternativa neste último caso seria a ferramenta ExpressProfiler, que está hospedada no site do projeto Codeplex (o link para o download da mesma está no final deste artigo).