La clase SqlConnection de ADO.NET 2.0 posee una característica que puede resultar de utilidad en cuertas ocasiones y que permite obtener información estadística sobre las consultas realizadas, de manera muy similar a la que ofrece el Analizador de consultas de SQL Server 2000 o el Management Studio de SQL Server 2005 (si bien no son las mismas).

Esta característica es muy fácil de gestionar gracias a la propiedad StatisticsEnabled de la clase SqlConnection, que sirve como es obvio para habilitar la recogida de estadísticas de las consultas lanzadas a través del objeto SqlConnection instanciado para la ocasión.

Una vez habilitadas las estadísticas se obtienen mediante el método RetrieveStatistics de la misma clase. Éste devuelve un objeto que implementa la interfaz IDictionary, aunque en realidad un poco de reflexión revela que realmente lo que se obtiene es un HashTable, así que es muy fácil de manejar (ahora lo veremos).

El método UpdateStatistics las actualiza al momento actual. Por fin el método ResetStatistics inicializa las estadísticas de esa conexión.

Veamos cómo funcionan y qué datos devuelven con un ejemplo. Para ello he creado rápidamente un proyecto de consola que lanza una consulta simple a la conocida base de datos Northwind y muestra las estadísticas por pantalla:

using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;

public class EstadisticasSQL
{
    public static void Main()
    {
        SqlConnection conn = new SqlConnection(@"server=.\SQL2000;Integrated Security=SSPI;Database=Northwind;");
        conn.StatisticsEnabled = true;
        SqlCommand cmd = new SqlCommand("SELECT * FROM Customers", conn);
        try
        {
            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        
        //Recojo las estadísticas
        Hashtable htStats = (Hashtable) conn.RetrieveStatistics();

        Console.WriteLine("ESTADÍSTICAS DE LA CONSULTA:");
        Console.WriteLine();
        foreach (string stat in htStats.Keys)
        {
            Console.WriteLine("- " + stat + " = " + htStats[stat].ToString() );
        }

        conn.Close();
        Console.ReadLine();
    }
}

Lo que este código arroja por pantalla es lo siguiente:

Como vemos hay bastante información y tal vez la más interesante sea el tiempo que se ha esperado a la respuesta del servidor (NetworkServerTime), los bytes recibidos en forma de paquetes TDS (BytesReceived), el tiempo de ejecución (ExecutionTime) y el número de transacciones (Transactions), aunque cada uno en su caso sabrá qué le interesa.

Otra cosa: no es necesario estar atacando una base de datos SQL Server 2005 para que funciones, basta con usar ADo.NET 2.0. En el ejemplo como puedes comprobar por la cadena de conexión estoy usando un SQL Server 2000 y va estupendamente :-)

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor

Escrito por un humano, no por una IA