{"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":""},"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"],"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}]}}