{"id":4598,"date":"2016-06-07T10:22:22","date_gmt":"2016-06-07T13:22:22","guid":{"rendered":"http:\/\/www.fabriciolima.net\/blog\/?p=4298"},"modified":"2016-07-23T14:55:15","modified_gmt":"2016-07-23T17:55:15","slug":"queries-do-dia-a-dia-rotina-para-criar-um-historico-de-utilizacao-de-indices","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2016\/06\/07\/queries-do-dia-a-dia-rotina-para-criar-um-historico-de-utilizacao-de-indices\/","title":{"rendered":"Queries do Dia a Dia: Rotina para criar um Hist\u00f3rico de Utiliza\u00e7\u00e3o de \u00cdndices"},"content":{"rendered":"<p>Ol\u00e1 Pessoal,<\/p>\n<p>Muitos de voc\u00eas j\u00e1 devem ter visto que a DMV <em>sys.dm_db_index_usage_stats<\/em> retorna a utiliza\u00e7\u00e3o dos \u00edndices da nossa base de dados.<\/p>\n<p>Quem j\u00e1 assistiu minha palestra <a href=\"https:\/\/www.fabriciolima.net\/blog\/2016\/04\/11\/como-foi-o-sqlsat488-em-joinville-sc\/\" target=\"_blank\">Me tornei um DBA, o que devo aprender para ontem?<\/a>, ou participou do meu <a href=\"https:\/\/www.fabriciolima.net\/blog\/cursos-online\/treinamento-tarefas-do-dia-a-dia-de-um-dba-online\/\" target=\"_blank\">Treinamento de Tarefas do Dia a Dia de um DBA<\/a>, j\u00e1 me viu falando dessa DMV.<\/p>\n<p>Essa DMV \u00e9 SENSACIONAL!!!<\/p>\n<p><!--more--><\/p>\n<p>Com essa informa\u00e7\u00e3o, podemos excluir aqueles \u00edndices criados h\u00e1 10 anos e que ningu\u00e9m tinha coragem de excluir com medo de impactar no ambiente.<\/p>\n<p>Agora voc\u00eas sabem se o \u00edndice \u00e9 utilizado e decidem se podem excluir ou n\u00e3o.<\/p>\n<p>Para excluir um \u00edndice voc\u00ea tem que monitorar PELO MENOS 1 m\u00eas se esse \u00edndice est\u00e1 sendo utilizado para algo importante.<\/p>\n<p>O problema \u00e9 que essa DMV \u00e9 reiniciada toda vez que o SQL Server \u00e9 reiniciado.<\/p>\n<p>E tem mais&#8230;<\/p>\n<p>Muitos n\u00e3o sabem, mas no SQL Server 2012 e 2014 ela tamb\u00e9m \u00e9 reiniciada quando realizamos um REBUILD no \u00edndice. Ent\u00e3o, sua rotina de desfragmenta\u00e7\u00e3o de \u00edndices tamb\u00e9m pode atrapalhar na an\u00e1lise de quantas vezes o \u00edndice est\u00e1 sendo utilizado.<\/p>\n<p>Esse problema de restart da dmv na execu\u00e7\u00e3o do REBUILD foi resolvido no SQL Server 2016 conforme post abaixo:<\/p>\n<p><a href=\"http:\/\/www.littlekendra.com\/2016\/03\/07\/sql-server-2016-rc0-fixes-index-usage-stats-bug-missing-indexes-still-broken\/\" target=\"_blank\">http:\/\/www.littlekendra.com\/2016\/03\/07\/sql-server-2016-rc0-fixes-index-usage-stats-bug-missing-indexes-still-broken\/<\/a><\/p>\n<p>Como resolver isso e ter certeza da quantidade de vezes que seu \u00edndice est\u00e1 sendo utilizado?<\/p>\n<p><span style=\"color: #008000;\"><strong>R: Criando um hist\u00f3rico de utiliza\u00e7\u00e3o de \u00edndices.<\/strong><\/span><\/p>\n<p>Basta abrir o arquivo abaixo na base que deseja criar esse log e executar:<\/p>\n<p><a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/06\/HistoricoUtilizacaoIndices.txt\" target=\"_blank\">HistoricoUtilizacaoIndices<\/a><\/p>\n<p>O script vai criar as tabelas abaixo:<\/p>\n<ul>\n<li>BaseDados<\/li>\n<li>Tabela<\/li>\n<li>Servidor<\/li>\n<li>Historico_Utilizacao_Indices<\/li>\n<\/ul>\n<p>A view para facilitar a visualiza\u00e7\u00e3o das informa\u00e7\u00f5es:<\/p>\n<ul>\n<li>vwHistorico_Utilizacao_Indice<\/li>\n<\/ul>\n<p>E a procedure que far\u00e1 a carga dos dados nas Tabelas:<\/p>\n<ul>\n<li>stpCarga_Utilizacao_Indice<\/li>\n<\/ul>\n<p>Depois de executar o script, basta criar um job para executar a procedure stpCarga_Utilizacao_Indice diariamente.<\/p>\n<p>Para visualiza\u00e7\u00e3o, criei uma tabela e fiz um insert de 1000 linhas:<\/p>\n<p>CREATE TABLE Teste_Utilizacao_Indice(<br \/>\nCod INT IDENTITY PRIMARY key,<br \/>\nDt_Log DATETIME )<\/p>\n<p>INSERT INTO Teste_Utilizacao_Indice(Dt_log)<br \/>\nSELECT GETDATE()<br \/>\nGO 1000<\/p>\n<p>Em seguida executei a procedure de carga:<\/p>\n<p>EXEC stpCarga_Utilizacao_Indice<\/p>\n<p>O resultado pode ser visto na view abaixo:<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/04\/PostHistoricoUtilizacaoIndices.jpg\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4299\" title=\"PostHistoricoUtilizacaoIndices\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2016\/04\/PostHistoricoUtilizacaoIndices-1024x187.jpg\" alt=\"\" width=\"655\" height=\"120\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Voc\u00ea tem a data do log, o Servidor, a Base, a Tabela, o \u00edndice, a quantidade de Seek, Scans e Lookup, se o \u00edndice j\u00e1 teve atualiza\u00e7\u00e3o e a \u00faltima vez que esse \u00edndice foi utilizado.<\/p>\n<p>Com isso, voc\u00ea consegue monitorar a utiliza\u00e7\u00e3o dos \u00edndices nos \u00faltimos 30 ou 60 dias (Seek+Scans+Lookup) e analizar se esse \u00edndice est\u00e1 valendo a pena manter ou se \u00e9 melhor exclu\u00edr.<\/p>\n<p>J\u00e1 utilizei muito esse hist\u00f3rico de utiliza\u00e7\u00e3o de \u00edndices para excluir \u00edndices em ambientes cr\u00edticos.<\/p>\n<p>Agora voc\u00eas tamb\u00e9m podem implementar.<\/p>\n<p>Script simples, mas j\u00e1 est\u00e1 a\u00ed prontinho para voc\u00eas utilizarem.<\/p>\n<p><b>Gostou dessa dica?<\/b><\/p>\n<p>Cadastre seu e-mail para receber novos Posts e curta minha <a href=\"https:\/\/www.facebook.com\/FabricioLimaSolucoesemBancodeDados\/\" target=\"_blank\">P\u00e1gina no Facebook<\/a> para receber Dicas de Leituras e Eventos sobre SQL Server.<\/p>\n<p>Aprenda a criar essa e muitas outras rotinas importantes para o seu dia a dia de DBA no meu <a href=\"https:\/\/www.fabriciolima.net\/cursos-online\/treinamento-tarefas-do-dia-a-dia-de-um-dba-online\/\" target=\"_blank\">Treinamento de Tarefas do Dia a Dia de um DBA<\/a>.<\/p>\n<p>Abra\u00e7os,<\/p>\n<p>Fabr\u00edcio Lima<\/p>\n<p>MCITP \u2013 Database Administrator<\/p>\n<p>Consultor e Instrutor SQL Server<\/p>\n<p>Trabalha com SQL Server desde 2006<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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 um DBA, j\u00e1 me viu [&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,1248,33,280],"tags":[111,1318,1313,1315,110,1314,1316,1317,33],"class_list":["post-4598","post","type-post","status-publish","format-standard","hentry","category-administracao-de-bd","category-queries-do-dia-a-dia","category-sql-server","category-virtual-pass-br","tag-dm_db_index_usage_stats","tag-dvm-sql-serverdmv-indices","tag-historico-indices","tag-historico-utilizacao-indices","tag-indice","tag-indices-utilizados","tag-monitoramento-indices","tag-quais-indices-sao-utilizados","tag-sql-server"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/4598","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=4598"}],"version-history":[{"count":0,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/4598\/revisions"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=4598"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=4598"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=4598"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}