{"id":3200,"date":"2015-01-15T07:35:27","date_gmt":"2015-01-15T09:35:27","guid":{"rendered":"http:\/\/www.fabriciolima.net\/blog\/?p=3200"},"modified":"2016-07-23T22:39:37","modified_gmt":"2016-07-24T01:39:37","slug":"casos-do-dia-a-dia-transaction-log-nao-diminui-nivel-hard","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2015\/01\/15\/casos-do-dia-a-dia-transaction-log-nao-diminui-nivel-hard\/","title":{"rendered":"Casos do Dia a Dia: Transaction Log n\u00e3o diminui &#8211; N\u00edvel Hard"},"content":{"rendered":"<p>Ol\u00e1 Pessoal,<\/p>\n<p>Recebi um alerta de LOG FULL em um dos clientes que realizo um monitoramento di\u00e1rio do BD com minha <a href=\"https:\/\/www.fabriciolima.net\/blog\/consultoria-remota\/\" target=\"_blank\">Consultoria SQL Server<\/a>.<\/p>\n<p>At\u00e9 a\u00ed, nada de mais. Seria um atendimento de rotina onde provavelmente o Log n\u00e3o era limpo devido a algum problema no Backup de Log ou alguma transa\u00e7\u00e3o que estaria segurando o arquivo de Log e n\u00e3o deixando ele ser limpo pelo backup.<\/p>\n<p>O Log da base estava com 800 MB e com 80% de utiliza\u00e7\u00e3o.<\/p>\n<p>A primeira coisa que fiz foi validar o backup de log que era executado a cada 10 minutos. O job de backup do log estava executando com sucesso para essa database, mas o log n\u00e3o estava sendo limpo.<\/p>\n<p>O segundo passo foi analisar se tinha algum processo segurando o log desse banco de dados. No momento que estava atuando, o servidor estava praticamente parado. N\u00e3o tinha nenhuma transa\u00e7\u00e3o ativa na base, nenhum lock no banco, nenhum processo em execu\u00e7\u00e3o e as conex\u00f5es que existiam na base estavam todas como sleeping.<\/p>\n<p>Matei algumas conex\u00f5es que pareciam suspeitas, mas em seguida eu rodava o backup de log e nada do log limpar.<\/p>\n<p>Usei a fun\u00e7\u00e3o fn_dblog para ler o Transaction Log dessa base e s\u00f3 eram retornadas 12 linhas. Como \u00e9 poss\u00edvel um log ter mais de 500 MB de utiliza\u00e7\u00e3o e s\u00f3 ter 12 linhas???<\/p>\n<p>Como eu disse no t\u00edtulo desse post, esse problema no Log era N\u00edvel Hard!<\/p>\n<p>Coloquei meu Networking de SQL Server para funcionar e, ap\u00f3s algumas sugest\u00f5es de amigos, o Dem\u00e9trio (<a href=\"https:\/\/demetriosilva.wordpress.com\/\" target=\"_blank\">Blog<\/a>) me passou um artigo do Sr. Paul Randal que quando l\u00ed, matou a charada na hora!!!<\/p>\n<p>Paul Randal \u00e9 o cara!!! Meu Networking tamb\u00e9m \u00e9 o cara!!!<\/p>\n<p>Segue o artigo:<br \/>\n<a href=\"http:\/\/www.sqlskills.com\/blogs\/paul\/why-is-log_reuse_wait_desc-saying-log_backup-after-doing-a-log-backup\/\" target=\"_blank\">http:\/\/www.sqlskills.com\/blogs\/paul\/why-is-log_reuse_wait_desc-saying-log_backup-after-doing-a-log-backup\/<\/a><\/p>\n<p>Seguem as partes do artigo que mataram a charada:<\/p>\n<p><em>If you have a transaction log that is not growing, and you\u2019re taking regular log backups, but thelog_reuse_wait_desc\u00a0remains\u00a0LOG_BACKUP,\u00a0this is because zero VLFs were cleared when the previous log backup was performed.<\/em><\/p>\n<p><em>How can that happen?<\/em><br \/>\n<em> Imagine a database where there\u2019s very little insert\/update\/delete\/DDL activity, so in between your regular log backups there are only a few log records generated, and they\u2019re all in the same VLF. The next log backup runs, backing up those few log records, but it can\u2019t clear the current VLF, so can\u2019t clear\u00a0log_reuse_wait_desc. As soon as there are enough changes in the database that the current VLF fills up and the next VLF is activated, the next log backup should be able to clear the previous VLF and then thelog_reuse_wait_desc\u00a0will revert to\u00a0NOTHING. Until the next log backup occurs and isn\u2019t able to clear the current VLF, in which case it will go back to\u00a0LOG_BACKUP\u00a0again.<\/em><\/p>\n<p>Olhando os VLFs do arquivo de log dessa base com o comando DBCC LOGINFO, verifiquei que um dos VLFs estava muito grande. Como o ambiente tinha pouca atualiza\u00e7\u00e3o e esse VLF era grande, o SQL n\u00e3o estava utilizando outros VLFs e por isso que o backup do Log n\u00e3o estava conseguindo limpar nenhum VLF, como o Paul Randal explicou no artigo dele.<\/p>\n<p>O que fazer ent\u00e3o?<\/p>\n<p>Agora o problema mudou para o modo Easy.<\/p>\n<p>Para resolver o problema, criei uma tabela nessa base e fiz um loop de insert para crescer o log.<\/p>\n<p>Isso mesmo, gerei registros de log para poder limpar esse log depois. Estranho n\u00e9!??<\/p>\n<p>Ap\u00f3s os inserts, o status de mais 2 VLFs foram alterados para o valor 2 conforme figura abaixo (A \u2013 como estava antes do insert | D \u2013 Os status alterados depois do insert).<\/p>\n<p>Status VLF:<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2015\/01\/ArtigoVLF.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3201 aligncenter\" title=\"ArtigoVLF\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2015\/01\/ArtigoVLF.png\" alt=\"\" width=\"413\" height=\"206\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2015\/01\/ArtigoVLF.png 413w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2015\/01\/ArtigoVLF-300x150.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2015\/01\/ArtigoVLF-410x205.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2015\/01\/ArtigoVLF-100x50.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2015\/01\/ArtigoVLF-275x137.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2015\/01\/ArtigoVLF-20x10.png 20w\" sizes=\"auto, (max-width: 413px) 100vw, 413px\" \/><\/a><\/p>\n<p>Feito isso, rodei novamente o job de backup do log e a utiliza\u00e7\u00e3o do log baixou para 1%. O SQL Server manteve o log ativo em outro VLF e conseguiu limpar o log do VLF gigante liberando o espa\u00e7o utilizado no transaction log.<\/p>\n<p>Eu estava na linha de que tinha algum processo perdido que n\u00e3o estava encontrando e estava segurando o log. Mas a solu\u00e7\u00e3o estava na dire\u00e7\u00e3o contr\u00e1ria.<\/p>\n<p>Para evitar que esse problema volte a acontecer, tive que balancear os VLFs desse Transaction Log.<\/p>\n<p>Segue abaixo um artigo excelente para te ajuda a balancear os VLFs. Nele tamb\u00e9m tem links para outros artigos para que voc\u00ea possa entender tudo sobre VLF:<\/p>\n<p><a href=\"http:\/\/edvaldocastro.com\/vlf_control\/\" target=\"_blank\">http:\/\/edvaldocastro.com\/vlf_control\/<\/a><\/p>\n<p>Como eu sempre digo, vivendo e aprendendo.<\/p>\n<p>Fica de aprendizado para mim e agora tamb\u00e9m para voc\u00eas por meio desse Blog.<\/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>Confira mais experi\u00eancias do Dia a Dia de um 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, Recebi um alerta de LOG FULL em um dos clientes que realizo um monitoramento di\u00e1rio do BD com minha Consultoria SQL Server. At\u00e9 a\u00ed, nada de mais. Seria um atendimento de rotina onde provavelmente o Log n\u00e3o era limpo devido a algum problema no Backup de Log ou alguma transa\u00e7\u00e3o que estaria segurando [&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":"","jetpack_post_was_ever_published":false},"categories":[3,6,33,280],"tags":[118,1176,367,1178,1173,1104,960,1171,1167,1175,1169,116,1177,1168,1172,1174,1170,113],"class_list":["post-3200","post","type-post","status-publish","format-standard","hentry","category-administracao-de-bd","category-casos-do-dia-a-dia","category-sql-server","category-virtual-pass-br","tag-backup-log","tag-database-transaction-log","tag-fn_dblog","tag-full-transaction-log","tag-log-database","tag-log-full","tag-log-sql-server","tag-log_backup","tag-problema-transaction-log","tag-sql-log","tag-tamanho-backup-log","tag-transaction-log","tag-transaction-log-file","tag-transaction-log-nao-diminui","tag-transaction-log-problem","tag-transaction-log-sql","tag-virtual-log-file","tag-vlf"],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":194,"url":"https:\/\/fabriciolima.net\/blog\/2010\/12\/19\/casos-do-dia-a-dia-voce-sabia-que-um-arquivo-de-log-do-sql-server-se-fragmenta\/","url_meta":{"origin":3200,"position":0},"title":"Casos do Dia a Dia &#8211; Voc\u00ea sabia que um arquivo de Log do SQL Server se fragmenta?","author":"Fabr\u00edcio Lima","date":"19 de dezembro de 2010","format":false,"excerpt":"Fala Pessoal, Vou ser sincero com voc\u00eas, at\u00e9 pouco tempo eu n\u00e3o tinha a menor id\u00e9ia que um arquivo de log do SQL Server se fragmentava. Nunca tinha lido\u00a0sobre o assunto. Entretanto, para isso que servem os mais 100 Blogs de SQL Server cadastrados no meu google reader e os\u2026","rel":"","context":"Em &quot;Administra\u00e7\u00e3o de Banco de Dados&quot;","block_context":{"text":"Administra\u00e7\u00e3o de Banco de Dados","link":"https:\/\/fabriciolima.net\/blog\/category\/sql-server\/administracao-de-bd\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2010\/12\/dbcc-loginfo.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":6981,"url":"https:\/\/fabriciolima.net\/blog\/2017\/01\/12\/alerta-monitorando-o-tamanho-do-transaction-log-no-sql-server\/","url_meta":{"origin":3200,"position":1},"title":"Alerta: Monitorando o tamanho do Transaction Log no SQL Server","author":"Fabr\u00edcio Lima","date":"12 de janeiro de 2017","format":false,"excerpt":"Ol\u00e1 Pessoal, Hoje vou compartilhar com voc\u00eas um script pronto para voc\u00ea monitorar o Transaction Log do seu SQL Server. Cen\u00e1rio real do Dia a Dia: J\u00e1 perdi as contas de quantos clientes j\u00e1 me procuraram com uma base de dados parada e com uma mensagem de Transaction Log FULL.\u2026","rel":"","context":"Em &quot;Administra\u00e7\u00e3o de Banco de Dados&quot;","block_context":{"text":"Administra\u00e7\u00e3o de Banco de Dados","link":"https:\/\/fabriciolima.net\/blog\/category\/sql-server\/administracao-de-bd\/"},"img":{"alt_text":"alertalogfull","src":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/01\/AlertaLogFULL.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/01\/AlertaLogFULL.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/01\/AlertaLogFULL.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/01\/AlertaLogFULL.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":9187,"url":"https:\/\/fabriciolima.net\/blog\/2018\/07\/17\/azure-sql-database-quanto-posso-usar-de-transaction-log-e-ilimitado\/","url_meta":{"origin":3200,"position":2},"title":"Azure SQL Database &#8211; Quanto posso usar de Transaction Log? \u00c9 ilimitado?","author":"Fabr\u00edcio Lima","date":"17 de julho de 2018","format":false,"excerpt":"Fala Pessoal, Continuando os posts sobre Azure SQL Database, dessa vez vamos falar sobre um erro de Log Full que consegui gerar em uma base no Azure. O Transaction Log de uma base no azure funciona da mesma forma que em uma inst\u00e2ncia On-Premise. Como no azure n\u00e3o conseguimos utilizar\u2026","rel":"","context":"Em &quot;Azure SQL Database&quot;","block_context":{"text":"Azure SQL Database","link":"https:\/\/fabriciolima.net\/blog\/category\/azure-sql-database\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/07\/AzureSQLDatabaseFotoE03.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/07\/AzureSQLDatabaseFotoE03.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/07\/AzureSQLDatabaseFotoE03.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":7653,"url":"https:\/\/fabriciolima.net\/blog\/2017\/04\/03\/video-qual-a-diferenca-entre-o-recovery-model-simple-e-o-recovery-model-full\/","url_meta":{"origin":3200,"position":3},"title":"V\u00eddeo: Qual a diferen\u00e7a entre o Recovery Model SIMPLE e o Recovery Model FULL?","author":"Fabr\u00edcio Lima","date":"3 de abril de 2017","format":false,"excerpt":"Fala Pessoal, O objetivo do v\u00eddeo de hoje \u00e9\u00a0mostrar a diferen\u00e7a entre o recovery SIMPLE e o recovery FULL. Essa \u00e9 uma das d\u00favidas mais comuns\u00a0que vejo nos f\u00f3runs, palestras e treinamentos. Principalmente para quem est\u00e1 come\u00e7ando no mundo SQL Server. Segue o v\u00eddeo com a explica\u00e7\u00e3o: https:\/\/www.youtube.com\/watch?v=cXQvhTKOE8o Segue o\u2026","rel":"","context":"Em &quot;Administra\u00e7\u00e3o de Banco de Dados&quot;","block_context":{"text":"Administra\u00e7\u00e3o de Banco de Dados","link":"https:\/\/fabriciolima.net\/blog\/category\/sql-server\/administracao-de-bd\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/RecoverySimpleFull-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/RecoverySimpleFull-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/04\/RecoverySimpleFull-1.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":2836,"url":"https:\/\/fabriciolima.net\/blog\/2014\/03\/06\/o-transaction-log-de-uma-transacao-e-liberado-quando-dou-um-rollback\/","url_meta":{"origin":3200,"position":4},"title":"O Transaction Log de uma transa\u00e7\u00e3o \u00e9 liberado quando dou um rollback?","author":"Fabr\u00edcio Lima","date":"6 de mar\u00e7o de 2014","format":false,"excerpt":"Ol\u00e1 Pessoal, Imagina que voc\u00ea executa um update em milh\u00f5es de linhas no seu banco de dados (com BEGIN TRAN) e v\u00ea o Log crescer v\u00e1rios GBs. Ao concluir a transa\u00e7\u00e3o, voc\u00ea verifica que fez coisa errada e decide dar um rollback. Todo esse log que foi armazenado ser\u00e1 liberado?\u2026","rel":"","context":"Em &quot;Administra\u00e7\u00e3o de Banco de Dados&quot;","block_context":{"text":"Administra\u00e7\u00e3o de Banco de Dados","link":"https:\/\/fabriciolima.net\/blog\/category\/sql-server\/administracao-de-bd\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2014\/03\/ResultTestesLog.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":11647,"url":"https:\/\/fabriciolima.net\/blog\/2020\/02\/29\/monitoramento-no-sql-server-o-que-fazer-quando-receber-um-alerta-de-log-full\/","url_meta":{"origin":3200,"position":5},"title":"Monitoramento no SQL Server &#8211; O que fazer quando receber um alerta de Log FULL?","author":"Fabr\u00edcio Lima","date":"29 de fevereiro de 2020","format":false,"excerpt":"Fala Pessoal, Em Setembro do ano passado liberei uma nova vers\u00e3o dos meus scripts para a cria\u00e7\u00e3o de 40 alertas no SQL Server: https:\/\/www.fabriciolima.net\/blog\/2019\/09\/22\/passo-a-passo-de-como-criar-40-alertas-para-monitorar-seu-sql-server\/ Legal Fabr\u00edcio, mas o que eu fa\u00e7o quando receber esses Alertas? Esse \u00e9 o segundo v\u00eddeo para ajudar a dar essa resposta para voc\u00eas. Nesse v\u00eddeo\u2026","rel":"","context":"Em &quot;Administra\u00e7\u00e3o de Banco de Dados&quot;","block_context":{"text":"Administra\u00e7\u00e3o de Banco de Dados","link":"https:\/\/fabriciolima.net\/blog\/category\/sql-server\/administracao-de-bd\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/img.youtube.com\/vi\/T3C11DLqyus\/0.jpg?resize=350%2C200","width":350,"height":200},"classes":[]}],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/3200","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=3200"}],"version-history":[{"count":0,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/3200\/revisions"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=3200"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=3200"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=3200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}