{"id":8521,"date":"2018-01-23T10:05:46","date_gmt":"2018-01-23T12:05:46","guid":{"rendered":"http:\/\/www.fabriciolima.net\/?p=8521"},"modified":"2020-10-10T14:30:27","modified_gmt":"2020-10-10T17:30:27","slug":"melhorando-a-performance-de-consultas-no-totvs-protheus-parte-5","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2018\/01\/23\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-5\/","title":{"rendered":"Melhorando a Performance de Consultas no Totvs Protheus &#8211; Parte 5"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8708 aligncenter\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2018\/01\/Netflix5-1.png\" alt=\"\" width=\"649\" height=\"392\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/01\/Netflix5-1.png 1200w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/01\/Netflix5-1-300x181.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/01\/Netflix5-1-1024x619.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/01\/Netflix5-1-768x464.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/01\/Netflix5-1-700x423.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/01\/Netflix5-1-410x248.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/01\/Netflix5-1-100x60.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/01\/Netflix5-1-275x166.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/01\/Netflix5-1-20x12.png 20w\" sizes=\"auto, (max-width: 649px) 100vw, 649px\" \/><\/p>\n<p>Fala pessoal,<\/p>\n<p>Antes de lerem esse post, caso ainda n\u00e3o tenham lido os anteriores, sugiro que fa\u00e7am para seguirem a linha de racioc\u00ednio:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2017\/12\/11\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-1\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.fabriciolima.net\/blog\/2017\/12\/11\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-1\/<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2017\/12\/18\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-2\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.fabriciolima.net\/blog\/2017\/12\/18\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-2\/<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/01\/08\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-3\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.fabriciolima.net\/blog\/2018\/01\/08\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-3\/<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/01\/16\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-4\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.fabriciolima.net\/blog\/2018\/01\/16\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-4\/<\/a><\/li>\n<\/ul>\n<p>Hoje vamos analisar a query abaixo que estava demorando<strong> 28 segundos<\/strong> em um cliente e foi executada mais de <strong>100 vezes<\/strong> em um dia:<\/p>\n<pre class=\"lang:tsql decode:true\">SELECT B1_DESC ,\r\n       B1_COD ,\r\n       ISNULL(ZY_TIPO, '') TIPO\r\nFROM   SB1010\r\n       LEFT JOIN SZY010 ON B1_COD = ZY_COD\r\n                           AND SZY010.D_E_L_E_T_ = ''\r\n                           AND ZY_DTDESAT = ''\r\nWHERE  SB1010.D_E_L_E_T_ = ''\r\n       AND B1_MSBLQL &lt;&gt; '1'\r\n       AND B1_DESC LIKE '%NOMEPRODUTO%'\r\n       AND B1_DESC LIKE '%%'\r\n       AND B1_COD IN (   SELECT AIB_CODPRO\r\n                         FROM   AIB010\r\n                         WHERE  D_E_L_E_T_ = ''\r\n                                AND AIB_DATVIG &gt;= '20171215'\r\n                                AND AIB_CODFOR = '001234'\r\n                                AND AIB_CODTAB = '009'\r\n                     );<\/pre>\n<p>Plano:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8523 aligncenter\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_1.png\" alt=\"\" width=\"597\" height=\"292\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_1.png 1018w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_1-300x147.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_1-768x376.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_1-700x342.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_1-410x201.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_1-100x49.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_1-275x135.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_1-20x10.png 20w\" sizes=\"auto, (max-width: 597px) 100vw, 597px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Mais uma vez o SQL nos sugere um \u00edndice:<\/p>\n<pre class=\"lang:tsql decode:true\">CREATE NONCLUSTERED INDEX SZY010W01\r\nON [dbo].[SZY010] ([ZY_DTDESAT],[D_E_L_E_T_])\r\nINCLUDE ([ZY_COD],[ZY_TIPO])\r\nwith(FILLFACTOR=90,DATA_COMPRESSION=PAGE)<\/pre>\n<p>Digo e repito: Missing Index ajuda, mas nem sempre \u00e9 a melhor solu\u00e7\u00e3o.<\/p>\n<p>Olha como essas duas colunas s\u00e3o usadas na query:<\/p>\n<p><strong><em>AND SZY010.D_E_L_E_T_ = &#8221; AND ZY_DTDESAT = &#8221;<\/em><\/strong><\/p>\n<p><strong>Nada seletivo!<\/strong> N\u00e3o seria uma boa coluna para um \u00edndice (exceto exce\u00e7\u00f5es).<\/p>\n<p>Podemos ver facilmente que a query tem uma subquery. Se rodarmos essa subquery separada temos esse plano:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-8526 aligncenter\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_2.png\" alt=\"\" width=\"761\" height=\"334\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_2.png 921w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_2-300x132.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_2-768x337.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_2-700x307.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_2-410x180.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_2-100x44.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_2-275x121.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_2-20x9.png 20w\" sizes=\"auto, (max-width: 761px) 100vw, 761px\" \/><\/p>\n<p>O SQL nos sugere outro \u00edndice que n\u00e3o seria o melhor a ser criado:<\/p>\n<pre class=\"lang:tsql decode:true \">CREATE NONCLUSTERED INDEX [&lt;Name of Missing Index, sysname,&gt;]\r\nON [dbo].[AIB010] ([AIB_CODTAB],[D_E_L_E_T_],[AIB_CODFOR],[AIB_DATVIG])\r\n<\/pre>\n<p>Ele sugere come\u00e7ar esse \u00edndice pela coluna <strong>AIB_CODTAB<\/strong>, mas ser\u00e1 que ela \u00e9 a mais seletiva dessa query?<\/p>\n<p><strong>Como sei qual \u00e9 a coluna mais seletiva da query Fabricio?<\/strong><\/p>\n<p>Fa\u00e7a um count distinct nas colunas que quer validar:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-8525 aligncenter\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_3.png\" alt=\"\" width=\"542\" height=\"154\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_3.png 542w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_3-300x85.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_3-410x116.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_3-100x28.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_3-275x78.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_3-20x6.png 20w\" sizes=\"auto, (max-width: 542px) 100vw, 542px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>No nosso caso, a coluna <strong>AIB_CODFOR<\/strong> \u00e9 muito melhor para ter um \u00edndice do que a coluna <strong>AIB_CODTAB<\/strong>, pois ela tem muito mais valores distintos. \u00c9 uma coluna mais seletiva e um \u00edndice por ela deve beneficiar outras queries que acessam essa tabela.<\/p>\n<p>Tudo isso at\u00e9 agora foi para mostrar que missed index ajuda, mas n\u00e3o \u00e9 regra.<\/p>\n<p><strong>O que voc\u00ea faria para melhorar essa query ent\u00e3o Fabr\u00edcio?<\/strong><\/p>\n<p>Vou tentar induzir o SQL a rodar essa query da forma abaixo:<\/p>\n<ol>\n<li>Executar a subquery pois ela retorna s\u00f3 200 linhas.<\/li>\n<li>Fazer a busca na tabela <strong>SB1<\/strong> por ( <strong>B1_COD<\/strong> IN\u00a0 ), por ser uma coluna bem seletiva.<\/li>\n<li>Chegar at\u00e9 a tabela <strong>SZY010<\/strong> pelo c\u00f3digo com essa compara\u00e7\u00e3o (<strong>B1_COD = ZY_COD<\/strong>).<\/li>\n<\/ol>\n<p><strong>Como voc\u00ea consegue fazer isso Fabr\u00edcio? Tem algum bot\u00e3o que voc\u00ea clica e escolhe os passos?<\/strong><\/p>\n<p>R: Ainda n\u00e3o tem bot\u00e3o. Ainda&#8230; Enquanto isso, conseguimos fazer criando \u00edndices manualmente!!!<\/p>\n<pre class=\"lang:tsql decode:true \">CREATE NONCLUSTERED INDEX AIB010W01\r\nON [dbo].[AIB010] ([AIB_CODFOR],[AIB_CODTAB],[AIB_DATVIG],[D_E_L_E_T_])\r\ninclude(AIB_CODPRO)\r\nwith(FILLFACTOR=90,DATA_COMPRESSION=PAGE)\r\n\r\nCREATE NONCLUSTERED INDEX SB1010W01\r\nON [dbo].[SB1010] (B1_COD,B1_DESC,B1_MSBLQL,D_E_L_E_T_)\r\nwith(FILLFACTOR=90,DATA_COMPRESSION=PAGE)\r\n\r\nCREATE NONCLUSTERED INDEX SZY010W01\r\nON [dbo].[SZY010] ([ZY_COD],[ZY_DTDESAT],[D_E_L_E_T_])\r\nINCLUDE([ZY_TIPO])\r\nwith(FILLFACTOR=90,DATA_COMPRESSION=PAGE)<\/pre>\n<p>Ap\u00f3s criar esses 3 \u00edndices que s\u00e3o bem pequenos, olhem como ficou o plano da query:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-8528 aligncenter\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_4.png\" alt=\"\" width=\"758\" height=\"221\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_4.png 1018w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_4-300x88.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_4-768x224.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_4-700x204.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_4-410x120.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_4-100x29.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_4-275x80.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_4-20x6.png 20w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>O SQL fez exatamente o que induzi ele a fazer. Pegou dados da subquery, buscou os c\u00f3digos retornados por ela na <strong>SB1<\/strong> e depois chegou na <strong>SZY<\/strong> pelo <strong>COD<\/strong> tamb\u00e9m.<\/p>\n<p><strong>E o tempo de 28 segundos Fabr\u00edcio, foi para quanto?<\/strong><\/p>\n<p>WOW!!!!! Agora a query roda instant\u00e2nea.<\/p>\n<p>Consumo antes:<\/p>\n<pre class=\"lang:tsql decode:true\">Table 'SZY010'. Scan count 1, logical reads 187725\r\nTable 'AIB010'. Scan count 1, logical reads 2732873\r\nTable 'SB1010'. Scan count 1, logical reads 4271\r\n\r\n SQL Server Execution Times:\r\n   CPU time = 28438 ms,  elapsed time = 28673 ms.<\/pre>\n<p>&nbsp;<\/p>\n<p>Consumo Depois:<\/p>\n<pre class=\"lang:tsql decode:true\">Table 'SZY010'. Scan count 15, logical reads 30\r\nTable 'SB1010'. Scan count 223, logical reads 673\r\nTable 'AIB010'. Scan count 1, logical reads 5\r\n\r\n SQL Server Execution Times:\r\n   CPU time = 0 ms,  elapsed time = 43 ms.<\/pre>\n<p>Redu\u00e7\u00e3o absurda com \u00edndices pequenos. Bem simples e eficiente&#8230;.<\/p>\n<p>Olhando no <strong>Trace<\/strong> de queries demoradas, a query ficou t\u00e3o r\u00e1pida que tenho que apelar e colocar um <strong>waitfor delay<\/strong> para poder visualizar e comparar:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-8529 aligncenter\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_5.png\" alt=\"\" width=\"880\" height=\"171\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_5.png 1009w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_5-300x58.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_5-768x149.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_5-700x136.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_5-410x80.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_5-100x19.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_5-275x53.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte5_5-20x4.png 20w\" sizes=\"auto, (max-width: 880px) 100vw, 880px\" \/><\/p>\n<p>Ela rodou em <strong>0,1 segundos<\/strong> e a diferen\u00e7a de leituras de p\u00e1ginas<strong> (2.9 milh\u00f5es para 802)<\/strong> e do consumo de CPU<strong> (27 mil para 62)<\/strong> \u00e9 gigante!!!<\/p>\n<p>Baita diferen\u00e7a.<\/p>\n<p>\u00c9 isso ai pessoal, melhoramos mais uma query no Protheus.<\/p>\n<p>At\u00e9 a pr\u00f3xima an\u00e1lise de query.<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #ff0000;\"><strong>Atualizado no dia 07\/10\/2020:<\/strong><\/span><\/p>\n<p>Publiquei um curso com 11 horas de dura\u00e7\u00e3o com toda minha experi\u00eancia de anos no assunto e de dezenas de clientes Protheus atendidos:<\/p>\n<p>Curso:\u00a0<a class=\"external-link wpel-icon-left\" href=\"https:\/\/cursos.powertuning.com.br\/course?courseid=melhorando-a-performance-de-consultas-no-totvs-protheus\" target=\"_blank\" rel=\"nofollow external noopener noreferrer\" data-wpel-link=\"external\">Melhorando a Performance de Consultas no Totvs Protheus<\/a><\/p>\n<p>Gravei uma aula gr\u00e1tis com 60 minutos de dura\u00e7\u00e3o sobre o que voc\u00ea deve aprender para melhorar a performance no Protheus:<\/p>\n<div class=\"fluid-width-video-wrapper\"><a href=\"https:\/\/www.youtube.com\/watch?v=BKmUa3aZn6s\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.youtube.com\/watch?v=BKmUa3aZn6s<\/a><\/div>\n<div><\/div>\n<div><\/div>\n<p><b>Gostou desse Post?<\/b><\/p>\n<p>Curta, comente, compartilhe com os coleguinhas\u2026<\/p>\n<p>Assine meu canal no\u00a0<a class=\"external-link wpel-icon-left\" href=\"https:\/\/www.youtube.com\/channel\/UCeBRAO_LLrUdSrOXIywjzRA\" target=\"_blank\" rel=\"external noopener noreferrer nofollow\" data-wpel-link=\"external\">Youtube<\/a>\u00a0e curta minha\u00a0<a class=\"external-link wpel-icon-left\" href=\"https:\/\/www.facebook.com\/FabricioLimaSolucoesemBancodeDados\/\" target=\"_blank\" rel=\"external noopener noreferrer nofollow\" data-wpel-link=\"external\">P\u00e1gina no Facebook<\/a>\u00a0para receber Dicas de Leituras e Eventos sobre SQL Server.<\/p>\n<p>Abra\u00e7os,<\/p>\n<p>Fabr\u00edcio Lima<\/p>\n<p>Microsoft Data Platform MVP<\/p>\n<p>Consultor e Instrutor SQL Server<\/p>\n<p>Trabalha com SQL Server desde 2006<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fala pessoal, Antes de lerem esse post, caso ainda n\u00e3o tenham lido os anteriores, sugiro que fa\u00e7am para seguirem a linha de racioc\u00ednio: https:\/\/www.fabriciolima.net\/blog\/2017\/12\/11\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-1\/ https:\/\/www.fabriciolima.net\/blog\/2017\/12\/18\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-2\/ https:\/\/www.fabriciolima.net\/blog\/2018\/01\/08\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-3\/ https:\/\/www.fabriciolima.net\/blog\/2018\/01\/16\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-4\/ Hoje vamos analisar a query abaixo que estava demorando 28 segundos em um cliente e foi executada mais de 100 vezes em um dia: SELECT B1_DESC , B1_COD [&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,942,991,1248,33,280],"tags":[15,1031,1032,1101,1099,1100,1097,1098,1096,1048,1044,1103,942,1102,1595,1054,23,1029,1030,1088,1089,1025,1026,1049,1045,110,1034,1033,1597,1016,1040,1019,1598,1035,1042,1023,1024,1596,1046,1021,1020,1039,1053,1022,1018,1059,1047,1041,1036,1052,1060,1038,1051,33,1057,1017,1015,1055,1050,1043],"class_list":["post-8521","post","type-post","status-publish","format-standard","hentry","category-administracao-de-bd","category-consultoria-sql-server","category-dba-remoto","category-queries-do-dia-a-dia","category-sql-server","category-virtual-pass-br","tag-banco-de-dados","tag-banco-protheus","tag-banco-totvs","tag-consultor-crm","tag-consultor-datasul","tag-consultor-microsiga","tag-consultor-protheus","tag-consultor-rm","tag-consultor-totvs","tag-consultoria-microsiga","tag-consultoria-protheus","tag-consultoria-rm","tag-consultoria-sql-server","tag-consultoria-totvs","tag-crm-datasul-datasul-erp","tag-datasul-totvs","tag-dba","tag-dba-protheus","tag-dba-totvs","tag-dica-banco-de-dados-protheus","tag-dicas-banco-de-dados-protheus","tag-erp","tag-erp-com-sql-server","tag-erp-microsiga","tag-erp-protheus","tag-indice","tag-lentidao-banco-de-dados","tag-lentidao-protheus","tag-lentidao-protheus-12","tag-microsiga","tag-microsiga-protheus","tag-microsiga-sql-server","tag-migracao-protheus-12","tag-performance-protheus","tag-protheus","tag-protheus-10","tag-protheus-11","tag-protheus-12","tag-protheus-microsiga","tag-protheus-microsoft-sql-server","tag-protheus-sql-server","tag-protheus-totvs","tag-rm-sistemas","tag-rm-sql-server","tag-siga","tag-sistema-crm","tag-sistema-microsiga","tag-sistema-protheus","tag-sistema-rm","tag-sistema-rm-totvs","tag-sistema-wms","tag-sistemas-de-gestao","tag-sistemas-erp","tag-sql-server","tag-suporte-totvs","tag-top-connect","tag-totvs","tag-totvs-datasul","tag-totvs-microsiga","tag-totvs-protheus"],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":20361,"url":"https:\/\/fabriciolima.net\/blog\/2025\/01\/07\/10-motivos-para-quem-usa-o-protheus-totvs-implementar-o-power-alerts\/","url_meta":{"origin":8521,"position":0},"title":"10 motivos para quem usa o Protheus (Totvs) implementar o Power Alerts","author":"Fabr\u00edcio Lima","date":"7 de janeiro de 2025","format":false,"excerpt":"Fala Pessoal, 12 anos atr\u00e1s escrevi esse post aqui no Blog e ele fez muito sucesso: https:\/\/www.fabriciolima.net\/blog\/2013\/12\/14\/5-motivos-para-quem-utiliza-o-protheus-totvs-contratar-um-dba-sql-server\/ Hoje fiz um atualizado no Blog da Power Tuning, mas agora com 10 motivos para quem usa o Protheus (Totvs) implementar o Power Alerts https:\/\/powertuning.com.br\/10-motivos-para-quem-usa-o-protheus-totvs-implementar-o-power-alerts\/ Leiam pois ficou muito bom. Abra\u00e7os, Fabr\u00edcio Lima\u2026","rel":"","context":"Em &quot;Sem categoria&quot;","block_context":{"text":"Sem categoria","link":"https:\/\/fabriciolima.net\/blog\/category\/sem-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2025\/01\/novo-post-blog-300x300.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2025\/01\/novo-post-blog-300x300.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2025\/01\/novo-post-blog-300x300.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":2881,"url":"https:\/\/fabriciolima.net\/blog\/2014\/03\/18\/importando-arquivos-dbf-protheus-totvs-para-o-sql-server\/","url_meta":{"origin":8521,"position":1},"title":"Importando arquivos DBF (Protheus Totvs) para o SQL Server","author":"Fabr\u00edcio Lima","date":"18 de mar\u00e7o de 2014","format":false,"excerpt":"Ol\u00e1 Pessoal, Realizando um trabalho com minha Consultoria Remota, o cliente precisava \u00a0importar arquivos no formato DBF para o SQL Server. Nativamente, n\u00e3o \u00e9 poss\u00edvel fazer essa importa\u00e7\u00e3o. Ap\u00f3s algumas pesquisas e testes, consegui realizar a importa\u00e7\u00e3o dos arquivos da seguinte forma: 1 - Download do\u00a0Microsoft Access Database Engine 2010\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":"","width":0,"height":0},"classes":[]},{"id":13849,"url":"https:\/\/fabriciolima.net\/blog\/2020\/10\/10\/novo-curso-imperdivel-melhorando-a-performance-de-consultas-no-totvs-protheus\/","url_meta":{"origin":8521,"position":2},"title":"[Novo Curso Imperd\u00edvel] Melhorando a Performance de Consultas no Totvs Protheus","author":"Fabr\u00edcio Lima","date":"10 de outubro de 2020","format":false,"excerpt":"Fala Pessoal, O grande dia chegou!!! O meu novo curso j\u00e1 est\u00e1 dispon\u00edvel na plataforma da Power Tuning: Melhorando a Performance de Consultas no Totvs Protheus At\u00e9 a pr\u00f3xima ter\u00e7a-feira (13\/10) temos aquele bom e velho voucher dispon\u00edvel: 25OFFPRIMEIRASEMANA S\u00e3o 11 horas de curso e tem certificado no final 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\/2020\/10\/WhatsApp-Image-2020-10-12-at-08.36.34.jpeg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2020\/10\/WhatsApp-Image-2020-10-12-at-08.36.34.jpeg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2020\/10\/WhatsApp-Image-2020-10-12-at-08.36.34.jpeg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2020\/10\/WhatsApp-Image-2020-10-12-at-08.36.34.jpeg?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":8459,"url":"https:\/\/fabriciolima.net\/blog\/2018\/01\/08\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-3\/","url_meta":{"origin":8521,"position":3},"title":"Melhorando a Performance de Consultas no Totvs Protheus &#8211; Parte 3","author":"Fabr\u00edcio Lima","date":"8 de janeiro de 2018","format":false,"excerpt":"Fala pessoal, Antes de lerem esse post, caso ainda n\u00e3o tenham lido os anteriores, sugiro que fa\u00e7am para seguirem a linha de racioc\u00ednio: https:\/\/www.fabriciolima.net\/blog\/2017\/12\/11\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-1\/ https:\/\/www.fabriciolima.net\/blog\/2017\/12\/18\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-2\/ Pegando mais uma quey no Traces de queries demoradas. Durante a semana, essa query apareceu v\u00e1rias vezes demorando mais de 3 segundos. Contudo, no fim\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\/2018\/01\/NetFlix3.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2018\/01\/NetFlix3.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2018\/01\/NetFlix3.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":8450,"url":"https:\/\/fabriciolima.net\/blog\/2017\/12\/18\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-2\/","url_meta":{"origin":8521,"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":8718,"url":"https:\/\/fabriciolima.net\/blog\/2018\/02\/07\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-7\/","url_meta":{"origin":8521,"position":5},"title":"Melhorando a Performance de Consultas no Totvs Protheus &#8211; Parte 7","author":"Fabr\u00edcio Lima","date":"7 de fevereiro de 2018","format":false,"excerpt":"Fala pessoal, Como tudo que \u00e9 bom dura, pouco, esse \u00e9 o \u00faltimo epis\u00f3dio da nossa s\u00e9rie de artigos de Tuning de consultas no Totvs Protheus. Lembrando que essas dicas valem para queries de outros sistemas tamb\u00e9m. Antes de lerem esse post, caso ainda n\u00e3o tenham lido os anteriores, sugiro\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\/2018\/02\/fimnetflix.png?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\/8521","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=8521"}],"version-history":[{"count":11,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/8521\/revisions"}],"predecessor-version":[{"id":13841,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/8521\/revisions\/13841"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=8521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=8521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=8521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}