{"id":7756,"date":"2017-04-25T10:39:00","date_gmt":"2017-04-25T13:39:00","guid":{"rendered":"http:\/\/www.fabriciolima.net\/?p=7756"},"modified":"2017-04-25T10:39:00","modified_gmt":"2017-04-25T13:39:00","slug":"alerta-monitorando-processos-bloqueados-no-sql-server","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2017\/04\/25\/alerta-monitorando-processos-bloqueados-no-sql-server\/","title":{"rendered":"Alerta: Monitorando Processos Bloqueados no SQL Server"},"content":{"rendered":"<p>Ol\u00e1 Pessoal,<\/p>\n<p>Hoje vou compartilhar com voc\u00eas o script de mais um alerta para nos ajudar na Administra\u00e7\u00e3o do nosso SQL Server.<\/p>\n<p>Esse alerta \u00e9 muito \u00fatil no dia a dia. Ele vai monitorar os famosos <strong>&#8220;Locks&#8221;<\/strong> que acontecem no nosso banco\u00a0de dados.\u00a0Caso aconte\u00e7a algum Lock com um\u00a0processo que esteja executando a mais de 2 minutos (valor parametriz\u00e1vel), n\u00f3s seremos alertados.<\/p>\n<h6>Simulando um problema em uma Base<\/h6>\n<p><strong>Para testar o alerta fiz o seguinte procedimento:<\/strong><\/p>\n<ul>\n<li>Criei uma tabela e inseri uma linha;<\/li>\n<\/ul>\n<pre class=\"lang:tsql decode:true\">USE NomeDatabase\r\n\r\nGO\r\n\r\nCREATE TABLE Teste_Lock (\r\nID INT\r\n)\r\n\r\nINSERT INTO Teste_Lock VALUES(1)\r\n<\/pre>\n<ul>\n<li>Abri uma nova query (<strong>Query 1<\/strong>) e executei um UPDATE nessa tabela com um BEGIN TRAN mas sem finalizar (COMMIT). Dessa forma, temos uma transa\u00e7\u00e3o aberta alocando exclusivamente essa linha da tabela.<\/li>\n<\/ul>\n<pre class=\"lang:tsql decode:true\">-- Executar na Query 1\r\nBEGIN TRAN\r\n\tUPDATE Teste_Lock\r\n\tSET ID = ID\r\n\r\n-- COMMIT\r\n<\/pre>\n<ul>\n<li>Abri uma outra query (<strong>Query 2<\/strong>) e tentei fazer o mesmo UPDATE, mas dessa vez o comando \u00e9 bloqueado pelo passo anterior.<\/li>\n<\/ul>\n<pre class=\"lang:tsql decode:true \">-- Executar na Query 2\r\nBEGIN TRAN\r\n\tUPDATE Teste_Lock\r\n\tSET ID = ID\r\n\r\n-- COMMIT\r\n<\/pre>\n<p><strong>Ap\u00f3s 2 minutos de lock, quando o job de alerta rodar, ele vai enviar o seguinte e-mail:<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7772\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Alerta.png\" alt=\"\" width=\"1831\" height=\"617\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Alerta.png 1831w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Alerta-300x101.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Alerta-1024x345.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Alerta-768x259.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Alerta-1536x518.png 1536w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Alerta-700x236.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Alerta-410x138.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Alerta-100x34.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Alerta-275x93.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Alerta-20x7.png 20w\" sizes=\"auto, (max-width: 1831px) 100vw, 1831px\" \/><\/p>\n<p>Olha quanta informa\u00e7\u00e3o importante esse e-mail nos mostra:<\/p>\n<p><strong>TOP 50 &#8211; Processos Raiz Lock &#8211;<\/strong> Se voc\u00ea rodar a sp_whoisactive durante um lock grande vai ficar perdido com o resultado. Contudo,\u00a0nessa parte do e-mail temos uma coluna (N\u00edvel Lock) que informa a ra\u00edz do lock (N\u00edvel Lock = 0). Dessa forma, conseguimos ver facilmente os processos que est\u00e3o encadeando todos os outros locks.<\/p>\n<p><strong>TOP 50 &#8211; Processos executando no Banco de Dados\u00a0&#8211; <\/strong>Essa parte do e-mail simplesmente mostra as TOP 50 queries que est\u00e3o em execu\u00e7\u00e3o na sp_whoisactive (ordenada por tempo de execu\u00e7\u00e3o), estando elas envolvidas ou n\u00e3o no lock que est\u00e1 acontecendo.<\/p>\n<p>Nas colunas\u00a0temos tantas informa\u00e7\u00f5es legais, que conseguimos at\u00e9 j\u00e1 realizar alguma a\u00e7\u00e3o sem precisar se conectar no SQL Server:<\/p>\n<ul>\n<li>Qual o usu\u00e1rio est\u00e1 executando cada processo;<\/li>\n<li>O hor\u00e1rio de in\u00edcio e o tempo de execu\u00e7\u00e3o do processo;<\/li>\n<li>A query que est\u00e1 sendo executada;<\/li>\n<li>De qual m\u00e1quina a query est\u00e1 sendo executada;<\/li>\n<li>Qual a base;<\/li>\n<li>O Status das conex\u00f5es (sleeping, suspended e etc&#8230;)<\/li>\n<li>Dentre outras informa\u00e7\u00f5es&#8230;<\/li>\n<\/ul>\n<p>Para finalizar o lock, dei um COMMIT nas duas transa\u00e7\u00f5es que deixei aberta.<\/p>\n<p><strong>A pr\u00f3xima vez que o job de alerta rodar ele vai enviar o e-mail abaixo: <\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7773\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Clear.png\" alt=\"\" width=\"1827\" height=\"360\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Clear.png 1827w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Clear-300x59.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Clear-1024x202.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Clear-768x151.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Clear-1536x303.png 1536w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Clear-700x138.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Clear-410x81.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Clear-100x20.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Clear-275x54.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Processo_Bloqueado_Clear-20x4.png 20w\" sizes=\"auto, (max-width: 1827px) 100vw, 1827px\" \/><\/p>\n<p>Pronto. Agora sei quando ocorre um Lock mais demorado no meu Banco de Dados sem mesmo ter que conectar no SQL Server.<\/p>\n<p>Um detalhe importante \u00e9 que voc\u00ea s\u00f3 vai receber um e-mail de Alerta (n\u00e3o vai encher sua caixa de entrada). O e-mail de CLEAR s\u00f3 ser\u00e1 enviado ap\u00f3s a resolu\u00e7\u00e3o do problema.<\/p>\n<p><strong>Como crio esse alerta?<\/strong><\/p>\n<p><strong>Pr\u00e9-requisitos:<\/strong><\/p>\n<ul>\n<li>Configurar o envio de e-mail do SQL Server (claro). Segue um <a href=\"http:\/\/blogs.msdn.com\/b\/suhde\/archive\/2009\/07\/12\/how-to-configure-sql-server-database-mail-to-send-email-using-your-windows-live-mail-account-or-your-gmail-account.aspx\" target=\"_blank\" rel=\"noopener noreferrer\"><b>link<\/b><\/a> como refer\u00eancia.<\/li>\n<\/ul>\n<p>Segue o script para criar esse alerta: <a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/Alerta_Processo_Bloqueado.txt\" target=\"_blank\" rel=\"noopener noreferrer\"><b>Download Script<\/b><\/a><\/p>\n<p>Esse script vai criar uma tabela chamada <em><strong>Alerta<\/strong> <\/em>para controlar o ALERTA\u00a0e o CLEAR.<\/p>\n<p>E tamb\u00e9m vai criar uma procedure chamada <strong><em>stpAlerta_Processo_Bloqueado<\/em><\/strong>\u00a0que far\u00e1 a valida\u00e7\u00e3o. Voc\u00ea deve colocar essa procedure em um job para rodar a cada 1 minuto (dever de casa).<\/p>\n<p>No in\u00edcio do script tem uma documenta\u00e7\u00e3o dizendo que voc\u00ea precisa alterar o Profile e o E-mail de envio do Alerta.<\/p>\n<p>Em todos os meus clientes onde realizo um suporte e monitoramento mensal eu crio esse alerta para me ajudar na administra\u00e7\u00e3o do ambiente. Agora, fica a\u00ed todo o script prontinho para voc\u00eas tamb\u00e9m usarem\u00a0caso ainda n\u00e3o tenham algo parecido.<\/p>\n<p><strong>Outros alertas que j\u00e1 disponibilizei:<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2017\/01\/19\/alerta-monitorando-o-status-das-bases-de-dados-no-sql-server\/\" target=\"_blank\" rel=\"noopener noreferrer\">Alerta: Monitorando o Status das Bases de Dados no SQL Server<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2017\/01\/12\/alerta-monitorando-o-tamanho-do-transaction-log-no-sql-server\/\" target=\"_blank\" rel=\"noopener noreferrer\">Alerta: Monitorando o tamanho do Transaction Log no SQL Server<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2016\/11\/07\/casos-do-dia-a-dia-monitorando-o-tamanho-do-arquivo-mdf-do-tempdb-e-sua-version-store\/\" target=\"_blank\" rel=\"noopener noreferrer\">Casos do Dia a Dia: Monitorando o tamanho do arquivo MDF do Tempdb e sua Version Store<\/a><\/li>\n<\/ul>\n<p>Vem mais por a\u00ed.<\/p>\n<p><b>Gostou dessa Dica?<\/b><\/p>\n<p>Curta, comente, compartilhe com os coleguinhas\u2026<\/p>\n<p>Assine meu canal no <a href=\"https:\/\/www.youtube.com\/channel\/UCeBRAO_LLrUdSrOXIywjzRA\" target=\"_blank\" rel=\"noopener noreferrer\">Youtube<\/a> e curta minha p\u00e1gina no <a class=\"external-link wpel-icon-left\" href=\"https:\/\/www.facebook.com\/FabricioLimaSolucoesemBancodeDados\/\" target=\"_blank\" rel=\"nofollow external noopener noreferrer\" data-wpel-link=\"external\">Facebook<\/a> para receber Dicas de Leituras, V\u00eddeos e Eventos sobre SQL Server.<\/p>\n<p>At\u00e9 a pr\u00f3xima.<\/p>\n<p>Fabr\u00edcio Lima<\/p>\n<p>Microsoft Data Platform MVP<\/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 o script de mais um alerta para nos ajudar na Administra\u00e7\u00e3o do nosso SQL Server. Esse alerta \u00e9 muito \u00fatil no dia a dia. Ele vai monitorar os famosos &#8220;Locks&#8221; que acontecem no nosso banco\u00a0de dados.\u00a0Caso aconte\u00e7a algum Lock com um\u00a0processo que esteja executando a mais de 2 [&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,6,1,33,1187],"tags":[1260,1414,1513,1515,1429,1514,1262,63,1257,33],"class_list":["post-7756","post","type-post","status-publish","format-standard","hentry","category-administracao-de-bd","category-casos-do-dia-a-dia","category-sem-categoria","category-sql-server","category-treinamento-sql-server-2","tag-alerta","tag-alerta-bases-de-dados","tag-alerta-processo-bloqueado","tag-deadlock","tag-lentidao-sql-server","tag-lock","tag-monitoramento-sql-server","tag-performance","tag-performance-sql-server","tag-sql-server"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/7756","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=7756"}],"version-history":[{"count":0,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/7756\/revisions"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=7756"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=7756"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=7756"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}