{"id":6711,"date":"2016-11-07T09:53:51","date_gmt":"2016-11-07T11:53:51","guid":{"rendered":"http:\/\/www.fabriciolima.net\/?p=6711"},"modified":"2016-11-07T11:11:54","modified_gmt":"2016-11-07T13:11:54","slug":"casos-do-dia-a-dia-monitorando-o-tamanho-do-arquivo-mdf-do-tempdb-e-sua-version-store","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2016\/11\/07\/casos-do-dia-a-dia-monitorando-o-tamanho-do-arquivo-mdf-do-tempdb-e-sua-version-store\/","title":{"rendered":"Casos do Dia a Dia: Monitorando o tamanho do arquivo MDF do Tempdb e sua Version Store"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-6739 alignleft\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/tempdb.png\" alt=\"tempdb\" width=\"256\" height=\"256\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/tempdb.png 256w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/tempdb-150x150.png 150w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/tempdb-100x100.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/tempdb-20x20.png 20w\" sizes=\"auto, (max-width: 256px) 100vw, 256px\" \/><\/p>\n<p>Ol\u00e1 Pessoal,<\/p>\n<p>Em um dos meus clientes onde realizo um suporte e monitoramento mensal, tenho um problema de crescimento do TEMPDB que pode levar at\u00e9 a uma falta de espa\u00e7o em disco do servidor.<\/p>\n<p>Esse cliente tem habilitada na base de produ\u00e7\u00e3o a op\u00e7\u00e3o Read Committed Snapshot. Voc\u00ea pode conferir isso com a query abaixo:<\/p>\n<p>select name,is_read_committed_snapshot_on<br \/>\nfrom sys.databases<br \/>\nwhere is_read_committed_snapshot_on = 1<\/p>\n<p>Com essa op\u00e7\u00e3o habilitada na base o SQL Server mant\u00e9m um versionamento de dados no tempdb para reduzir os locks que ocorrem com consultas. As consultas v\u00e3o retornar o \u00faltimo dado commitado se algu\u00e9m tiver alterando esse dado.<\/p>\n<p>O problema acontece quando a aplica\u00e7\u00e3o abre algumas conex\u00f5es que seguram o tempdb, que usa esse versionamento, e n\u00e3o fecha adequadamente essas conex\u00f5es. Com isso, o espa\u00e7o do tempdb utilizado pela version store vira uma bola de neve e cresce sem parar.<\/p>\n<p>Enquanto o pessoal da aplica\u00e7\u00e3o n\u00e3o resolve o problema, esse alerta me ajuda a identificar quando esse problema acontece e j\u00e1 me indica as conex\u00f5es abertas a mais de uma hora para que no pr\u00f3prio e-mail eu j\u00e1 consiga identificar quais conex\u00f5es matar.<\/p>\n<p>Segue abaixo o e-mail enviado pelo Alerta:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6716\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb.jpg\" alt=\"postalertaversionstoretempdb\" width=\"1337\" height=\"536\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb.jpg 1337w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb-300x120.jpg 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb-1024x411.jpg 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb-768x308.jpg 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb-700x281.jpg 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb-410x164.jpg 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb-100x40.jpg 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb-275x110.jpg 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb-20x8.jpg 20w\" sizes=\"auto, (max-width: 1337px) 100vw, 1337px\" \/><\/p>\n<p>Nesse e-mail posso ver que o TEMPDB tem<strong> 86 GB<\/strong> de tamanho, sendo <strong>25 GB<\/strong> ainda livre e <strong>60 GB<\/strong> utilizado s\u00f3 pela parte da Version Store.<\/p>\n<p>Uma op\u00e7\u00e3o seria matar o processo automaticamente, mas ainda n\u00e3o precisei chegar nesse n\u00edvel.<\/p>\n<p>Ap\u00f3s finalizar essa conex\u00e3o que estava segurando o TEMPDB, pouco tempo depois j\u00e1 recebo o CLEAR abaixo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6715\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb_CLEAR.jpg\" alt=\"postalertaversionstoretempdb_clear\" width=\"1338\" height=\"337\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb_CLEAR.jpg 1338w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb_CLEAR-300x76.jpg 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb_CLEAR-1024x258.jpg 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb_CLEAR-768x193.jpg 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb_CLEAR-700x176.jpg 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb_CLEAR-410x103.jpg 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb_CLEAR-100x25.jpg 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb_CLEAR-275x69.jpg 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/PostAlertaVersionStoreTempdb_CLEAR-20x5.jpg 20w\" sizes=\"auto, (max-width: 1338px) 100vw, 1338px\" \/><\/p>\n<p>Agora podemos ver que o espa\u00e7o n\u00e3o alocado do TEMPDB voltou para <strong>85 GB<\/strong> e que a version Store agora est\u00e1 usando apenas <strong>697 MB<\/strong>.<\/p>\n<p>Segue o script para criar esse alerta: <a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/11\/stpAlerta_Tamanho_MDF_Tempdb_.txt\" target=\"_blank\">Download Script<\/a><\/p>\n<p>Esse script vai criar uma tabela chamada <em><strong>Alerta<\/strong> <\/em>para controlar o Alerta e o Clear.<\/p>\n<p>E tamb\u00e9m vai criar uma procedure chamada <em><strong>stpAlerta_Tamanho_MDF_Tempdb<\/strong><\/em> que far\u00e1 a valida\u00e7\u00e3o. Voc\u00ea deve colocar essa procedure em um job para rodar a cada 5 minutos pelo menos.<\/p>\n<p>Voc\u00ea tamb\u00e9m ter\u00e1 que fazer uma altera\u00e7\u00e3o logo no in\u00edcio da proc, colocando o seu profile e os e-mails que v\u00e3o receber os alertas separados por ponto e v\u00edrgula:<\/p>\n<p><em>&#8221;\u00a0 set @ProfileSQL = &#8216;Seu Profile&#8217;\u00a0 \u00a0\u00a0 set @Emails = &#8216;Seu Email;Outro Email&#8217;\u00a0 &#8220;<\/em><\/p>\n<p><span style=\"color: #ff0000;\">OBS:<\/span> Para quem usa o <strong>SQL Server 2008 R2<\/strong> ou inferior, voc\u00ea n\u00e3o ter\u00e1 a informa\u00e7\u00e3o de <em><strong>O<span class=\"crayon-i\">pen_transaction_Count<\/span><\/strong><\/em>, ent\u00e3o ter\u00e1 que alterar essa query abaixo no c\u00f3digo original:<\/p>\n<pre class=\"lang:tsql decode:true \">INSERT INTO #Alerta_Tamanho_MDF_Tempdb_Conexoes\r\n SELECT session_id, convert(varchar(20),login_time,120) AS login_time, login_name, host_name, 'SQL Server 2012 ou superior' open_transaction_Count, status, cpu_time,\r\n   total_elapsed_time, reads, writes, logical_reads\r\n FROM sys.dm_exec_sessions\r\n WHERE session_id &gt; 50\r\n   --and open_transaction_Count &gt; 0\r\n   and dateadd(hour,-@Tempo_Conexoes_Hs,getdate()) &gt; login_time<\/pre>\n<p>Isso n\u00e3o vai te atrapalhar a identificar o problema no tempdb, voc\u00ea s\u00f3 ter\u00e1 uma informa\u00e7\u00e3o a menos no e-mail.<\/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>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> tenho outros alertas para te ajudar no monitoramento do seu SQL Server.<\/p>\n<p>At\u00e9 a pr\u00f3xima.<\/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, Em um dos meus clientes onde realizo um suporte e monitoramento mensal, tenho um problema de crescimento do TEMPDB que pode levar at\u00e9 a uma falta de espa\u00e7o em disco do servidor. Esse cliente tem habilitada na base de produ\u00e7\u00e3o a op\u00e7\u00e3o Read Committed Snapshot. Voc\u00ea pode conferir isso com a query abaixo: [&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,942,33,280],"tags":[1371,1372,1374,1378,1376,1380,1379,1375,287,1373,1377],"class_list":["post-6711","post","type-post","status-publish","format-standard","hentry","category-administracao-de-bd","category-casos-do-dia-a-dia","category-consultoria-sql-server","category-sql-server","category-virtual-pass-br","tag-alerta-sql","tag-alerta-sql-server","tag-arquivo-tempdb-grande","tag-crescimento-tempdb","tag-is_read_committed_snapshot_on","tag-monitoramento-crescimento-tempdb","tag-monitoramento-tempdb","tag-monitorar-tempdb","tag-tempdb","tag-tempdb-espaco","tag-version-store"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/6711","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=6711"}],"version-history":[{"count":0,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/6711\/revisions"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=6711"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=6711"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=6711"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}