{"id":9365,"date":"2018-09-11T09:31:41","date_gmt":"2018-09-11T12:31:41","guid":{"rendered":"http:\/\/www.fabriciolima.net\/?p=9365"},"modified":"2018-09-11T09:31:41","modified_gmt":"2018-09-11T12:31:41","slug":"queries-do-dia-a-dia-como-monitorar-o-percentual-de-execucao-na-criacao-ou-rebuild-de-um-indice","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2018\/09\/11\/queries-do-dia-a-dia-como-monitorar-o-percentual-de-execucao-na-criacao-ou-rebuild-de-um-indice\/","title":{"rendered":"Queries do Dia a Dia &#8211; Como Monitorar o Percentual de Execu\u00e7\u00e3o na Cria\u00e7\u00e3o ou Rebuild de um \u00cdndice?"},"content":{"rendered":"<p>Fala Pessoal,<\/p>\n<p>Quantas vezes voc\u00eas j\u00e1 criaram um \u00edndice em produ\u00e7\u00e3o e ficaram torcendo, apertando F5 toda hora, rezando, fazendo promessa para essa cria\u00e7\u00e3o acabar mais r\u00e1pido e resolver seu problema cr\u00edtico?<\/p>\n<p>Ficamos naquela d\u00favida, <strong>ser\u00e1 que cancelo ou n\u00e3o?<\/strong> <strong>Ser\u00e1 que j\u00e1 est\u00e1 acabando ou ainda vai demorar muito para criar esse \u00edndice?<\/strong><\/p>\n<p>J\u00e1 fiz isso v\u00e1rias vezes para resolver problemas que n\u00e3o poderiam esperar \u00e0 noite para criar um \u00edndice.<\/p>\n<p><strong>Outra situa\u00e7\u00e3o do dia a dia: <\/strong><\/p>\n<p>Voc\u00ea precisa criar um \u00edndice em uma tabela gigante ou fazer um rebuild nessa tabela \u00e0 noite ou no fim de semana. O comando passa de uma hora de execu\u00e7\u00e3o e voc\u00ea n\u00e3o tem ideia se vai acabar em mais um minuto ou em mais 3 horas.<\/p>\n<p>Seus problemas acabaram&#8230;<\/p>\n<p>Esse ano atendi um cliente junto com o mestre <a href=\"https:\/\/blogfabiano.com\/\" target=\"_blank\" rel=\"noopener\"><strong>Fabiano Amorim<\/strong><\/a>\u00a0e na cria\u00e7\u00e3o de um \u00edndice gigante ele usou uma query para saber o status em tempo real da cria\u00e7\u00e3o desse \u00edndice.<\/p>\n<p>Eu falei: T\u00e1 de brincadeira que existe um comando desse e eu n\u00e3o sabia disso ainda???<\/p>\n<p>Pois \u00e9, existia&#8230;. E eu que acompanho um monte de sites de SQL, deixei passar essa dica por um bom tempo&#8230; <strong>Thanks Amorim!!!<\/strong><\/p>\n<p>Tudo isso \u00e9 poss\u00edvel atrav\u00e9s da DMV\u00a0<strong>dm_exec_query_profiles<\/strong> que funciona a partir da <strong>vers\u00e3o 2014 do SQL Server<\/strong>.<\/p>\n<p><strong>Refer\u00eancia:<\/strong>\u00a0<a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/system-dynamic-management-views\/sys-dm-exec-query-profiles-transact-sql?view=sql-server-2017\" target=\"_blank\" rel=\"noopener\">https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/system-dynamic-management-views\/sys-dm-exec-query-profiles-transact-sql?view=sql-server-2017<\/a><\/p>\n<p>Antes de criar um \u00edndice habilite o <strong>STATISTICS PROFILE<\/strong>:<\/p>\n<pre class=\"lang:tsql decode:true \">SET STATISTICS PROFILE ON\r\ncreate nonclustered index NOME_INDEX on NOME_TABELA(Colunas...) WITH(...)<\/pre>\n<p>O mesmo vale para desfragmentar um \u00edndice:<\/p>\n<pre class=\"lang:tsql decode:true \">SET STATISTICS PROFILE ON\r\nalter index NOME_INDEX on NOME_TABELA  REBUILD<\/pre>\n<p>Ap\u00f3s iniciar o comando de cria\u00e7\u00e3o ou desfragmenta\u00e7\u00e3o do \u00edndice, em outra conex\u00e3o, execute a query abaixo alterando o SPID no WHERE:<\/p>\n<pre class=\"lang:tsql decode:true \">--Acompanhar a cria\u00e7\u00e3o ou desfragmenta\u00e7\u00e3o do \u00edndice\r\nSELECT node_id,physical_operator_name, SUM(row_count) row_count, \r\n  SUM(estimate_row_count) AS estimate_row_count, \r\n  CAST(SUM(row_count)*100 AS float)\/SUM(estimate_row_count)  percent_completed\r\nFROM sys.dm_exec_query_profiles   \r\nWHERE session_id= (colocar o SPID da conex\u00e3o que quer monitorar)\r\nGROUP BY node_id,physical_operator_name  \r\nORDER BY node_id;<\/pre>\n<p>Segue exemplo do status da cria\u00e7\u00e3o de um \u00edndice em uma tabela Heap:<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9367 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/ExemploCriacaoIndiceHeapTabelaGigante.png\" alt=\"\" width=\"543\" height=\"264\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/ExemploCriacaoIndiceHeapTabelaGigante.png 736w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/ExemploCriacaoIndiceHeapTabelaGigante-300x146.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/ExemploCriacaoIndiceHeapTabelaGigante-700x340.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/ExemploCriacaoIndiceHeapTabelaGigante-410x199.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/ExemploCriacaoIndiceHeapTabelaGigante-100x49.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/ExemploCriacaoIndiceHeapTabelaGigante-275x134.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/ExemploCriacaoIndiceHeapTabelaGigante-20x10.png 20w\" sizes=\"auto, (max-width: 543px) 100vw, 543px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Repare que essa tabela tem <strong>431 milh\u00f5es de linhas<\/strong> (coluna <strong>estimate_row_count<\/strong>), <strong>row_count<\/strong> mostra quantas linhas j\u00e1 foram processadas pelo operador (nesse caso 7,3 milh\u00f5es de linhas) e a <strong>\u00faltima coluna<\/strong> mostra o <strong>percentual de execu\u00e7\u00e3o<\/strong> desse operador (nessa caso s\u00f3 tinha feito 1,7%).<\/p>\n<p>Segue um exemplo da execu\u00e7\u00e3o de um REBUILD em um \u00edndice clustered:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-9368 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/MonitorandoRebuildIndiceClustered.png\" alt=\"\" width=\"543\" height=\"245\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/MonitorandoRebuildIndiceClustered.png 753w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/MonitorandoRebuildIndiceClustered-300x136.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/MonitorandoRebuildIndiceClustered-700x317.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/MonitorandoRebuildIndiceClustered-410x186.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/MonitorandoRebuildIndiceClustered-100x45.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/MonitorandoRebuildIndiceClustered-275x125.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/09\/MonitorandoRebuildIndiceClustered-20x9.png 20w\" sizes=\"auto, (max-width: 543px) 100vw, 543px\" \/><\/p>\n<p>Repare que essa tabela tem <strong>21 milh\u00f5es de linhas<\/strong> (coluna <strong>estimate_row_count<\/strong>), <strong>row_count<\/strong> mostra quantas linhas j\u00e1 foram processadas pelo operador (nesse caso 225 mil linhas) e a <strong>\u00faltima coluna<\/strong> mostra o <strong>percentual de execu\u00e7\u00e3o<\/strong> desse operador (nessa caso s\u00f3 tinha feito 1,0 %).<\/p>\n<p>Fica ai o aprendizado de um comando que j\u00e1 est\u00e1 dipon\u00edvel para n\u00f3s h\u00e1 algum tempo.<\/p>\n<p>Link do Script no GitHub:\u00a0<a href=\"https:\/\/github.com\/FabricioLimaSolucoesEmBD\/SQLScripts\/blob\/master\/Tuning\/Indices\/Stauts%20Cria%C3%A7%C3%A3o%20Indice.txt\" target=\"_blank\" rel=\"noopener\">Script Post<\/a><\/p>\n<p><b>Gostou da dica?<\/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, Quantas vezes voc\u00eas j\u00e1 criaram um \u00edndice em produ\u00e7\u00e3o e ficaram torcendo, apertando F5 toda hora, rezando, fazendo promessa para essa cria\u00e7\u00e3o acabar mais r\u00e1pido e resolver seu problema cr\u00edtico? Ficamos naquela d\u00favida, ser\u00e1 que cancelo ou n\u00e3o? Ser\u00e1 que j\u00e1 est\u00e1 acabando ou ainda vai demorar muito para criar esse \u00edndice? J\u00e1 [&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":[1661,1662,1660,89,33],"class_list":["post-9365","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-create-index","tag-criacao-de-indice-demorando","tag-dm_exec_query_profiles","tag-rebuild","tag-sql-server"],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":4598,"url":"https:\/\/fabriciolima.net\/blog\/2016\/06\/07\/queries-do-dia-a-dia-rotina-para-criar-um-historico-de-utilizacao-de-indices\/","url_meta":{"origin":9365,"position":0},"title":"Queries do Dia a Dia: Rotina para criar um Hist\u00f3rico de Utiliza\u00e7\u00e3o de \u00cdndices","author":"Fabr\u00edcio Lima","date":"7 de junho de 2016","format":false,"excerpt":"Ol\u00e1 Pessoal, Muitos de voc\u00eas j\u00e1 devem ter visto que a DMV sys.dm_db_index_usage_stats retorna a utiliza\u00e7\u00e3o dos \u00edndices da nossa base de dados. Quem j\u00e1 assistiu minha palestra Me tornei um DBA, o que devo aprender para ontem?, ou participou do meu Treinamento de Tarefas do Dia a Dia de\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\/PostHistoricoUtilizacaoIndices-1024x187.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/04\/PostHistoricoUtilizacaoIndices-1024x187.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/04\/PostHistoricoUtilizacaoIndices-1024x187.jpg?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":8435,"url":"https:\/\/fabriciolima.net\/blog\/2017\/12\/11\/melhorando-a-performance-de-consultas-no-totvs-protheus-parte-1\/","url_meta":{"origin":9365,"position":1},"title":"Melhorando a Performance de Consultas no Totvs Protheus &#8211; Parte 1","author":"Fabr\u00edcio Lima","date":"11 de dezembro de 2017","format":false,"excerpt":"Fala Pessoal, No meu dia a dia de Consultor SQL Server, atendo muitos clientes com Totvs Protheus e SQL Server. Inclusive j\u00e1 compartilhei algumas experi\u00eancias com voc\u00eas aqui no Blog: 5 motivos para quem utiliza o Protheus (Totvs) contratar um DBA SQL Server Migrando um SQL Server 2008 Totvs Protheus\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\/queryprotheysparte1_1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte1_1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte1_1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte1_1.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/12\/queryprotheysparte1_1.png?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":6982,"url":"https:\/\/fabriciolima.net\/blog\/2017\/05\/01\/criando-um-e-mail-de-checklist-diario-no-sql-server\/","url_meta":{"origin":9365,"position":2},"title":"Criando um E-mail de CheckList Di\u00e1rio no SQL Server","author":"Fabr\u00edcio Lima","date":"1 de maio de 2017","format":false,"excerpt":"Update dia 22\/09\/2019: Veja nesse post uma nova vers\u00e3o para a cria\u00e7\u00e3o desse Checklist para seu BD SQL Server junto com outros 40 alertas: http:\/\/www.fabriciolima.net\/blog\/2019\/09\/22\/passo-a-passo-de-como-criar-40-alertas-para-monitorar-seu-sql-server\/ \u00a0 \u00a0 Ol\u00e1 Pessoal, No dia 07\/03\/2010 eu fiz meu primeiro post para esse blog: Apresenta\u00e7\u00e3o Contudo, foi no dia 24\/03\/2010 que eu comecei a\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":"checklist","src":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2014\/01\/checklist.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":440,"url":"https:\/\/fabriciolima.net\/blog\/2011\/02\/16\/monitorando-a-fragmentacao-dos-indices\/","url_meta":{"origin":9365,"position":3},"title":"Monitorando a fragmenta\u00e7\u00e3o dos \u00edndices","author":"Fabr\u00edcio Lima","date":"16 de fevereiro de 2011","format":false,"excerpt":"Um dos grandes problemas que temos com rela\u00e7\u00e3o a performance \u00e9 devido a fragmenta\u00e7\u00e3o de nossos \u00edndices. Nesse post mostro como criar uma rotina para monitorar a fragmenta\u00e7\u00e3o dos \u00edndices do Banco de Dados e diminuir essa fragmenta\u00e7\u00e3o.","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\/2011\/02\/Fragmentacao_Indice-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2011\/02\/Fragmentacao_Indice-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2011\/02\/Fragmentacao_Indice-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2011\/02\/Fragmentacao_Indice-1.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":8314,"url":"https:\/\/fabriciolima.net\/blog\/2017\/11\/03\/pass-summit-2017-dia-2\/","url_meta":{"origin":9365,"position":4},"title":"PASS SUMMIT 2017 \u2013 Dia 2","author":"Fabr\u00edcio Lima","date":"3 de novembro de 2017","format":false,"excerpt":"Fala Pessoal, O segundo dia do Pass Summit come\u00e7ou com nosso amigo Roberto Fonseca sendo premiado como\u00a0PASSion Award 2017 por todas as suas contribui\u00e7\u00f5es no \u00faltimo ano. Parab\u00e9ns Roberto!!! Levando o nome do Brasil para o mundo. \u00a0 Em seguida tivemos um keynote bem deep dive sobre CosmosDB. Altamente escal\u00e1vel\u2026","rel":"","context":"Em &quot;Eventos&quot;","block_context":{"text":"Eventos","link":"https:\/\/fabriciolima.net\/blog\/category\/eventos\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/11\/roberto.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":133,"url":"https:\/\/fabriciolima.net\/blog\/2010\/10\/15\/casos-do-dia-a-dia-exclusao-de-campo-text-nao-libera-espaco-em-disco\/","url_meta":{"origin":9365,"position":5},"title":"Casos do Dia a Dia: Exclus\u00e3o de campo Text n\u00e3o libera espa\u00e7o em disco?","author":"Fabr\u00edcio Lima","date":"15 de outubro de 2010","format":false,"excerpt":"Fala pessoal, Compartilhando mais uma experi\u00eancia que tive no meu dia a dia de trabalho, ap\u00f3s a verifica\u00e7\u00e3o com a equipe de desenvolvimento da possibilidade de exclus\u00e3o de 2 campos do tipo text de uma tabela muito utilizada, fui com toda empolga\u00e7\u00e3o na minha base de testes verificar o quanto\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":"spaceused_antes","src":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2010\/10\/spaceused_antes_thumb.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\/9365","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=9365"}],"version-history":[{"count":7,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/9365\/revisions"}],"predecessor-version":[{"id":9382,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/9365\/revisions\/9382"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=9365"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=9365"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=9365"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}