tengo un cliente que su DB usada por un aproximado de 60 clientes(pc), antes que yo llegara me comentaron que tenían muchos problemas con lentitud y bloqueos
el sistema que usan esta hecho en vb6 con sql server 2008
lo primero que hice fue identificar las consultas que mas demoraban y usando el analizador de planes de ejecución me recomendaba crear indices para mejorar las consultas los fui creando conforme identificada las consultas problemáticas y veía su plan de ejecución y las recomendaciones que sugería y posteriormente casi 2 semanas no hubo mucha incidencia de bloqueos, pensé que los indices ayudaron mucho..
pero luego volvió a parecer el problema y el tiempo de espera total llegaba hasta en algunos días a 5 horas, adjunto un gráfico con los tiempos de espera total por día
aquí algunas imágenes de días específicos la barra de color plomizo representa los bloqueos
en el tiempo que se presentaron los problemas y bloqueos agregue unos cuantos indices mas, los problemas empezaron al día siguiente que agregue algunos indices poco a poco fue aumentando y haciéndose mas larga los tiempos de espera por bloqueo, creen que pueda ser los indices la causa de esto?
use esta consulta para identificar los indices que podrían ayudar a mejorar las consultas
Código SQL:
Ver original
SELECT db_name(d.database_id) AS DB, object_name(d.object_id, d.database_id) tabla, s.avg_user_impact, s.user_seeks, d.equality_columns, d.inequality_columns, d.included_columns, p.ROW_COUNT, l.num_esperas, l.ms_esperas, s.last_user_seek, create_index = REPLACE('create nonclustered index IX_' + object_name(d.object_id, d.database_id) +'_A# on ' + object_name(d.object_id, d.database_id) + ' (' + isnull(d.equality_columns + ',', '') + isnull(d.inequality_columns, '') + ') ' + isnull('include (' + d.included_columns + ')', '') + ' with(online = on)', ',)', ')') FROM sys.dm_db_missing_index_details d LEFT JOIN sys.dm_db_missing_index_groups g ON d.index_handle =g.index_handle LEFT JOIN sys.dm_db_missing_index_group_stats s ON g.index_group_handle = s.group_handle LEFT JOIN sys.dm_db_partition_stats p ON d.object_id = p.object_id AND p.index_id < 2 LEFT JOIN (SELECT database_id, object_id, ROW_NUMBER() OVER (partition BY database_id ORDER BY SUM(page_io_latch_wait_in_ms) DESC) AS ROW_NUMBER, SUM(page_io_latch_wait_count) AS num_esperas, SUM(page_io_latch_wait_in_ms) AS ms_esperas, SUM(range_scan_count) AS range_scans, SUM(singleton_lookup_count) AS index_lookups FROM sys.dm_db_index_operational_stats(NULL, NULL, NULL, NULL) WHERE page_io_latch_wait_count > 0 GROUP BY database_id, object_id) l ON d.object_id = l.object_id AND d.database_id = l.database_id WHERE d.database_id = db_id() AND s.last_user_seek > dateadd(dd, -7, getdate()) ORDER BY --floor(s.avg_user_impact) desc, s.user_seeks DESC
y también me ayude del analizador de plan de ejecución que muchos indices que sugería el analizador estaban en el resultado de esa consulta
también realice cambios en los planes de mantenimiento de diariamente reorganizar los indices y 2 veces por semana regeneración de indices
aquí tengo los archivos de los estados de fragmentacion de los indices antes que se ejecutaran los planes
http://dl.dropbox.com/u/5247806/indicesFragmentados.xls
y tengo esta información que saque con la vista dm_db_index_operational_stats
según tengo entendido la columna page_lock_wait_in_ms representa el tiempo de bloqueo y tengo una que llega a los 48 minutos esta en la primera fila...
http://dl.dropbox.com/u/5247806/estadoIndices.xlsx
quizás sea el indice el que causo ese cambio en en los tiempos de espera no tengo seguro eso si alguien podría confirmarme o decirme si hay algo anomalo en la información que comparto en esos documentos
y por ultimo la otra alternativa que estoy planteando es usar versionamiento de filas(READ_COMMITED_SPANSHOP en ON) y evitar esos bloqueos la mayoría son bloqueos compartidos creo que esto se da mas por las consultas select que crean bloqueos compartidos
no eh tenido experiencia con esto si alguien ah tenido por fa que me comparta su experiencia si esto podría mejorar notablemente la performance y el tema de los bloqueos
si es necesario mas información pídanme para postearlo por favor
gracias saludos