{"id":1664,"date":"2022-03-30T09:53:37","date_gmt":"2022-03-30T12:53:37","guid":{"rendered":"https:\/\/powertuning.com.br\/?p=1664"},"modified":"2022-05-30T11:58:55","modified_gmt":"2022-05-30T14:58:55","slug":"casos-do-dia-a-dia-uma-query-real-que-saiu-de-9-horas-para-47-segundos","status":"publish","type":"post","link":"https:\/\/powertuning.com.br\/blog\/casos-do-dia-a-dia-uma-query-real-que-saiu-de-9-horas-para-47-segundos\/","title":{"rendered":"Casos do dia a dia &#8211; uma query real que saiu de 9 horas para 47 segundos"},"content":{"rendered":"<p class=\"x_MsoNormal\">No caso de hoje vamos falar sobre um caso que atuamos num cliente que tinha um job que chamava uma SP e o tempo m\u00e9dio de execu\u00e7\u00e3o era de 9h30min.<\/p>\n<p class=\"x_MsoNormal\">Dentro dessa SP executava basicamente uma query como a abaixo:<\/p>\n<pre class=\"lang:tsql decode:true \">SELECT CTE.CAMPO1\r\n\r\n    ,CTE.CAMPO2\r\n\r\n    ,CTE.CAMPO3\r\n\r\n    ,CTE.CAMPO4\r\n\r\n    ,CTE.CAMPO2 - ABS(CTE.CAMPO3 + CTE.CAMPO4) \r\nCAMPO5                                     \r\n\r\nFROM\r\n\r\n       (                                       \r\n\r\n              SELECT dbo.FNCDATA(TAB1.CAMPO1) CAMPO1\r\n\r\n                    ,TAB1.CAMPO2\r\n\r\n                    ,TAB2.CAMPO3\r\n\r\n                    ,TAB2.CAMPO4   \r\n\r\n              FROM LS_SERVIDOR.BASE1.dbo.TABELA1 TAB1(NOLOCK)\r\n\r\n                    INNER JOIN  LS_SERVIDOR.BASE2.dbo.TABELA2 TAB2 (NOLOCK) ON TAB1.CODIGO = TAB2.CODIGO\r\n\r\n              WHERE TAB1.CAMPO1 &gt;= @DT_INI\r\n\r\n    ) CTE                                       \r\n\r\nGROUP BY CTE.CAMPO1\r\n\r\n    ,CTE.CAMPO2\r\n\r\n    ,CTE.CAMPO3\r\n\r\n    ,CTE.CAMPO4\r\n\r\nHAVING CTE.CAMPO2 - ABS(CTE.CAMPO3 + CTE.CAMPO4) &lt;&gt; 0<\/pre>\n<p class=\"x_MsoNormal\">Era uma subquery que ia via linked server buscar os dados para serem agrupados e depois retornados. Essa subquery retornava mais ou menos 500k linhas via linked server. Enquanto o group by retornava menos de 10 linhas. Al\u00e9m dessa quantidade de dados sendo trafegados via linkedserver era utilizado uma fun\u00e7\u00e3o scalar na subquery que formatava um campo para data.<\/p>\n<p class=\"x_MsoNormal\">A solu\u00e7\u00e3o para esse caso foi reescrever a query, onde ao inv\u00e9s de executar a query via linked server eu o fa\u00e7o via openquery, que ir\u00e1 abrir uma conex\u00e3o e executar a query toda no servidor destino e trafegar os dados ap\u00f3s o group by, fazendo assim com que muito menos dados fossem trafegados, pois o retorno do group by ser\u00e1 de menos de 10 linhas.<\/p>\n<p class=\"x_MsoNormal\">E a outra altera\u00e7\u00e3o foi usar a fun\u00e7\u00e3o apenas no select final, onde o resultado \u00e9 muito menor devido ao group by.<\/p>\n<pre class=\"lang:tsql decode:true \">SELECT dbo.FNCDATA(RESULT.CAMPO1) CAMPO1\r\n\r\n    ,RESULT.CAMPO2\r\n\r\n    ,RESULT.CAMPO3\r\n\r\n    ,RESULT.CAMPO4\r\n\r\n    ,RESULT.CAMPO5\r\n\r\nFROM OPENQUERY(LS_SERVIDOR,'\r\n\r\n       SELECT CTE.CAMPO1\r\n\r\n              ,CTE.CAMPO2\r\n\r\n              ,CTE.CAMPO3\r\n\r\n              ,CTE.CAMPO4\r\n\r\n              ,CTE.CAMPO2 - ABS(CTE.CAMPO3 + CTE.CAMPO4) CAMPO5                                     \r\n\r\n       FROM\r\n\r\n       (                                        \r\n\r\n              SELECT TAB1.CAMPO1\r\n\r\n                    ,TAB1.CAMPO2\r\n\r\n                    ,TAB2.CAMPO3\r\n\r\n                    ,TAB2.CAMPO4   \r\n\r\n              FROM BASE1.dbo.TABELA1 TAB1 (NOLOCK)\r\n\r\n                    INNER JOIN BASE2.dbo.TABELA2 TAB2 (NOLOCK) ON TAB1.CODIGO = TAB2.CODIGO\r\n\r\n       ) CTE                                       \r\n\r\n       GROUP BY CTE.CAMPO1\r\n\r\n              ,CTE.CAMPO2\r\n\r\n              ,CTE.CAMPO3\r\n\r\n              ,CTE.CAMPO4\r\n\r\n       HAVING CTE.CAMPO2 - ABS(CTE.CAMPO3 + CTE.CAMPO4) &lt;&gt; 0)'\r\n\r\n) RESULT<\/pre>\n<p>Ap\u00f3s a reescrita o job passou a rodar em 47s.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1665\" data-permalink=\"https:\/\/powertuning.com.br\/blog\/casos-do-dia-a-dia-uma-query-real-que-saiu-de-9-horas-para-47-segundos\/transferir\/\" data-orig-file=\"https:\/\/powertuning.com.br\/blog\/wp-content\/uploads\/2022\/03\/transferir.png\" data-orig-size=\"1124,190\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"transferir\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/powertuning.com.br\/blog\/wp-content\/uploads\/2022\/03\/transferir-1024x173.png\" class=\" wp-image-1665 aligncenter\" src=\"https:\/\/powertuning.com.br\/blog\/wp-content\/uploads\/2022\/03\/transferir-300x51.png\" alt=\"\" width=\"677\" height=\"115\" srcset=\"https:\/\/powertuning.com.br\/blog\/wp-content\/uploads\/2022\/03\/transferir-300x51.png 300w, https:\/\/powertuning.com.br\/blog\/wp-content\/uploads\/2022\/03\/transferir-1024x173.png 1024w, https:\/\/powertuning.com.br\/blog\/wp-content\/uploads\/2022\/03\/transferir-768x130.png 768w, https:\/\/powertuning.com.br\/blog\/wp-content\/uploads\/2022\/03\/transferir-20x3.png 20w, https:\/\/powertuning.com.br\/blog\/wp-content\/uploads\/2022\/03\/transferir.png 1124w\" sizes=\"auto, (max-width: 677px) 100vw, 677px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>No caso de hoje vamos falar sobre um caso que atuamos num cliente que tinha um job que chamava uma SP e o tempo m\u00e9dio de execu\u00e7\u00e3o era de 9h30min. Dentro dessa SP executava basicamente uma query como a abaixo: SELECT CTE.CAMPO1 ,CTE.CAMPO2 ,CTE.CAMPO3 ,CTE.CAMPO4 ,CTE.CAMPO2 &#8211; ABS(CTE.CAMPO3 + CTE.CAMPO4) CAMPO5 FROM ( SELECT dbo.FNCDATA(TAB1.CAMPO1)&hellip; <br \/> <a class=\"read-more\" href=\"https:\/\/powertuning.com.br\/blog\/casos-do-dia-a-dia-uma-query-real-que-saiu-de-9-horas-para-47-segundos\/\">Leia mais<\/a><\/p>\n","protected":false},"author":9,"featured_media":1669,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"content-type":"","_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[62,1,63],"tags":[],"class_list":["post-1664","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-casos-reais-de-clientes","category-sem-categoria","category-sql-server"],"jetpack_featured_media_url":"https:\/\/powertuning.com.br\/blog\/wp-content\/uploads\/2022\/03\/tecleando-laptop-22032021.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/posts\/1664","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1664"}],"version-history":[{"count":3,"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/posts\/1664\/revisions"}],"predecessor-version":[{"id":1668,"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/posts\/1664\/revisions\/1668"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/media\/1669"}],"wp:attachment":[{"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1664"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1664"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/powertuning.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1664"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}