Manejo de consultas para determinar el performance de la base de datos.
SQL 2005 y el 2008 contienen nuevas vistas para controlar y monitorear la base de datos. En este artículo voy a incluir algunos ejemplos hechos por Microsoft.
El script repository (repositorio de scripts).
Microsoft tiene un repositorio de Scripts para varias de sus tecnologías (IIS, SQL Server, Windows, etc). Estos scripts nos permiten automatizar las tareas de administración. El link es:
http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx?mfr=true
En este artículo me voy a enfocar en medición de performance de sql server 2005. Para entender los scripts voy a hablar de las vistas dinámicas de sql server.
SQL Server tienen unas vistas de sistema llamadas vistas dinámicas. Estas vistas contienen el prefijo sys.dm
Estas vistas nos ayudan mucho a:
· Encontrar tablas fragmentadas
· Índices sin uso
· Consultas que consumen más CPU
· Tablas bloqueadas
· Configuraciones
· Etc, etc
En el script repository existe una sección de scripts para sql server 2005:
http://www.microsoft.com/technet/scriptcenter/scripts/sql/sql2005/default.mspx
Lamentablemente la explicación está en ingles. Vamos a ver algunos ejemplos prácticos:
Ejemplo 1.
Mostrar las 50 consultas que consumen más tiempo de CPU:
http://www.microsoft.com/technet/scriptcenter/scripts/sql/sql2005/perf/sql05vb026.mspx
SELECT TOP 50
qs.total_worker_time/qs.execution_count as [Avg CPU Time],
SUBSTRING(qt.text,qs.statement_start_offset/2,
(case when qs.statement_end_offset = -1
then len(convert(nvarchar(max), qt.text)) * 2
else qs.statement_end_offset end -qs.statement_start_offset)/2)
as query_text,
qt.dbid, dbname=db_name(qt.dbid),
qt.objectid
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY
[Avg CPU Time] DESC
Una de las vistas dinámicas más útiles es sys.dm_exec_query_stats
/*Muestra tablas con índices con fragmentación superior a 30 % */
La fragmentación se la maneja con la vista del sistema sys.dm_db_index_physical_stats
En el siguiente link microsoft muestra como reconstruir índices con altos niveles de fragmentación:
http://technet.microsoft.com/es-es/library/ms188917.aspx (Ejemplo D)
qs.total_worker_time/qs.execution_count as [Avg CPU Time],
SUBSTRING(qt.text,qs.statement_start_offset/2,
(case when qs.statement_end_offset = -1
then len(convert(nvarchar(max), qt.text)) * 2
else qs.statement_end_offset end -qs.statement_start_offset)/2)
as query_text,
qt.dbid, dbname=db_name(qt.dbid),
qt.objectid
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY
[Avg CPU Time] DESC
Una de las vistas dinámicas más útiles es sys.dm_exec_query_stats
/*Muestra tablas con índices con fragmentación superior a 30 % */
La fragmentación se la maneja con la vista del sistema sys.dm_db_index_physical_stats
En el siguiente link microsoft muestra como reconstruir índices con altos niveles de fragmentación:
http://technet.microsoft.com/es-es/library/ms188917.aspx (Ejemplo D)
Ejemplo 2
Este link muestra las tablas con índices cuya fragmentación es superior a 30%
SELECT
sip.object_id,
so.name,
partition_number,
index_type_desc,
index_id,
avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (NULL, NULL, NULL, NULL, NULL) sip
left join
sys.objects so
ON
sip.object_id=so.object_id
WHERE avg_fragmentation_in_percent >30
/*Ver tablas bloqueadas*/
En fin, la funcionalidad de las vistas dinámicas es múltiple.
Si tienen dudas, escriban a este blog.
AArtículos relacionados
Comentarios
Publicar un comentario