Al igual que DMV, SQL Server también puede convertirse en un salvador en SQL Azure

Ya sea SQL Server o una versión mejorada de SQL Server en la nube llamada SQL Azure, cuando se trata de monitoreo, no hay nada más poderoso que DMV (Dynamic Management Views). Para empezar, los controles de vista dinámica (DMV) son un conjunto de vistas virtuales que revelan los estados internos de la implementación de SQL Server. Este es un paso importante para monitorear y solucionar problemas de cualquier implementación de SQL Server desde versiones locales hasta versiones habilitadas para la nube.

En esta publicación de blog, hagamos un recorrido por algunos de los poderosos DMV que podemos usar cuando trabajamos con SQL Azure. No todos los DMV disponibles para implementación local están disponibles en SQL Azure y viceversa. Ahora veremos algunos de los DMV comunes que necesita saber cuando trabaja con SQL Azure.

Descargue un libro electrónico gratuito sobre cómo administrar varias bases de datos

Índice

    DMV básico

    Algunos de los DMV básicos de sesiones, solicitudes, conexiones, etc. son comunes a ambos ambientes. Entonces el DBA los tratará fácilmente.

    -- Will return the Server Name we are running on
    SELECT @@Servername
    
    -- DMV: dm_exec_connections gets the connection information
    SELECT getdate() as "RunDateTime", c.* 
    FROM sys.dm_exec_connections c
    Go
     
    -- DMV: dm_exec_sessions gives the current sessions
    SELECT getdate() as "RunDateTime", s.*
    FROM sys.dm_exec_sessions s
    Go
    
    --DMV: dm_exec_requests gives the active sessions/spids currently
    SELECT getdate() as "RunDateTime", st.text, r.* 
    FROM sys.dm_exec_requests r
    CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) as st
    GO
    

    Solucionar problemas de lectura/escritura y bloqueo

    Al final del día, SQL Azure lanza una instancia similar de SQL Server entre bastidores. Por lo tanto, la resolución de problemas, que incluye lectura y escritura, se puede obtener de los planes de consultas y estadísticas de consultas del DMV. La consulta habitual en el top 10 se vería así:

    would look like:
    -- Get top 10 queries by total_logical_reads
    SELECT TOP 10 getdate() AS "Today",
        st.text, qp.query_plan, 
        (qs.total_logical_reads/qs.execution_count) AS avg_logical_reads,
        (qs.total_logical_writes/qs.execution_count) AS avg_logical_writes,
        (qs.total_physical_reads/qs.execution_count) AS avg_phys_reads,
        qs.*
    	FROM sys.dm_exec_query_stats AS qs
    	CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
    	CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp
    	ORDER BY qs.total_logical_reads DESC
    GO
    
    -- Get top 10 queries by total_logical_writes
    SELECT TOP 10 getdate() AS "Today",
         st.text, qp.query_plan, 
        (qs.total_logical_reads/qs.execution_count) AS avg_logical_reads,
        (qs.total_logical_writes/qs.execution_count) AS avg_logical_writes,
        (qs.total_physical_reads/qs.execution_count) AS avg_phys_reads,
        qs.*
    	FROM sys.dm_exec_query_stats AS qs
    	CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
    	CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp
    	ORDER BY qs.total_logical_writes DESC
    GO
    

    Mencioné anteriormente en mis blogs que el bloqueo es inevitable cuando se trabaja con SQL Server, pero la idea es reducir el tiempo de bloqueo en el sistema.

    -- SQL Statement which are blocking
    SELECT wait_type
          , wait_time
          , wait_resource
          , database_id
          , blocking_session_id
    	  , r.command
    	  , qt.dbid
          ,SUBSTRING(qt.text
        , CASE WHEN (r.statement_start_offset IS NULL OR r.statement_start_offset <= 1) 
                THEN 1 ELSE (r.statement_start_offset/2) END
        , CASE WHEN r.statement_end_offset IS NULL 
                THEN len(qt.text) ELSE ((r.statement_end_offset-r.statement_start_offset)/2) END
            )  AS stmt
           , qp.query_plan
    FROM sys.dm_exec_requests r
          CROSS APPLY sys.dm_Exec_sql_text(sql_handle) qt
          CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS qp
    WHERE wait_type <> ''
    

    DMV especial en SQL Azure

    Trabajar en cualquier sistema en la nube significa que necesitamos saber cómo usamos nuestro ancho de banda. Esto es muy importante porque pagamos en función del uso del ancho de banda. Además de esto, SQL Azure también nos da la posibilidad de hacer copias de nuestra base de datos o de solo lectura. También están expuestos a través de varios DMV. Déjame enumerarlos para tu referencia.

    Para obtener información sobre el ancho de banda de cada base de datos en su servidor de base de datos SQL.sys.bandwidth_usage
    Para obtener información sobre el estado de la base de datos que se está copiando.sys.base de datos
    Para obtener información sobre réplicas de bases de datos en un servidor determinado.sys.dm_database_copies
    Para obtener información sobre todas las bases de datos de réplica de una base de datos de origen determinada.sys.dm_continuous_copy_status

    Ilustrando el uso simple de cómo un se puede determinar el retraso de la replicación en SQL Azure:

    -- To verify Replication Lag and Replica Status
    SELECT partner_server
    	,last_replication 
    	,replication_lag_sec 
    	,replication_state 
    	,replication_state_desc 
    FROM 
    sys.dm_continuous_copy_status
    

    En este blog, hemos visto algunas de las consultas DMV básicas que se pueden usar cuando se trabaja con SQL Azure. Solo arañamos la superficie cuando trabajamos con el DMV en este blog. En blogs futuros, discutiremos algunos DMV adicionales que se pueden usar como DBA.

    Artículos de interés

    Subir