Desde su aparición en SQL Server 2005 las DMVs han sido una herramienta muy necesaria para poder detectar y solucionar problemas de rendimiento en SQL Server.
SQL Azure está basado en SQL Server, pero desgraciadamente muchas de las DMVs no está disponibles en esta primera versión de Azure….aunque sí que quieren ir añadiéndolas en sucesivas versiones. Esperemos que llegue pronto!
El principal problema por el cuál no están soportadas todas las DMVs es porque en SQL Server éstas funcionan a nivel de instancia, cosa que en SQL Azure no es posible, tendrían que funcionar a nivel de base de datos. Este trabajo es el que deben hacer para que todas las DMVs estén accesibles también en SQL Azure.
Por ejemplo, el permiso que hay que tener para trabajar con DMVs en Azure es VIEW DATABASE STATE, mientras que en SQL Server es VIEW SERVER STATE ).
Microsoft ha publicado un documento bastante interesante dónde se comentan las diferentes DMVs disponibles en esta primera versión de SQL Azure, documento que podéis descargar desde aquí.
Algún ejemplo sacado de la documentación…
Identificar los planes de ejecución que provocan excesivas recompilaciones.
select top 25 sql_text.text, sql_handle, plan_generation_num, execution_count, dbid, objectid from sys.dm_exec_query_stats a cross apply sys.dm_exec_sql_text(sql_handle) as sql_text where plan_generation_num >1 order by plan_generation_num desc
Identificar planes de ejecución ineficientes:
select highest_cpu_queries.plan_handle, highest_cpu_queries.total_worker_time, q.dbid, q.objectid, q.number, q.encrypted, q.[text] from (select top 50 qs.plan_handle, qs.total_worker_time from sys.dm_exec_query_stats qs order by qs.total_worker_time desc) as highest_cpu_queries cross apply sys.dm_exec_sql_text(plan_handle) as q order by highest_cpu_queries.total_worker_time desc