{"id":1121,"date":"2015-02-02T21:12:51","date_gmt":"2015-02-02T20:12:51","guid":{"rendered":"http:\/\/clemente.pamplona.name\/dba\/?p=1121"},"modified":"2015-02-03T11:46:14","modified_gmt":"2015-02-03T10:46:14","slug":"indices-sin-uso-en-sqlserver","status":"publish","type":"post","link":"http:\/\/clemente.pamplona.name\/dba\/indices-sin-uso-en-sqlserver\/","title":{"rendered":"Indices sin uso en SQLserver"},"content":{"rendered":"<p>Hoy vamos a ver una entrada referente a SQLserver.<\/p>\n<p>Habitualmente cuando se habla de ajuste de \u00edndices todos tendemos a pensar en la creaci\u00f3n de los mismos, sin embargo,la revisi\u00f3n del uso de los \u00edndices y la eliminaci\u00f3n de los \u00edndices que no se usan es una tarea de administraci\u00f3n muy recomendable, tanto por el aprovechamiento del espacio en disco como por la mejora que conlleva sobre la entrada salida (recordemos que cada inserci\u00f3n en una tabla indexada conlleva la actualizaci\u00f3n de los \u00edndices asociados).<\/p>\n<p>SQLServer tiene desde la versi\u00f3n 2005  una tabla llamada <a href=\"https:\/\/msdn.microsoft.com\/es-es\/library\/ms188755.aspx\">SYS.DM_DB_INDEX_USAGE_STATS<\/a> en la cual podemos hacer un seguimiento del uso de los indices de las bases de datos.<\/p>\n<p>Los campos con los que nos quedaremos de esta tabla son <\/p>\n<ul>\n<li><b>user_seeks: <\/b>N\u00famero de consultas de b\u00fasqueda realizadas por el usuario.\n<li><b>user_scans: <\/b>N\u00famero de consultas de recorrido realizadas por el usuario.\n<li><b>user_lookups: <\/b>N\u00famero de b\u00fasquedas de marcadores realizadas por consultas de usuario.\n<li><b>user_updates: <\/b>N\u00famero de consultas de actualizaci\u00f3n realizadas por el usuario.\n<\/ul>\n<p>As\u00ed pues, lo que debemos de buscar son \u00edndices sobre los que no hayamos hecho seeks,scans o lookups.<br \/>\nEsto lo podemos hacer con la consulta:<br \/>\n<EM><br \/>\n  SELECT OBJECT_NAME(S.[OBJECT_ID]) AS [OBJECT NAME],<br \/>\n       I.[NAME] AS [INDEX NAME],<br \/>\n       USER_SEEKS,<br \/>\n       USER_SCANS,<br \/>\n       USER_LOOKUPS,<br \/>\n       USER_UPDATES<br \/>\nFROM   SYS.DM_DB_INDEX_USAGE_STATS AS S<br \/>\n       INNER JOIN SYS.INDEXES AS I ON I.[OBJECT_ID] = S.[OBJECT_ID] AND I.INDEX_ID = S.INDEX_ID<br \/>\nWHERE  OBJECTPROPERTY(S.[OBJECT_ID],&#8217;IsUserTable&#8217;) = 1<br \/>\n       AND S.database_id = DB_ID()<br \/>\n          AND user_seeks=0<br \/>\n           AND user_scans=0<br \/>\n           AND user_lookups=0<br \/>\n\t\t\tORDER by user_updates DESC;<br \/>\nGO<br \/>\n<\/EM><br \/>\nEsta consulta nos devuelve algo similar a :<\/p>\n<a href=\"http:\/\/clemente.pamplona.name\/dba\/wp-content\/uploads\/2015\/01\/indices_SQLSERVER_STATS.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/clemente.pamplona.name\/dba\/wp-content\/uploads\/2015\/01\/indices_SQLSERVER_STATS.jpg\" alt=\"Resultado de la consulta\" width=\"769\" height=\"178\" class=\"size-full wp-image-1129\" srcset=\"http:\/\/clemente.pamplona.name\/dba\/wp-content\/uploads\/2015\/01\/indices_SQLSERVER_STATS.jpg 769w, http:\/\/clemente.pamplona.name\/dba\/wp-content\/uploads\/2015\/01\/indices_SQLSERVER_STATS-300x69.jpg 300w, http:\/\/clemente.pamplona.name\/dba\/wp-content\/uploads\/2015\/01\/indices_SQLSERVER_STATS-500x115.jpg 500w\" sizes=\"auto, (max-width: 769px) 100vw, 769px\" \/><\/a>\n<p>Donde podemos ver como hay \u00edndices que se encuentran sobre tablas muy actualizadas ( valor de <i>user_updates<\/i> muy alto) pero que no tienen uso en b\u00fasquedas, y otros que se encuentran sobre tablas que ni siquiera se actualizan.<\/p>\n<p>Ahora nuestro trabajo es explorar esas tablas y ver si estos \u00edndices tienen sentido para, en caso de no tenerlo eliminarlos del sistema.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hoy vamos a ver una entrada referente a SQLserver. Habitualmente cuando se habla de ajuste de \u00edndices todos tendemos a pensar en la creaci\u00f3n de los mismos, sin embargo,la revisi\u00f3n del uso de los \u00edndices y la eliminaci\u00f3n de los &hellip; <a href=\"http:\/\/clemente.pamplona.name\/dba\/indices-sin-uso-en-sqlserver\/\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[60],"tags":[201,196,244,53],"class_list":["post-1121","post","type-post","status-publish","format-standard","hentry","category-12c","tag-sqlserver-2","tag-sys-dm_db_index_usage_stats","tag-tunning","tag-windows"],"_links":{"self":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/1121","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/comments?post=1121"}],"version-history":[{"count":9,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/1121\/revisions"}],"predecessor-version":[{"id":1131,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/1121\/revisions\/1131"}],"wp:attachment":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/media?parent=1121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/categories?post=1121"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/tags?post=1121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}