Paket für Abfrage ist zu groß MySQL?
Hallo,
Ich stehe vor einem Problem, das vor etwa einer Woche begann, als ich versuchte, eine Verbindung zu einer MySQL-Datenbank herzustellen. Die Fehlermeldung wies auf einen überfüllten temporären Speicher hin. Eine Überprüfung des alten Servers zeigte, dass er lediglich mit 2 GB Arbeitsspeicher ausgestattet war, was offensichtlich nicht ausreicht.
Daraufhin haben wir auf einen neuen vServer mit 16 GB Arbeitsspeicher umgestellt. Ich habe ein frisches Ubuntu-System installiert, MySQL eingerichtet und die Datenbankdaten vom alten Server übertragen, was erfolgreich verlief.
Beim Versuch, mich mit DBeaver an die Datenbank anzubinden, erhalte ich jedoch die Fehlermeldung: "Packet for query is too large (4.739.923 > 65.535). You can change this value on the server by setting the 'max_allowed_packet' variable."
Obwohl ich die max_allowed_packet-Einstellung auf das Maximum von 1GB gesetzt habe, besteht das Problem weiterhin.
Ich bin ratlos und wäre für jegliche Hilfe dankbar.
Hallo,
habe das Problem nun über Umwege behoben, trotzdem vielen Dank !
3 Antworten
Ich würde mir mal Gedanken darüber machen, warum so ein großes Paket notwendig werden sollte.
A communication packet is a single SQL statement sent to the MySQL server, a single row that is sent to the client, or a binary log event sent from a replication source server to a replica.
Du hast das DBMS nach der Änderugn sicherheitshalber neu gestartet?
P.S.:
Both the client and the server have their own max_allowed_packet variable, so if you want to handle big packets, you must increase this variable both in the client and in the server.
Hast Du mal auf Clientseite nach der entsprechenden Einstellung gesucht?
Ansonsten nehme statt etwas visuellem wie DBeaver einfach mal mysql (CLI-Tool) mit der entsprechenden Option, exemplarisch:
mysqld --max_allowed_packet=128M
Sonst müßtest Du halt ein brauchbares Log von DBeaver haben, welches jedes Statement dokumentiert und bei welchem es aussteigt.
https://dbeaver.com/docs/dbeaver/Log-files/
Kann ja auch noch sein, daß irgendwas bei Java im Connector schief läuft o.ä. .
Sofern die Datenbank keine BLOBs nutzt, scheinen bereits Paketgrößen über 64K eher unwahrscheinlich. (Queries mit großer Rückgabe werden ja zeilenweise übertragen).
Mysql hat die Funktion explain um dir anzeigen zu lassen, wie mit deinem Query umgegangen wird.
Siehe https://dev.mysql.com/doc/refman/8.0/en/using-explain.html
Falls du da selber nicht durchblickst, schicke deinen problematischen Query mit explain davor an die Datenbank und poste hier den Output
Ansonsten - Fehler Logs sind Dein Freund!
"Obwohl ich die max_allowed_packet-Einstellung auf das Maximum von 1GB gesetzt habe" - offensichtlich ja nicht, da die Fehlermeldung ja etwas anderes sagt... .
also bei der Abfrage;
SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet';
kommt als gespeicherte Value: 1073741824 raus...
also offensichtlich ja schon richtig gesetzt
Moin,
Keiner versteht warum das Paket so groß sein soll, dort sind lediglich ein paar Daten, zu Umsätzen von Beratern drin, bis zum Jahre 2005 glaub ich.
Was heißt lediglich; das sind an für sich schon einige Daten, aber keine -> 1GB +.
Die Daten werden alle 3 Tage durch einen Dump aktualisiert.
Also dass ist nicht einmal die Hauptdatenbank der Firma...
auf diese Datenbank werden nur die Umsätze, Kunden usw. dokumentiert, die dann in einer von mir programmierten C# Anwendung, als Tages/Jahresstatistik dargestellt werden sollen, wobei jeder Berater auf seine Umsätze zugriff hat.
Ich hatte die MySQL Datenbank damals leider nicht selbst aufgebaut (da war ich noch zu klein für :) ).
Würde ja eine neue DB anlegen, dann wäre das Problem gelöst. Dann wären allerdings auch alle Daten weg aus den vergangenen Jahren, was natürlich nicht geht. Das ist schon alles ziemlich ärgerlich.
Nachdem ich die max_allowed_packet-Einstellung erhöht habe, habe ich natürlich neu gestartet und danach nochmal überprüft ob die Einstellung auch wirklich gespeichert wurde. Das war immer positiv.
Deswegen bin ich langsam echt ratlos und verzweifelt und bräuchte mal einen der mir dabei helfen könnte. :(