{"id":17732,"date":"2022-07-31T10:40:35","date_gmt":"2022-07-31T13:40:35","guid":{"rendered":"https:\/\/www.fabriciolima.net\/?p=17732"},"modified":"2022-07-31T10:40:35","modified_gmt":"2022-07-31T13:40:35","slug":"resposta-do-desafio-o-que-pode-causar-um-comportamento-estranho-no-waitfor-delay","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2022\/07\/31\/resposta-do-desafio-o-que-pode-causar-um-comportamento-estranho-no-waitfor-delay\/","title":{"rendered":"[Resposta do Desafio] O que pode causar um comportamento estranho no waitfor delay?"},"content":{"rendered":"<p>Fala Pessoal,<\/p>\n<p>Passando aqui para compartilhar a resposta de um desafio que fiz no Linkedin.<\/p>\n<p>Se ainda n\u00e3o me segue por l\u00e1, antes tarde que mais tarde:<\/p>\n<ul>\n<li>Linkedin:\u00a0<a class=\"external-link wpel-icon-left\" href=\"https:\/\/www.linkedin.com\/in\/fabriciofrancalima\/\" target=\"_blank\" rel=\"noopener noreferrer external nofollow\" data-wpel-link=\"external\">https:\/\/www.linkedin.com\/in\/fabriciofrancalima\/<\/a><\/li>\n<\/ul>\n<h5><\/h5>\n<h5>Desafio: O que pode causar esse comportamento abaixo?<\/h5>\n<p>Voc\u00ea executa um waitfor delay de 1 minuto e faz um datediff para salvar o tempo da execu\u00e7\u00e3o.<\/p>\n<p>O SQL Server vai l\u00e1 e grava 2 minutos e 5 segundos no resultado. kkkk<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-17741 aligncenter\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/datediff-2-min-300x114.jpg\" alt=\"\" width=\"603\" height=\"229\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/datediff-2-min-300x114.jpg 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/datediff-2-min-1024x389.jpg 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/datediff-2-min-768x292.jpg 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/datediff-2-min-700x266.jpg 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/datediff-2-min-410x156.jpg 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/datediff-2-min-100x38.jpg 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/datediff-2-min-275x104.jpg 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/datediff-2-min-20x8.jpg 20w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/datediff-2-min.jpg 1096w\" sizes=\"auto, (max-width: 603px) 100vw, 603px\" \/><\/p>\n<p>O\u00a0<a href=\"https:\/\/www.linkedin.com\/in\/ACoAAAn-URQBF4mieE0FfAV_FV8IcfFOBsrQAyI\" data-attribute-index=\"0\" data-entity-hovercard-id=\"urn:li:fs_miniProfile:ACoAAAn-URQBF4mieE0FfAV_FV8IcfFOBsrQAyI\" data-entity-type=\"MINI_PROFILE\">Rodrigo Ribeiro Gomes<\/a>\u00a0desvendou o mist\u00e9rio e achou duas situa\u00e7\u00f5es que causam isso.<\/p>\n<p>C\u00f3digo:<\/p>\n<p>create table testWaitfor(ts datetime, e datetime, dur int)<br \/>\ndeclare @s datetime = getdate();<br \/>\nwaitfor delay &#8217;00:01:00&#8242;;<br \/>\ninsert into testWaitfor values(@s,getdate(),datediff(MS,@s,getdate()))<br \/>\nselect * from testWaitfor<\/p>\n<p>*Ninguem fez update na tabela para ficar com esse result<br \/>\n**somente essa query rodando no ambiente (sem concorr\u00eancia e recursos sobrando)<\/p>\n<p>&nbsp;<\/p>\n<h5>Resposta do Desafio (Essa ningu\u00e9m acertou)<\/h5>\n<p>Como falei, o Rodrigo encontrou duas respostas para esse comportamento.<\/p>\n<p><strong>1 &#8211; Altera\u00e7\u00e3o da Data do Servidor onde est\u00e1 o SQL Server<\/strong><\/p>\n<p>Essa \u00e9 a respota mais simples e que muita gente conseguiu acertar.<\/p>\n<p>Se voc\u00ea inicia o waitfor delay e muda o hor\u00e1rio do servidor, na segunda execu\u00e7\u00e3o do getdate() ter\u00e1 o valor do hor\u00e1rio que colocou. Dessa forma, seu waitfor delay ir\u00e1 gerar um valor diferente de 1 minuto.<\/p>\n<p>No meu caso, n\u00e3o era esse porque n\u00e3o alterei nada e mesmo assim tive esse comportamento.<\/p>\n<p><strong>2 &#8211; Suspender seu computador<\/strong><\/p>\n<p>=)<\/p>\n<p>Mano&#8230; Era muito dif\u00edcil adivinhar que isso acontecia.<\/p>\n<p>No meu caso e do Rodrigo foi mais f\u00e1cil porque tivemos algumas pistas.<\/p>\n<p>Eu acabava meu trabalho as 22h e suspendia minha m\u00e1quina para dormir. No outro dia de manha ligava ela novamente para voltar a trabalhar.<\/p>\n<p><strong>O PowerAlerts (quem n\u00e3o usar \u00e9 louco!)<\/strong> agora vem com um log para monitorar o tempo de execu\u00e7\u00e3o das procedures dele.<\/p>\n<p>Quando fui ver, tinha procedure demorando 13 horas.<\/p>\n<p>Falei, WHAT !!???<\/p>\n<p>Gastei um temp\u00e3o olhando a proc&#8230;.<\/p>\n<p>Mas a\u00ed percebendo o hor\u00e1rio que batia quando eu ia dormir e quanto voltava, ficou mais f\u00e1cil associar a suspens\u00e3o do computador.<\/p>\n<p>Vou fazer um teste aqui agora para voc\u00eas:<\/p>\n<p><strong>Passo 1 &#8211; Executar esse Script<\/strong><\/p>\n<p>CREATE table testWaitfor(ts datetime, e datetime, dur int)<br \/>\ndeclare @s datetime = getdate();<br \/>\nwaitfor delay &#8217;00:01:00&#8242;;<br \/>\ninsert into testWaitfor values(@s,getdate(),datediff(MS,@s,getdate()))<br \/>\nselect * from testWaitfor<\/p>\n<p><strong>Passo 2 &#8211; Suspenda seu PC e aguarde por mais de 1 minuto para ligar novamente<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-17738 aligncenter\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/suspender-PC.jpg\" alt=\"\" width=\"282\" height=\"168\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/suspender-PC.jpg 282w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/suspender-PC-100x60.jpg 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/suspender-PC-275x164.jpg 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/suspender-PC-20x12.jpg 20w\" sizes=\"auto, (max-width: 282px) 100vw, 282px\" \/><\/p>\n<p><strong>Passo 3 &#8211; Ap\u00f3s ligar o PC, confira na tabela o Log de execu\u00e7\u00e3o do waitfor delay<\/strong><\/p>\n<p>select * from testWaitfor<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-17739 aligncenter\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/DATEDIFF-3-minutos-300x75.jpg\" alt=\"\" width=\"588\" height=\"147\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/DATEDIFF-3-minutos-300x75.jpg 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/DATEDIFF-3-minutos-768x191.jpg 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/DATEDIFF-3-minutos-700x174.jpg 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/DATEDIFF-3-minutos-410x102.jpg 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/DATEDIFF-3-minutos-100x25.jpg 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/DATEDIFF-3-minutos-275x68.jpg 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/DATEDIFF-3-minutos-20x5.jpg 20w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2022\/07\/DATEDIFF-3-minutos.jpg 781w\" sizes=\"auto, (max-width: 588px) 100vw, 588px\" \/><\/p>\n<p>Que doido n\u00e9!<\/p>\n<p>Testem ai e me falem se tiveram o mesmo comportamento.<\/p>\n<p>O SQL continua a execu\u00e7\u00e3o do meu processo ap\u00f3s suspender o PC. Ele n\u00e3o mata a conex\u00e3o como eu achava que seria o comportamento normal.<\/p>\n<p>Claro que ningu\u00e9m vai suspender um Servidor de produ\u00e7\u00e3o.<\/p>\n<p>Mas esse \u00e9 um comportamento inusitado que percebi pela primeira vez nos meus 16 anos de SQL Server.<\/p>\n<p>Curiosidades assim s\u00e3o sempre legais de descobrir.<\/p>\n<p>Valeu Pessoal.<\/p>\n<p>Me siga la no Linkedin que quando aparecer umas coisas doidas assim, posto l\u00e1.<\/p>\n<p>Siga o Rodrigo tamb\u00e9m que ele tem mais desafios ainda para contar para voces.<\/p>\n<p>Inclusive esse recente:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.linkedin.com\/posts\/rodrigoribeirogomes_sqlserver-powertuning-tsql-activity-6958920720542281728-DM9G?utm_source=linkedin_share&amp;utm_medium=member_desktop_web\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.linkedin.com\/posts\/rodrigoribeirogomes_sqlserver-powertuning-tsql-activity-6958920720542281728-DM9G?utm_source=linkedin_share&amp;utm_medium=member_desktop_web<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Abra\u00e7os,<\/p>\n<p>Fabr\u00edcio Lima<\/p>\n<p>CEO Power Tuning<\/p>\n<p>Microsoft Data Platform MVP<\/p>\n<p>Instagram:\u00a0<a class=\"external-link wpel-icon-left\" href=\"https:\/\/www.instagram.com\/fabriciofrancalima\/\" target=\"_blank\" rel=\"noopener external noreferrer nofollow\" data-wpel-link=\"external\">@fabriciofrancalima<\/a><\/p>\n<p>Linkedin:\u00a0<a class=\"external-link wpel-icon-left\" href=\"https:\/\/www.linkedin.com\/in\/fabriciofrancalima\/\" target=\"_blank\" rel=\"noopener noreferrer external nofollow\" data-wpel-link=\"external\">https:\/\/www.linkedin.com\/in\/fabriciofrancalima\/<\/a><\/p>\n<p>Consultoria:\u00a0comercial@powertuning.com.br<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fala Pessoal, Passando aqui para compartilhar a resposta de um desafio que fiz no Linkedin. Se ainda n\u00e3o me segue por l\u00e1, antes tarde que mais tarde: Linkedin:\u00a0https:\/\/www.linkedin.com\/in\/fabriciofrancalima\/ Desafio: O que pode causar esse comportamento abaixo? Voc\u00ea executa um waitfor delay de 1 minuto e faz um datediff para salvar o tempo da execu\u00e7\u00e3o. O [&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,33],"tags":[1893,23,1895,1899,1891,1900,33,1894,1892,1896,1897,1898],"class_list":["post-17732","post","type-post","status-publish","format-standard","hentry","category-administracao-de-bd","category-sql-server","tag-charadas-sql-server","tag-dba","tag-desafio-dba","tag-desafio-do-linkedin","tag-desafio-sql-server","tag-linkedin","tag-sql-server","tag-teste-dba","tag-teste-sql-server","tag-waitfor-delay","tag-waitfor-delay-errado","tag-wrong-waitfor-delay"],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":1457,"url":"https:\/\/fabriciolima.net\/blog\/2012\/05\/23\/database-mirroring-testes-operation-mode-high-performance-parte-1\/","url_meta":{"origin":17732,"position":0},"title":"Database Mirroring &#8211; Operation Mode High Performance &#8211; Parte 1","author":"Fabr\u00edcio Lima","date":"23 de maio de 2012","format":false,"excerpt":"Fala Pessoal, Nesse post come\u00e7o a testar como o Database Mirroring se comporta configurado com o Operation mode High Performance. Nome das inst\u00e2ncias participantes dos testes: 1 - Instancia5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - Servidor Principal, referenciado no texto por Servidor A 2 - Instancia5\\INST1\u00a0\u00a0\u00a0 - Servidor Mirror, referenciado no texto por Servidor B\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\/2012\/03\/DBMirror_1.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1520,"url":"https:\/\/fabriciolima.net\/blog\/2012\/06\/27\/database-mirroring-operation-mode-high-safety-without-failover-parte-1\/","url_meta":{"origin":17732,"position":1},"title":"Database Mirroring &#8211; Operation Mode High Safety Without Failover &#8211; Parte 1","author":"Fabr\u00edcio Lima","date":"27 de junho de 2012","format":false,"excerpt":"Fala Pessoal, Nesse post come\u00e7o a testar como o Database Mirroring se comporta configurado com o Operation mode High Safety Without Automatic Failover. Inst\u00e2ncias participantes dos testes: 1 - Instancia5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 - Servidor Principal, referenciado no texto por Servidor A 2 - Instancia5\\INST1\u00a0\u00a0\u00a0 - Servidor Mirror, referenciado no texto por Servidor\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\/2012\/05\/Figura1.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":4649,"url":"https:\/\/fabriciolima.net\/blog\/2016\/06\/22\/queries-do-dia-a-dia-monitorando-contadores-de-forma-simples-via-dmv\/","url_meta":{"origin":17732,"position":2},"title":"Queries do Dia a Dia &#8211; Monitorando Contadores de forma simples via DMV","author":"Fabr\u00edcio Lima","date":"22 de junho de 2016","format":false,"excerpt":"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\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\/2016\/04\/POSTContadoresPerformance.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1594,"url":"https:\/\/fabriciolima.net\/blog\/2012\/07\/18\/database-mirroring-operation-mode-high-safety-without-failover-parte-3\/","url_meta":{"origin":17732,"position":3},"title":"Database Mirroring &#8211; Operation Mode High Safety Without Failover &#8211; Parte 3","author":"Fabr\u00edcio Lima","date":"18 de julho de 2012","format":false,"excerpt":"Fala Pessoal, Neste post continuarei com o teste do Operation Mode High Safety Without Automatic Failover. Caso ainda n\u00e3o tenham visto os posts anteriores, sugiro que os leia antes de continuar: Database Mirroring \u2013 Operation Mode High Safety Without Failover \u2013 Parte 1 Database Mirroring \u2013 Operation Mode High Safety\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\/2012\/07\/Figura-11.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":8450,"url":"https:\/\/fabriciolima.net\/blog\/2017\/12\/18\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-2\/","url_meta":{"origin":17732,"position":4},"title":"Melhorando a Performance de Consultas no Totvs Protheus &#8211; Parte 2","author":"Fabr\u00edcio Lima","date":"18 de dezembro de 2017","format":false,"excerpt":"Fala pessoal, Estamos aqui para o segundo post da nossa s\u00e9rie que tem um epis\u00f3dio novo a cada semana. Antes de lerem esse post, sugiro verem o anterior para que sigam a sequ\u00eancia correta da s\u00e9rie: Melhorando a Performance de Consultas no Totvs Protheus \u2013 Parte 1 Agora que j\u00e1\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\/12\/NetFlix2.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/NetFlix2.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/NetFlix2.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":294,"url":"https:\/\/fabriciolima.net\/blog\/2010\/06\/05\/passo-a-passo-para-encontrar-as-querys-mais-demoradas-do-banco-de-dados-parte-2\/","url_meta":{"origin":17732,"position":5},"title":"Passo a passo para encontrar as querys mais demoradas do Banco de Dados &#8211; Parte 2","author":"Fabr\u00edcio Lima","date":"5 de junho de 2010","format":false,"excerpt":"Continuando o artigo Passo a passo para encontrar as querys mais demoradas do Banco de Dados - Parte 1. Agora que o trace j\u00e1 foi testado e vimos que ele realmente funciona, criaremos um job para enviar o trace para a tabela de log e automatizar todo o processo. Voc\u00ea\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":"Step1_thumb1","src":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2010\/10\/step1_thumb15b45d.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/17732","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=17732"}],"version-history":[{"count":3,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/17732\/revisions"}],"predecessor-version":[{"id":17743,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/17732\/revisions\/17743"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=17732"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=17732"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=17732"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}