VB 2005 - Obtendo Estatísticas de SQL Server
O novo método RetrieveStatistics da classe SqlConnection da ADO.NET 2.0 efetua uma consulta na instância do SQL Server de destino para a conexão atual e retorna um objeto IDictionary que contém informações estatísticas sobre o SQL Server.
Para poder usar este recurso você deve
habilitá-lo de forma explícita pelo execução da instrução
:
SqlConnection.StatisticsEnabled = True
antes de invocar o método RetrieveStatistics . Como o retorno é feito na forma de pares de valores no objeto IDictionary uma das formas de tratar a informação recebida é efetuar uma conversão forçada (cast) do objeto IDictionary para o tipo HashTable e em seguida efetuar a iteração sobre a HashTable usando o Laço For Each...Next.
Inicie um novo projeto no Visual Basic 2005 com o nome de sqlEstatisticasNet.
Inclua a seguinte declaração no início do seu projeto: Imports System.data.sqlclient
Altere o nome do formulário padrão de form1.vb para frmPrincipal.vb e início do formulário padrão declare as seguintes variáveis:
Private htEstado As Hashtablenota: A linha de código abaixo define a conexão com o banco de dados Cadastro.mdf em minha máquina para o seu ambiente ela será diferente e você pode usar qualquer banco de dados do SQL Server 2005.
Private strConn As String = "Data Source=.\SQLEXPRESS;AttachDbFilename='D:\Documents and Settings\Macoratti.MACORATI\Meus documentos\Cadastro.mdf';Integrated Security=True;Connect Timeout=30;User Instance=True"
No formulário principal inclua um botão de comando - btnExibirEstatisticas - , sendo que no evento Click deste botão inclua o código abaixo:
Private Sub btnExibirEstatisticas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExibirEstatisticas.Click 'define a conexão Dim cnnCadastro As SqlConnection = New SqlConnection(strConn) 'habilita a exibição das estatísticas cnnCadastro.StatisticsEnabled = True Dim sql As String = "SELECT * FROM Clientes" 'efetua uma operação com a conexão preenchendo um dataset Try Dim adapter As SqlDataAdapter = New SqlDataAdapter(Sql, strConn) Dim dataSet As DataSet = New DataSet adapter.Fill(dataSet, "Clientes") Catch MsgBox("Ocorreu um erro durante a conexão e preenchimento do dataset.", MsgBoxStyle.Critical, "Erro") Exit Sub End Try 'Exibir estatisticas da conexão SQL Server Try 'obtém os valores em uma HashTable htEstado = CType(cnnCadastro.RetrieveStatistics(), Hashtable) Dim txtEstatisticas As Control = frmEstatisticas.Controls.Item("txtEstatisticas") txtEstatisticas.Text = "" Dim oStat As Object Dim strStat As String 'percorre a Hashtable para exibir os valores For Each oStat In htEstado.Keys strStat = oStat.ToString If InStr(strStat, "Time") > 0 Then txtEstatisticas.Text += strStat + " = " + _ Microsoft.VisualBasic.Format(CLng(htEstado(strStat)) / 1000, "#,##0.000") + " secs" + vbCrLf Else txtEstatisticas.Text += strStat + " = " + htEstado(strStat).ToString + vbCrLf End If Next 'exibe o formulário das estatísticas frmEstatisticas.Show() frmEstatisticas.Controls.Item("btnFechar").Focus() Catch excStats As Exception MsgBox(excStats.Message + excStats.StackTrace, , "Ocorreu um erro durante a exibição das estatísticas...") Finally cnnCadastro.Close() End Try End Sub |
Inclua a agora um novo formulário windows no seu projeto através do Menu Project|Add Windows Forms com o nome de frmEstatisticas.vb e inclua no formulário um botão de Comando - btnFechar e uma caixa de Texto - txtEstatisticas.text definindo as propriedades Multiline = True e ScrollBars = Vertical.
Ao executar o projeto o formulário principal irá surgir , clicando no botão de comando , as estatísticas serão exibidas no formulário conforme abaixo. No meu caso como a conexão foi feita com uma tabela local quase vazia os valores foram todos zeros.
Atualmente podemos obter até 18 estatísticas. Se você deseja obter alguma de forma individual pode usar escolher qual deseja obter. Abaixo um exemplo onde estamos obtendo os valores para algumas estatísticas:
IDictionary
statistics = connection.RetrieveStatistics()
Long serverRoundtrips = Dim statistics("ServerRoundtrips") As (Long)
Long connectionTime = Dim statistics("ConnectionTime") As (Long)
Long bytesReceived = Dim statistics("BytesReceived") As (Long)
Long sumResultSets = Dim statistics("SumResultSets") As (Long)
Long selectRows = Dim statistics("SelectRows") As (Long
Se você não quiser usar uma HashTable pode percorrer o objeto IDictionary usando um laço. Abaixo um exemplo que imprime os valores no console:
For Each entry As
DictionaryEntry In statistics
Console.WriteLine("Key: {0}, Value: {1}", entry.Key.ToString, entry.Value.ToString)
Next
Lembre-se sempre que quando o método é chamado os valores retornados referem-se aqueles do momento da execução, se você continuar usando a conexão , os valores ficarão incorretos; você precisa re-executar o método para obter os valores atualizados.
Até o próximo artigo VB.NET 2005.
José Carlos Macoratti