CONEXÕES ADORMECIDAS
FoxMan,
Utilizei sua formula para averiguar as conexões ao Banco de Dados. Ao conectar vejo uma no estado de execução e ela abre mais uma ou duas no modo Sleep. Alguém já viu isso ou pode me explicar o porquê?
Utilizei sua formula para averiguar as conexões ao Banco de Dados. Ao conectar vejo uma no estado de execução e ela abre mais uma ou duas no modo Sleep. Alguém já viu isso ou pode me explicar o porquê?
Citação::
FoxMan,
Utilizei sua formula para averiguar as conexões ao Banco de Dados. Ao conectar vejo uma no estado de execução e ela abre mais uma ou duas no modo Sleep. Alguém já viu isso ou pode me explicar o porquê?
Conexoes com Estado = Sleep estão [Ô]adormecida[Ô], ou seja não estão sendo mais utilizada a quantade de segundos constante na coluna time.
Ocorreu possivelmente o que expliquei no meu primeiro post.
Ou seja no projeto, as conexões não estão sendo finalizadas de forma correta e abrindo-se outras conexões.
Entendi,
Adaptei a sql que você postou em um código que encontrei na internet. Até onde testei, deu muito certo. Para quem quiser, futuramente, segue o código:
Public Sub Matar_Processo_Adormecido()
Dim strSQL As String = [Ô]SELECT ID, USER, HOST, DB, COMMAND, TIME, STATE, LEFT([ô]INFO[ô], 51200) AS Info FROM information_schema.PROCESSLIST Where Command =[ô]Sleep[ô][Ô]
Dim m_ProcessesToKill As System.Collections.ArrayList = New ArrayList()
If Conexao.State = ConnectionState.Open Then
Dim Mycmd As New MySqlCommand(strSQL, Conexao)
Try
[ô] Get a list of processes to kill.
Dim MyReader As MySqlDataReader = Mycmd.ExecuteReader()
While MyReader.Read
[ô]Find all processes sleeping with a timeout value higher than our threshold.
Dim iPID As Integer = Convert.ToInt32(MyReader([Ô]Id[Ô]).ToString())
Dim strState As String = MyReader([Ô]Command[Ô]).ToString()
If strState = [Ô]Sleep[Ô] Then
[ô] This connection is sitting around doing nothing. Kill it.
m_ProcessesToKill.Add(iPID)
End If
End While
MyReader.Close()
For Each aPID As Integer In m_ProcessesToKill
strSQL = [Ô]Kill [Ô] & aPID
Mycmd.CommandText = strSQL
Mycmd.ExecuteNonQuery()
Next
Catch ex As Exception
MsgBox(ex.Message, vbInformation, Titulo)
End Try
End If
End Sub
Adaptei a sql que você postou em um código que encontrei na internet. Até onde testei, deu muito certo. Para quem quiser, futuramente, segue o código:
Public Sub Matar_Processo_Adormecido()
Dim strSQL As String = [Ô]SELECT ID, USER, HOST, DB, COMMAND, TIME, STATE, LEFT([ô]INFO[ô], 51200) AS Info FROM information_schema.PROCESSLIST Where Command =[ô]Sleep[ô][Ô]
Dim m_ProcessesToKill As System.Collections.ArrayList = New ArrayList()
If Conexao.State = ConnectionState.Open Then
Dim Mycmd As New MySqlCommand(strSQL, Conexao)
Try
[ô] Get a list of processes to kill.
Dim MyReader As MySqlDataReader = Mycmd.ExecuteReader()
While MyReader.Read
[ô]Find all processes sleeping with a timeout value higher than our threshold.
Dim iPID As Integer = Convert.ToInt32(MyReader([Ô]Id[Ô]).ToString())
Dim strState As String = MyReader([Ô]Command[Ô]).ToString()
If strState = [Ô]Sleep[Ô] Then
[ô] This connection is sitting around doing nothing. Kill it.
m_ProcessesToKill.Add(iPID)
End If
End While
MyReader.Close()
For Each aPID As Integer In m_ProcessesToKill
strSQL = [Ô]Kill [Ô] & aPID
Mycmd.CommandText = strSQL
Mycmd.ExecuteNonQuery()
Next
Catch ex As Exception
MsgBox(ex.Message, vbInformation, Titulo)
End Try
End If
End Sub
Tópico encerrado , respostas não são mais permitidas