IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Probleme performance test disponibilité SGBD avec Timer


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 49
    Points : 44
    Points
    44
    Par défaut Probleme performance test disponibilité SGBD avec Timer
    Bonjour,

    Soft: vbe2008

    Le contexte: dans une MDI, j'indique le status de la connexion à la SGBD avec la fonction Timer.

    Le code:

    note: les déclarations sont faites en debut de MDI.

    Partie 1 au niveau du Load du MDI aprés l'authentification, j'initie le Timer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub MDIParent1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     
            Timer1.Interval = 1000
            Timer1.Start()
     
            ToolStripStatusLabel1.Text = "Online"
     
        End Sub
    Partie 2 avec le test.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
            ticker = ""
     
            'Requete SQL
            conn = New MySqlConnection()
            conn.ConnectionString = "server=sgbd_distante;user id=root;password=;database=sgbd;"
     
            Try 'piege
     
                'connexion
                conn.Open()
     
                RequeteSQLTimer = "SELECT ticker FROM system;"
     
                'Execution de la requete
                myCommandTimer = New MySqlCommand(RequeteSQLTimer, conn)
                myReaderTimer = myCommandTimer.ExecuteReader
     
                ticker = 1
     
                conn.Close()
                conn.Dispose()
     
            Catch myerror As MySqlException
                'MessageBox.Show(myerror.Message, "Error Connecting to Database", MessageBoxButtons.OK, MessageBoxIcon.Error)
     
            Catch myerror As System.Exception
                'MessageBox.Show(myerror.Message, "System Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
     
            Finally
     
                If ticker <> "" Then
                    ToolStripStatusLabel1.Text = "Online"
                    ToolStripStatusLabel1.ForeColor = Color.Green
                    ToolStripStatusLabel1.Visible = Not (ToolStripStatusLabel1.Visible)
                Else
                    ToolStripStatusLabel1.Text = "Offline"
                    ToolStripStatusLabel1.ForeColor = Color.Red
                    ToolStripStatusLabel1.Visible = Not (ToolStripStatusLabel1.Visible)
                End If
     
            End Try
     
        End Sub
    Le probleme et la question: Quand je stoppe la SGBD distante en simulant un incident, je stoppe la base ou je débranche un cable, le fonctionnement du status Offline est aléatoire et cela fige l'application alors que la CPU client et serveur reste basse. Il ya clairement des exceptions mais je ne souhaites pas les afficher. Savez-vous pourquoi ?

    note: il y a aussi la possibilité de faire via telnet mais avec vbe2008, je ne trouve pas la commande comme pour le ping.

    Merci de votre aide.

    @+
    Images attachées Images attachées  

  2. #2
    Inscrit

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Points : 1 229
    Points
    1 229
    Par défaut
    Citation Envoyé par oulahoup Voir le message
    Le probleme et la question: Quand je stoppe la SGBD distante en simulant un incident, je stoppe la base ou je débranche un cable, le fonctionnement du status Offline est aléatoire et cela fige l'application alors que la CPU client et serveur reste basse. Il ya clairement des exceptions mais je ne souhaites pas les afficher. Savez-vous pourquoi ?
    Cela est sûrement du à ta façon de tester la disponibilité de ta base.
    Lorsque tu arrives à l'instruction "conn.Open()", une erreur va être levé si ta base n'est pas accessible, mais seulement à l'expiration du timeout...donc ton code va essayer d'ouvrir la connexion pendant 15 secondes par défaut.
    In my experience, any attempt to make any system idiot proof will only challenge God to make a better idiot.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 49
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Ha ok.

    Je vais chercher s'il est possible de modifier cette valeur pour la mettre à 3s.

    Merci

  4. #4
    Inscrit

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Points : 1 229
    Points
    1 229
    Par défaut
    Oui, il y a une propriété TimeOut sur l'objet Connection.
    In my experience, any attempt to make any system idiot proof will only challenge God to make a better idiot.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 49
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    J'ai trouvé cette commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Dim value As Integer
     
            value = myCommandTimer.CommandTimeout
            myCommandTimer.CommandTimeout = 5

    Mais le résultat n'est pas faulichon. Cela bloque le systeme.

    Comme alternative, cette nuit, j'ai testé avec les sockets, mais cela engorge la base de données une fois que je quitte l'application et que je la relance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
            Dim ip As String = "192.168.0.1" 'ip à scanner
            Dim port As Integer = "8080" ' Port à écouter
     
     
            Dim sockets As New System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, _
           System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp)
            Try
                sockets.Connect(ip, port)
            Catch
            End Try
            If sockets.Connected Then ' si le port est ouvert
                ToolStripStatusLabel1.Text = "Online"
                ToolStripStatusLabel1.ForeColor = Color.Green
                ToolStripStatusLabel1.Visible = Not (ToolStripStatusLabel1.Visible)
                sockets .Close() 'fermeture socket
            Else ' si le port est absent
                ToolStripStatusLabel1.Text = "Offline"
                ToolStripStatusLabel1.ForeColor = Color.Red
                ToolStripStatusLabel1.Visible = Not (ToolStripStatusLabel1.Visible)
     
            End If
    Quelle méthode utiliseriez vous pour un systeme similaire ?
    Le labs de temps entre chque test, serait de combien pour être pertinent ?

    Merci de votre aide.

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    tu peux tester la connexion à la base sur un autre thread pour ne pas figer l'appli
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 49
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Si je fais un test toutes les 5 secondes, cele ne va aps en faire trop ?

    Est-ce que le nombre de threads et semaphores sont liés ?

    @+

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    threads et sémaphores sont 2 choses différentes
    sémaphore, ici pas besoin, un thread ca se démarre sans soucis

    faire un test toutes les 5 secondes ca craind pas à priori
    par contre peut etre pas besoin de faire une requete pour savoir si c'est bon
    il y a des classes dans la dll sql server smo qui permet de faire une connexion à un server aussi
    ou peut etre meme que connexion.open suffit pour être sur
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. [Débutant] Probleme avec timer
    Par java250r dans le forum VB.NET
    Réponses: 2
    Dernier message: 20/03/2012, 00h43
  2. Probleme avec Timer, TimerTask
    Par Microturnip dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 12/05/2008, 23h16
  3. Réponses: 1
    Dernier message: 03/07/2007, 16h05
  4. [PHP-JS] Probleme de test avec des variables
    Par bodysplash007 dans le forum Langage
    Réponses: 1
    Dernier message: 02/05/2007, 17h39
  5. [swing] Probleme de thread avec Timer
    Par issou dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 13/05/2006, 22h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo