{"id":10166,"date":"2019-01-30T10:19:41","date_gmt":"2019-01-30T12:19:41","guid":{"rendered":"http:\/\/www.fabriciolima.net\/?p=10166"},"modified":"2020-10-10T14:28:24","modified_gmt":"2020-10-10T17:28:24","slug":"melhorando-a-performance-de-consultas-no-totvs-protheus-parte-8","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2019\/01\/30\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-8\/","title":{"rendered":"Melhorando a Performance de Consultas no Totvs Protheus \u2013 Parte 8"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-10169 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/Totvs_Protheus_E08.png\" alt=\"\" width=\"662\" height=\"400\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/Totvs_Protheus_E08.png 1121w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/Totvs_Protheus_E08-300x181.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/Totvs_Protheus_E08-1024x618.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/Totvs_Protheus_E08-768x464.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/Totvs_Protheus_E08-700x423.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/Totvs_Protheus_E08-410x248.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/Totvs_Protheus_E08-100x60.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/Totvs_Protheus_E08-275x166.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/Totvs_Protheus_E08-20x12.png 20w\" sizes=\"auto, (max-width: 662px) 100vw, 662px\" \/><\/p>\n<p>Fala Pessoal,<\/p>\n<p>Estamos de volta com novos epis\u00f3dios da s\u00e9rie de an\u00e1lise de queries de ambientes Totvs Protheus.<\/p>\n<p>Antes de lerem esse post, caso ainda n\u00e3o tenham lido os anteriores, sugiro que fa\u00e7am:<\/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\" data-wpel-link=\"internal\">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\" data-wpel-link=\"internal\">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\" data-wpel-link=\"internal\">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\" data-wpel-link=\"internal\">https:\/\/www.fabriciolima.net\/blog\/2018\/01\/16\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-4\/<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/01\/23\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-5\/\" target=\"_blank\" rel=\"noopener noreferrer\" data-wpel-link=\"internal\">https:\/\/www.fabriciolima.net\/blog\/2018\/01\/23\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-5\/<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/01\/30\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-6\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.fabriciolima.net\/blog\/2018\/01\/30\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-6\/<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/02\/07\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-7\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.fabriciolima.net\/blog\/2018\/02\/07\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-7\/<\/a><\/li>\n<\/ul>\n<p>No post de hoje vamos analisar esse pequeno monstro que estava demorando 4 minutos para executar:<\/p>\n<pre class=\"lang:tsql decode:true\">SELECT SB2.B2_FILIAL,\r\n       SB1.B1_COD,\r\n       SB1.B1_DESC2,\r\n       SB2.B2_LOCAL,\r\n       SB2.B2_QATU,\r\n       SB1.B1_GRUPO,\r\n       CASE\r\n           WHEN\r\n           (\r\n               SELECT TOP 1\r\n                      SD2.D2_EMISSAO\r\n               FROM SD2010 SD2\r\n               WHERE SD2.D2_TES IN ( '2342', '3423', '23434')\r\n                     AND SD2.D2_COD = SB1.B1_COD\r\n                     AND SD2.D2_FILIAL = '99'\r\n               ORDER BY SD2.D2_EMISSAO DESC\r\n           ) IS NULL THEN\r\n               'SEM MOVIMENTO'\r\n           ELSE\r\n       (\r\n           SELECT TOP 1\r\n                  SD2.D2_EMISSAO\r\n           FROM SD2010 SD2\r\n           WHERE SD2.D2_TES IN ( '2342', '3423', '23434')\r\n                 AND SD2.D2_COD = SB1.B1_COD\r\n                 AND SD2.D2_FILIAL = '99'\r\n           ORDER BY SD2.D2_EMISSAO DESC\r\n       )\r\n       END AS MOVIMENTO\r\nFROM SB1010 SB1,\r\n     SB2010 SB2\r\nWHERE SB1.B1_COD = SB2.B2_COD\r\n      AND SB2.B2_QATU &gt; 0\r\n      AND SB1.D_E_L_E_T_ = ' '\r\n      AND SB2.D_E_L_E_T_ = ' '\r\n      AND SB1.B1_COD\r\n      BETWEEN '               ' AND 'zzzzzzzzzzzzzzz'\r\n      AND SB2.B2_LOCAL = '01'\r\n      AND SB1.B1_GRUPO\r\n      BETWEEN '    ' AND 'ZZZZ'\r\n      AND SB1.B1_FILIAL = '  '\r\n      AND SB2.B2_FILIAL = '99'\r\n      AND\r\n      (\r\n          CASE\r\n              WHEN\r\n              (\r\n                  SELECT TOP 1\r\n                         SD2.D2_EMISSAO\r\n                  FROM SD2010 SD2\r\n                  WHERE SD2.D2_TES IN ( '2342', '3423', '23434')\r\n                        AND SD2.D2_COD = SB1.B1_COD\r\n                        AND SD2.D2_FILIAL = '99'\r\n                  ORDER BY SD2.D2_EMISSAO DESC\r\n              ) IS NULL THEN\r\n                  'SEM MOVIMENTO'\r\n              ELSE\r\n          (\r\n              SELECT TOP 1\r\n                     SD2.D2_EMISSAO\r\n              FROM SD2010 SD2\r\n              WHERE SD2.D2_TES IN ( '2342', '3423', '23434')\r\n                    AND SD2.D2_COD = SB1.B1_COD\r\n                    AND SD2.D2_FILIAL = '99'\r\n              ORDER BY SD2.D2_EMISSAO DESC\r\n          )\r\n          END &lt;= '20180722'\r\n          OR CASE\r\n                 WHEN\r\n                 (\r\n                     SELECT TOP 1\r\n                            SD2.D2_EMISSAO\r\n                     FROM SD2010 SD2\r\n                     WHERE SD2.D2_TES IN ( '2342', '3423', '23434')\r\n                           AND SD2.D2_COD = SB1.B1_COD\r\n                     ORDER BY SD2.D2_EMISSAO DESC\r\n                 ) IS NULL THEN\r\n                     'SEM MOVIMENTO'\r\n                 ELSE\r\n             (\r\n                 SELECT TOP 1\r\n                        SD2.D2_EMISSAO\r\n                 FROM SD2010 SD2\r\n                 WHERE SD2.D2_TES IN ( '2342', '3423', '23434')\r\n                       AND SD2.D2_COD = SB1.B1_COD\r\n                       AND SD2.D2_FILIAL = '99'\r\n                 ORDER BY SD2.D2_EMISSAO DESC\r\n             )\r\n             END = 'SEM MOVIMENTO'\r\n      )\r\nORDER BY SB1.B1_DESC2;<\/pre>\n<p>obs.: Os par\u00e2metros est\u00e3o com valores fict\u00edcios.<\/p>\n<p><strong>Fabr\u00edcio, voc\u00ea sabe o que essa query faz no Protheus?<\/strong><\/p>\n<p>R: N\u00e3o tenho a menor ideia, mas n\u00e3o precisamos saber para atuar.<\/p>\n<p>Usamos o SET STATISTICS IO,TIME ON para ver o consumo da query:<\/p>\n<pre class=\"lang:tsql decode:true \">Table 'Worktable'. Scan count 8547, logical reads 86299988\r\n\r\nTable 'SD2010'. Scan count 6, logical reads 143406, physical reads 0\r\n\r\nSQL Server Execution Times:\r\n\r\n\u00a0\u00a0 CPU time = 362139 ms,\u00a0 elapsed time = 245129 ms.<\/pre>\n<p>SQL est\u00e1 matando o tempdb para rodar essa query.<\/p>\n<p>Olhando o plano dela tamb\u00e9m podemos ver isso. O plano do monstro \u00e9 gigante, ent\u00e3o vou colocar s\u00f3 uma parte dele:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-10170 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/POST_PROTHEUS_8.png\" alt=\"\" width=\"1007\" height=\"310\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/POST_PROTHEUS_8.png 1490w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/POST_PROTHEUS_8-300x92.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/POST_PROTHEUS_8-1024x315.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/POST_PROTHEUS_8-768x236.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/POST_PROTHEUS_8-700x215.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/POST_PROTHEUS_8-410x126.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/POST_PROTHEUS_8-100x31.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/POST_PROTHEUS_8-275x85.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2019\/01\/POST_PROTHEUS_8-20x6.png 20w\" sizes=\"auto, (max-width: 1007px) 100vw, 1007px\" \/><\/p>\n<p>Reparem os operadores de <strong>Spool<\/strong>. O Spool armazena um resultado tempor\u00e1rio no TempDB para ser reutilizado em consultas futuras na execu\u00e7\u00e3o dessa query.<\/p>\n<p><strong>Quer saber mais sobre o Spool?<\/strong><\/p>\n<p>Segue post do mestre <strong>Fabiano Amorim<\/strong>:\u00a0<a href=\"https:\/\/blogfabiano.com\/2009\/01\/13\/operador-do-dia-spool\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/blogfabiano.com\/2009\/01\/13\/operador-do-dia-spool\/<\/a><\/p>\n<p><strong>Olhando para a query j\u00e1 conseguimos ver coisas estranhas nesse monstrinho n\u00e9!?<\/strong><\/p>\n<p><strong>6 Subqueries com o mesmo c\u00f3digo?<\/strong><\/p>\n<p>Hummm&#8230;<\/p>\n<p>Alterar a query n\u00e3o \u00e9 poss\u00edvel. S\u00f3 conseguimos resolver com \u00edndices.<\/p>\n<p>Olhando s\u00f3 a subquery:<\/p>\n<pre class=\"lang:tsql decode:true \"> SELECT TOP 1\r\n                      SD2.D2_EMISSAO\r\n               FROM SD2010 SD2\r\n               WHERE SD2.D2_TES IN ( '2342', '3423', '23434')\r\n                     AND SD2.D2_COD = SB1.B1_COD\r\n                     AND SD2.D2_FILIAL = '99'\r\n               ORDER BY SD2.D2_EMISSAO DESC<\/pre>\n<p><strong>Ser\u00e1 que existe um \u00edndice come\u00e7ando por D2_COD?<\/strong><\/p>\n<p>R: N\u00e3o existia.<\/p>\n<p><strong>Se eu criar vai ajuda essa query?<\/strong><\/p>\n<p>R: Vamos descobrir.<\/p>\n<p>Segue o \u00edndice que foi criado:<\/p>\n<pre class=\"lang:tsql decode:true\">create nonclustered index SD2010W01 on SD2010(D2_COD,D2_FILIAL,D2_TES,D2_EMISSAO)\r\nwith(DATA_COMPRESSION=PAGE,FILLFACTOR=90)<\/pre>\n<p><strong>Ap\u00f3s criar o \u00edndice, a query que rodava em 4 minutos passou a rodar em 3 segundos.<\/strong><\/p>\n<p><strong>WOW!<\/strong><\/p>\n<p>Mesmo a query sendo um monstrinho com 6 subqueries conseguimos fazer ela rodar em 3 segundos.<\/p>\n<pre class=\"lang:tsql decode:true\">--Consumo Antes\r\n\r\nTable 'Worktable'. Scan count 8547, logical reads 86299988\r\n\r\nTable 'SD2010'. Scan count 6, logical reads 143406, physical reads 0\r\n\r\nSQL Server Execution Times:\r\n\r\n\u00a0\u00a0 CPU time = 362139 ms,\u00a0 elapsed time = 245129 ms.\r\n\r\n--Consumo Depois\r\n\r\nTable 'Worktable'. Scan count 1132, logical reads 4504, physical reads 0\r\n\r\nTable 'SD2010'. Scan count 104711, logical reads 322107, physical reads 0\r\n\r\n\u00a0SQL Server Execution Times:\r\n\r\n\u00a0\u00a0 CPU time = 12626 ms,\u00a0 elapsed time = 3591 ms.<\/pre>\n<p><strong>Melhorias:<\/strong><\/p>\n<ul>\n<li>Tempo total de 4min05seg para 03 seg.<\/li>\n<li>6 minutos consumindo CPU (em paralelo) para 12 segundos de processamento. <strong>De nada, processador!<\/strong><\/li>\n<li>86 milh\u00f5es de leituras no tempdb para 4 mil leituras. <strong>De nada, Disco!<\/strong><\/li>\n<li>A quantidade de leituras na SD2 aumentou, mas nosso problema foi resolvido. <strong>Segue a vida.<\/strong><\/li>\n<\/ul>\n<p><strong>Viram quanta leitura e quanta CPU sendo consumida?<\/strong><\/p>\n<p>Antes de comprar hardware, analise algumas consultas que pode ter a mesma melhoria deixando de usar recursos sem necessidade.<\/p>\n<p>\u00c9 isso ai pessoal, melhoramos mais uma query do Totvs 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<p>&nbsp;<\/p>\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, Estamos de volta com novos epis\u00f3dios da s\u00e9rie de an\u00e1lise de queries de ambientes Totvs Protheus. Antes de lerem esse post, caso ainda n\u00e3o tenham lido os anteriores, sugiro que fa\u00e7am: 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\/ https:\/\/www.fabriciolima.net\/blog\/2018\/01\/23\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-5\/ https:\/\/www.fabriciolima.net\/blog\/2018\/01\/30\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-6\/ https:\/\/www.fabriciolima.net\/blog\/2018\/02\/07\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-7\/ No post de hoje vamos analisar esse pequeno monstro que estava demorando 4 minutos para [&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,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-10166","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"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/10166","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=10166"}],"version-history":[{"count":8,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/10166\/revisions"}],"predecessor-version":[{"id":13838,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/10166\/revisions\/13838"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=10166"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=10166"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=10166"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}