{"id":2325,"date":"2013-09-03T22:59:33","date_gmt":"2013-09-04T00:59:33","guid":{"rendered":"http:\/\/fabriciolima.net\/blog\/?p=2325"},"modified":"2016-07-23T23:56:02","modified_gmt":"2016-07-24T02:56:02","slug":"casos-do-dia-a-dia-o-que-a-falta-de-paralelismo-pode-fazer-a-uma-query","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2013\/09\/03\/casos-do-dia-a-dia-o-que-a-falta-de-paralelismo-pode-fazer-a-uma-query\/","title":{"rendered":"Casos do Dia a Dia &#8211; O que a falta de paralelismo pode fazer a uma query"},"content":{"rendered":"<p>Ol\u00e1 Pessoal,<\/p>\n<p>Segue mais um caso que aconteceu no meu dia a dia de trabalho.<\/p>\n<p>A equipe de desenvolvimento nos passou uma query onde o resultado de um select era associado a uma vari\u00e1vel dentro do pr\u00f3prio select.<\/p>\n<p>ex: select <strong>@temp = @temp +<\/strong> (case when then end) from [v\u00e1rios joins] where [v\u00e1rias verifica\u00e7\u00f5es]\n<p>Essa query demorava <strong>40 segundos<\/strong>, mas ao executar da forma abaixo (eliminando <strong>o @temp +<\/strong>):<\/p>\n<p>ex: select <strong>@temp =<\/strong> (case when then end) from [v\u00e1rios joins] where [v\u00e1rias verifica\u00e7\u00f5es]\n<p>Ela demorava <strong>ZERO segundos<\/strong>.<\/p>\n<p>Olhando o execution plan, foi poss\u00edvel verificar que a primeira query demorava pois o SQL Server n\u00e3o usava paralelismo, j\u00e1 para a segunda query, usava.<\/p>\n<p>Nossa solu\u00e7\u00e3o de contorno foi passar o resultado do select para uma outra vari\u00e1vel e ap\u00f3s o select somar a vari\u00e1vel original.<\/p>\n<p>ex: select <strong>@temp2 =<\/strong> (case when then end) from [v\u00e1rios joins] where [v\u00e1rias verifica\u00e7\u00f5es]\n<p>set\u00a0 <strong><strong>@temp<\/strong> = <strong>@temp<\/strong> + @temp2<\/strong><\/p>\n<p>Um dos motivos poderia ser porque o SQL Server determinou um custo mais baixo para a primeira query a ponto de n\u00e3o usar paralelismo de acordo com a defini\u00e7\u00e3o do &#8220;cost <em>threshold for parallelism<\/em>&#8220;. Contudo, n\u00e3o consegui evidenciar isso.<\/p>\n<p>Olhando numa vis\u00e3o mais leiga, parece ser uma opera\u00e7\u00e3o simples somar o valor de uma vari\u00e1vel a ela mesma e \u00e9 dif\u00edcil de saber porque o SQL Server tomou caminhos diferentes tornando a query t\u00e3o mais lenta.<\/p>\n<p>A discuss\u00e3o fica aberta nos coment\u00e1rios para quem souber dar mais detalhes do motivo desse problema.<\/p>\n<p>Ambiente: Win Server 2008 R2 e SQL Server 2008 R2 com a atualiza\u00e7\u00e3o mais recente.<\/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, Segue mais um caso que aconteceu no meu dia a dia de trabalho. A equipe de desenvolvimento nos passou uma query onde o resultado de um select era associado a uma vari\u00e1vel dentro do pr\u00f3prio select. ex: select @temp = @temp + (case when then end) from [v\u00e1rios joins] where [v\u00e1rias verifica\u00e7\u00f5es] Essa [&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":[966,967,968,964,965,33],"class_list":["post-2325","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-cost-threshold-for-parallelism","tag-execution-plan","tag-execution-plan-errado","tag-paralelismo","tag-paralelismo-sql-server","tag-sql-server"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/2325","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=2325"}],"version-history":[{"count":0,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/2325\/revisions"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=2325"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=2325"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=2325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}