{"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":""},"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"],"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}]}}