VB .NET - Obtendo estatísticas da conexão como SQL Server


Se você precisa por que precisa obter informações sobre sua conexão e ela for feita com um banco de dados SQL Server então você esta garantido.

Você pode obter informação sobre sua conexão com o SQL Server , incluindo bytes enviados e recebidos , tempo de conexão e execução , etc...

Para isso basta usar o método RetrieveStatistics() da classe Connection().

Vamos ver um exemplo básico usando este recurso usando o VS 2010 beta 2 (tô usando e abusando do danado).

No exemplo deste artigo vamos criar uma conexão com o banco de dados Northwind.mdf e obter as estatísticas definindo a propriedade EnableStatistics do objeto Connection para True.

Iremos criar um DataAdapter que será usado para preencher um DataTable com os registros da tabela Products do banco de dados Northwind.mdf.

As estatísticas serão retornados em um objeto Dictionary usando o método RetrieveStatistics() do objeto Connection() e então iremos exibi-lo no controle ListBox.

Então crie um novo projeto do tipo Windows Forms Application com o nome SQL_Estatisticas;

A seguir no formulário padrão form1.vb inclua um controle ListBox(lstEstatisticas) e um controle Button(btnEstatisticas) conforme o leiaute abaixo:

Defina os seguintes namespaces no formulário:

Imports System.Data
Imports System.Data.SqlClient

A seguir no evento Click do botão de comando inclua o código abaixo:

     Private Sub btnEstatistica_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEstatistica.Click

        Dim sqlConnectString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\dados\NORTHWND.MDF;Integrated Security=True;User Instance=True"
        Dim sqlSelect As String = "SELECT * FROM Products"

        'abre a conexão e habilita as estatisticas
        Using connection As New SqlConnection(sqlConnectString)
            connection.StatisticsEnabled = True

            ' faz algum trabalho com a conexão 
            Dim da As New SqlDataAdapter(sqlSelect, connection)
            Dim dt As New DataTable()
            da.Fill(dt)

            'obtem as estatisticas
            Dim d As IDictionary = connection.RetrieveStatistics()
            'move as chaves do dictionary para um array
            Dim keys As String() = New String(d.Count - 1) {}
            d.Keys.CopyTo(keys, 0)

            lstEstatisticas.Items.Add("Estatísticas - SQL Server")
            lstEstatisticas.Items.Add("")
            ' percorre o dicionario exibindo os valores das chaves
            For i As Integer = 0 To d.Count - 1
                lstEstatisticas.Items.Add(keys(i) & " - " & (d(keys(i))))
            Next
        End Using

    End Sub

A versão C# para o código acima ficaria assim:

private void btnEstatistica_Click(System.Object sender, System.EventArgs e)
{
   
    string sqlConnectString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\dados\\NORTHWND.MDF;Integrated Security=True;User Instance=True";
    string sqlSelect = "SELECT * FROM Products";
    
    //abre a conexão e habilita as estatisticas
    using (SqlConnection connection = new SqlConnection(sqlConnectString)) {
        connection.StatisticsEnabled = true;
        
        // faz algum trabalho com a conexão 
        SqlDataAdapter da = new SqlDataAdapter(sqlSelect, connection);
        DataTable dt = new DataTable();
        da.Fill(dt);
        
        //obtem as estatisticas
        IDictionary d = connection.RetrieveStatistics();
        //move as chaves do dictionary para um array
        string[] keys = new string[d.Count];
        d.Keys.CopyTo(keys, 0);
        
        lstEstatisticas.Items.Add("Estatísticas - SQL Server");
        lstEstatisticas.Items.Add("");
        // percorre o dicionario exibindo os valores das chaves
        for (int i = 0; i <= d.Count - 1; i++) {
            lstEstatisticas.Items.Add(keys(i) + " - " + (d(keys(i))));
        }
        
    }
}

Executando o projeto e clicando no botão para exibir as estatísticas iremos obter:

Você precisa habilitar as estatísticas definindo a propriedade StatisticsEnabled do objeto SqlConnection para True, depois que a conexão tiver sido criada.

A partir deste momento as estatísticas poderão ser obtidas, e, no nosso exemplo usamos uma instância da interface IDictionary e o método RetrieveStatistics() do objeto SqlConnection.

O provedor de dados para o SQL Server do .NET Framework 3.5 permite obter 18 estatísticas. Para resetar os contadores basta usar o método ResetStatistics().

Todas as estatísticas são reunidas por conexão e são válidas para o momento atual, se você continuar a usar a conexão depois de retornar as estatísticas você terá que usar o método RetrieveStatistics() novamente para obter os novos valores.

Pegue o projeto completo aqui : SQL_Estatisticas.zip (lembre-se que você precisa do VS 2010 beta 2 para abrir o projeto)

Aguarde mais artigos sobre VB .NET.

Referências:


José Carlos Macoratti