MySQL-Prozess beenden

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von paddy91952.

    MySQL-Prozess beenden

    Hallo liebes Forum,
    ich habe ein kleines Problem und benötige eure Hilfe:

    Ich habe ein Programm geschrieben, und dieses läuft soweit äußerst zuverlässig. Allerdings ist jetzt nach ca.2 Monaten Betrieb folgendes Probelm aufgetreten:

    Das Programm verbindet sich folgendermaßen mit einer MySQL-Datenbank:

    VB.NET-Quellcode

    1. Dim conn As MySqlConnection
    2. conn = New MySqlConnection
    3. conn.ConnectionString = "server=" + Hauptmenü.DBHost + ";" _
    4. & "user id=" + Hauptmenü.DBuser + ";" _
    5. & "password=" + Hauptmenü.DBpasswort + ";" _
    6. & "database=" + Hauptmenü.DBtabelle + ";"
    7. Try
    8. conn.Open() ' Verbindung öffnen
    9. '[...]
    10. conn.close() ' Verbindung öffnen
    11. Catch ex As Exception
    12. '[...]
    13. End Try


    Werden nun mehrere verschiedene Funktionen ausgeführt (Bsp. abfragen von Daten, sonstige manipulation) entsteht jeweils ein MySQL-Prozess. Diese bleiben bestehen, bis die VB.Net Anwendung geschlossen wird. Meine Frage ist nun:

    Kann ich diese Prozesse schließen, sobald Sie nicht mehr gebraucht werden, sprich mit dem dass ich die entsprechende Windows-Form schließe, sich auch der MySQL-Prozess auf dem Server schließt?


    Ich hoffe Ihr habt in etwa mein Problem verstanden.
    Gruß Paddy
    Habe gestern ewig lang daran geforscht und das problem dahingehend isolieren können. Die Prozesse bleiben solange im sleep bestehen, bis die gesamte Anwendung geschlossen wird.

    Das macht soweit keine Probleme (Serverauslastung bei weitem nicht erreicht) allerdings können max. nur 99 Prozesse parallel bestehen. Sobald der 100. Prozess hinzu kommt bekomme ich folgende Fehlermeldung:

    Can't create a new thread (errno 11); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug.

    Prinzipiell gilt: Close ist nicht gleich Dispose. Mit Dispose biste immer auf der sicheren Seite.
    Was die Prozesse angeht. Wäre mir neu, dass das das Standardverhalten von MySQL ist. Kannst du die MySQL neu installieren und die Daten wieder importieren? Irgendwo muss da etwas vermurkst sein.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Mit Dispose klappt es auch nicht, aber ich hab mal ne andere Frage (auch wenn ich mich jetzt höchst wahrscheinlich blamiere).

    Wenn ich diesen Befehl hier ausführe, bleibt ein offener Prozess zurück:

    VB.NET-Quellcode

    1. Dim conn As MySqlConnection
    2. conn = New MySqlConnection
    3. conn.ConnectionString = "server=" + Hauptmenü.DBHost + ";" _
    4. & "user id=" + Hauptmenü.DBuser + ";" _
    5. & "password=" + Hauptmenü.DBpasswort + ";" _
    6. & "database=" + Hauptmenü.DBtabelle + ";"
    7. Try
    8. conn.Open() ' Verbindung öffnen
    9. Dim sqlcmd1 As String = "UPDATE tageskommandierung_belegschaft SET wagen1='" + TextBox1.Text + "', wagen2='" + TextBox2.Text + "', wagen3='" + TextBox3.Text + "', wagen4='" + TextBox4.Text + "'"
    10. Dim mycommand As New MySqlCommand
    11. mycommand.Connection = conn
    12. mycommand.CommandText = sqlcmd1
    13. mycommand.ExecuteNonQuery()
    14. MsgBox("Tageskommandierung wurde abgeändert")
    15. conn.close()
    16. Me.Close()
    17. Catch ex As Exception
    18. MsgBox("Fehler:" + ex.Message)
    19. End Try


    Kann es sein, dass ich zunächst irgendwie über mycommand serverseitig was beenden muss ?
    (Des war ja meine überlegung, ob das Problem daher kommt)

    Habe die Befehle natürlich vorher ergänzt, dennoch blieb das Problem bestehen!

    Ich habe hier mal aus der Überwachungsfunktion ein Bild exportiert.
    Dort sieht man, dass die verbindung geschlossen wird, der Prozess aber weiter besteht!
    Bilder
    • Unbenannt.jpg

      52,77 kB, 401×327, 92 mal angesehen
    Habe das Problem erstmal anderweitig gelöst, indem ich Serverseitig mit:

    UPDATE GLOBAL_VARIABLES SET wait_timeout=60;
    UPDATE GLOBAL_VARIABLES SET interactive_timeout='60'

    alle leerlaufprozesse nach 60sec. automatisch schließe.

    Wenn jemand eine VB-Lösung hat, wäre ich sehr sehr dankbar