{"id":4649,"date":"2016-06-22T08:30:23","date_gmt":"2016-06-22T11:30:23","guid":{"rendered":"http:\/\/www.fabriciolima.net\/blog\/?p=4350"},"modified":"2016-07-23T14:51:34","modified_gmt":"2016-07-23T17:51:34","slug":"queries-do-dia-a-dia-monitorando-contadores-de-forma-simples-via-dmv","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2016\/06\/22\/queries-do-dia-a-dia-monitorando-contadores-de-forma-simples-via-dmv\/","title":{"rendered":"Queries do Dia a Dia &#8211; Monitorando Contadores de forma simples via DMV"},"content":{"rendered":"<p>Ol\u00e1 Pessoal,<\/p>\n<p>Hoje vou compartilhar com voc\u00eas mais um script que utilizo nos clientes que realizo um <a href=\"https:\/\/www.fabriciolima.net\/consultoria-remota\/dba-remoto\/\" target=\"_blank\">monitoramento di\u00e1rio do SQL Server<\/a>.<\/p>\n<p>Realizando uma busca na internet voc\u00ea encontra algumas formas de monitorar contadores no SQL Server. Voc\u00ea pode enviar dados do perfmon para um arquivo e depois importar para o SQL Server, pode fazer alguma rotina em powershell, pode usar uma ferramenta de terceiro e etc&#8230;<\/p>\n<p>Normalmente, antes de analisar contadores mais espec\u00edficos em um ambiente, eu crio uma rotina para monitorar apenas 4 contadores que consigo pegar <strong>facilmente<\/strong> via DMV (existem outros contadores que tamb\u00e9m podem ser monitorados por essa mesma DMV).<\/p>\n<p>A DMV que nos d\u00e1 essa informa\u00e7\u00e3o \u00e9 a sys.<em><strong>dm_os_performance_counters<\/strong><\/em>. Fa\u00e7a um select * nela para validar se existem outros contadores que possam ser interessantes para voc\u00ea.<\/p>\n<p>J\u00e1 vi casos dessa DMV n\u00e3o retornar informa\u00e7\u00f5es. Existem algumas solu\u00e7\u00f5es no google para isso, e se acontecer com voc\u00ea, seu amigo ser\u00e1 o google. Tem muito tempo que n\u00e3o pego esse problema, e n\u00e3o lembro qual solu\u00e7\u00e3o me atendeu na \u00e9poca. (viu Fabr\u00edcio&#8230; n\u00e3o colocou no blog sobre isso, n\u00e3o lembra mais&#8230; Bem feito&#8230; =\\&#8230;)<\/p>\n<p>Se consigo pegar de forma bem simples alguns contadores, porque n\u00e3o criar uma Baseline para isso?<\/p>\n<p>Seguem os contadores que vou monitorar nessa rotina:<\/p>\n<ul>\n<li><strong><span style=\"text-decoration: underline;\">BatchRequests<\/span><span style=\"text-decoration: underline;\">:<\/span><\/strong> Transa\u00e7\u00f5es por segundo no SQL Server (bom para monitorar como est\u00e1 a utiliza\u00e7\u00e3o do banco de dados);<\/li>\n<li><strong><span style=\"text-decoration: underline;\">User<\/span><span style=\"text-decoration: underline;\"> Connection:<\/span><\/strong> Quantidade de conex\u00f5es no banco de dados (bom para monitorar quando temos um maior n\u00famero de usu\u00e1rios conectados).\n<ul>\n<li>Esse log de conex\u00f5es me ajudou a desvendar um problema em um cliente onde o SQL Server estava chegando ao seu limite de conex\u00f5es que \u00e9 de 32.767 conex\u00f5es. Mas isso j\u00e1 \u00e9 assunto para um futuro post no Blog;<\/li>\n<\/ul>\n<\/li>\n<li><strong><span style=\"text-decoration: underline;\">CPU:<\/span><\/strong> Consumo de CPU do servidor (bom para acompanhar o consumo de CPU);<\/li>\n<li><strong><span style=\"text-decoration: underline;\">Page Life <\/span><span style=\"text-decoration: underline;\">Expectancy<\/span><span style=\"text-decoration: underline;\">:<\/span><\/strong> Expectativa de vida em segundos de uma p\u00e1gina na mem\u00f3ria do SQL Server (bom para monitorar se voc\u00ea est\u00e1 mantendo dados em cache por muito tempo, evitando acessos a disco).<\/li>\n<\/ul>\n<p>Para criar essa rotina, basta abrir o arquivo abaixo na base que deseja criar esse log e executar o script:<\/p>\n<p><a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/06\/Historico_Contadores_SQLServer.txt\" target=\"_blank\">Historico_Contadores_SQLServer<\/a><\/p>\n<p>O script vai criar as tabelas abaixo:<\/p>\n<ul>\n<li><strong>Contador<\/strong><\/li>\n<li><strong>Registro_Contador<\/strong><\/li>\n<\/ul>\n<p>E a procedure que far\u00e1 a carga dos dados nas Tabelas:<\/p>\n<ul>\n<li><strong>stpCarga_ContadoresSQL<\/strong><\/li>\n<\/ul>\n<p>Depois de executar o script, basta criar um job para executar a procedure <em><strong>stpCarga_ContadoresSQL<\/strong><\/em> a cada 1 minuto, ou menos, caso queira informa\u00e7\u00f5es mais precisas.<\/p>\n<p>Essa procedure demora 5 segundos para rodar devido a um <em><strong>waitfor delay<\/strong> <\/em>que existe dentro dela. Ela \u00e9 bem leve e n\u00e3o impacta na performance do seu ambiente.<\/p>\n<p>Ap\u00f3s executado, voc\u00ea pode conferir os contadores armazenados com o Script abaixo:<\/p>\n<pre class=\"lang:tsql decode:true \">SELECT Dt_Log, Nm_Contador, Valor\r\nFROM Registro_Contador A\r\nJOIN Contador B ON A.Id_Contador = B.Id_Contador\r\nORDER BY Nm_Contador, Dt_Log<\/pre>\n<p>Segue o resultado ap\u00f3s 3 execu\u00e7\u00f5es da procedure:<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/04\/POSTContadoresPerformance.jpg\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-4352 aligncenter\" title=\"POSTContadoresPerformance\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/04\/POSTContadoresPerformance.jpg\" alt=\"\" width=\"312\" height=\"232\" \/><\/a><\/p>\n<p>N\u00e3o se esque\u00e7a de criar um outro job para excluir dados antigos para que a tabela Registro_Contador n\u00e3o cres\u00e7a muito.<\/p>\n<p>Se hoje voc\u00ea j\u00e1 tem seu monitoramento de contadores mais completo, parab\u00e9ns!!! Permane\u00e7a com ele.<\/p>\n<p>Se hoje n\u00e3o monitora nada, esses 4 contadores j\u00e1 s\u00e3o um bom come\u00e7o.<\/p>\n<p>\u00c9 um script simples, mas j\u00e1 est\u00e1 a\u00ed prontinho para voc\u00eas utilizarem caso achem interessante.<\/p>\n<p><b>Gostou dessa dica?<\/b><\/p>\n<p>Cadastre seu e-mail para receber novos Posts e curta minha <a href=\"https:\/\/www.facebook.com\/FabricioLimaSolucoesemBancodeDados\/\" target=\"_blank\">P\u00e1gina no Facebook<\/a> para receber Dicas de Leituras e Eventos sobre SQL Server.<\/p>\n<p>Aprenda a criar essa e muitas outras rotinas importantes para o seu dia a dia de DBA no meu <a href=\"https:\/\/www.fabriciolima.net\/cursos-online\/treinamento-tarefas-do-dia-a-dia-de-um-dba-online\/\" target=\"_blank\">Treinamento de Tarefas do Dia a Dia de um DBA<\/a>.<\/p>\n<p>Abra\u00e7os,<\/p>\n<p>Fabr\u00edcio Lima<\/p>\n<p>MCITP \u2013 Database Administrator<\/p>\n<p>Consultor e Instrutor SQL Server<\/p>\n<p>Trabalha com SQL Server desde 2006<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1 Pessoal, Hoje vou compartilhar com voc\u00eas mais um script que utilizo nos clientes que realizo um monitoramento di\u00e1rio do SQL Server. Realizando uma busca na internet voc\u00ea encontra algumas formas de monitorar contadores no SQL Server. Voc\u00ea pode enviar dados do perfmon para um arquivo e depois importar para o SQL Server, pode fazer [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[3,942,1248,33,280],"tags":[1325,1330,1322,1323,1268,1328,25,80,1332,1329,1327,120,1324,1331,1326],"class_list":["post-4649","post","type-post","status-publish","format-standard","hentry","category-administracao-de-bd","category-consultoria-sql-server","category-queries-do-dia-a-dia","category-sql-server","category-virtual-pass-br","tag-batch-requestssec","tag-consumo-cpu-sql-server","tag-contadores","tag-contadores-sql-server","tag-cpu","tag-cpu-sql-server","tag-dmv","tag-dm_os_performance_counters","tag-ferramenta-contadores","tag-monitoramento-cpu-sql-server","tag-monitorando-cpu","tag-page-life-expectancy","tag-perfmon","tag-performance-monitor","tag-user-connections"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/4649","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/comments?post=4649"}],"version-history":[{"count":0,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/4649\/revisions"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=4649"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=4649"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=4649"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}