php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.09.2010, 20:44  
Neuer Benutzer
 
Registriert seit: 12.12.2008
Beiträge: 29
Määx befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] MySQL insert buffer

Hallo zusammen,
ich habe ein Skript, dass unter anderem Dateien in eine MySQL-Datenbank hochlädt. Auf dem bisherigem Server lief es wunderbar. Jetzt mussten wir jedoch auf einen anderen umziehen und es läuft nicht mehr richtig. Die Datensatzeinträge sind nur ein paar kilobyte groß und somit zu nix gebrauchen

Ich glaube daher, dass es an den Datenbankeinstellungen liegt! Die Dateien sind teilweise bis zu 60MB groß, der insert buffer ist jedoch nur 8mb groß. Könnte dies die Ursache sein? Wie kann ich diesen (am besten über phpmyadmin) ändern? Woran könnte es noch liegen?

Bin für jeden Tipp dankbar!
Viele Grüße und schonmal Danke für die Hilfe
Määx
Määx ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 12.09.2010, 20:51  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hallo,

also erstmal stellt sich die Frage, warum man Dateien in Datenbanken ablegen muss:
http://phpforum.de/php/php-faq/stati...s.html#db-blob

Was steht denn genau in der Datenbank, was wird eingetragen? Ob der Buffer zu klein ist, kann ich dir nicht beantworten, aber es sollte doch mit etwas Debugging möglich sein, der Ursache näherzukommen. Was hast du dahingehend denn schon unternommen?
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 12.09.2010, 21:10  
Neuer Benutzer
 
Registriert seit: 12.12.2008
Beiträge: 29
Määx befindet sich auf einem aufstrebenden Ast
Standard

Hey,
ich lese Dateien in eine DB, da ich auf die Dateien nur für kurze Zeit Zugriff habe und diese nach einiger Zeit autoarchiviert & vercchlüsselt werden. Ein Zugriff muss jedoch über mein System noch weitere 24h möglich sein. Die Dateien einfach an eine andere Stelle zu kopieren darf ich leider nicht, sondern muss diese in der Datenbank hinterlegen - dies ist leider Vorgabe und ich kann daran nichts ändern
In die Tabelle schreibe ich lediglich eine ID, den Dateinamen, die Dateigröße, den letzten Änderungszeitpunkt und die Datei als longblob.
Das ganze geschiet im Prinzip einfach über ein fopen gefolgt von einem insert-Befehl! In der apache-log werden jedoch keine Fehler ausgegeben.
Deshalb habe ich sonst keine Idee - und wie gesagt: auf dem alten Server funktionierte es einwandfrei...

Määx
Määx ist offline   Mit Zitat antworten
Alt 12.09.2010, 21:13  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

diese Vorgabe ist mit Verlaub blödsinnig - zumal du die Datei ja doch nach 24 stunden aus der Datenbank löschen sollst ... da würd ich sie doch eher für 24 stunden in einem Temp-Ordner ablegen ...

ansonsten liegt es wohl an dem dämlichen Buffer, wenn du es auf diese Weise machst , dein INSERT ist ja dann 60MB groß .. und passt unmöglich in die 8 MB Puffer ...

such mal nach ner Möglichkeit ein BloB direkt zu füllen,

Geändert von eagle275 (12.09.2010 um 21:18 Uhr).
eagle275 ist offline   Mit Zitat antworten
Alt 12.09.2010, 21:34  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

Wenn es unbedingt sein muss und nicht anders geht:

Erkennen wie groß ein insert max sein darf anhand der werte die mysql ausspuckt, etwas davon abziehen, die datei in (dateigröße / (max-query-größe - "etwas")) teilen, den ersten teil als INSERT in ein blob-feld machen und dann in mehreren teilen mittels UPDATE und CONCAT die weiteren teile anhängen:

http://dev.mysql.com/doc/refman/5.0/...unction_concat
robo47 ist offline   Mit Zitat antworten
Alt 12.09.2010, 22:00  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Dann sollte also eine 2, 3, 4 MB große Datei kein Problem sein?! Teste so mal aus, ob es am Buffer liegt. Weiterhin: Was steht denn nun im Longblob, du sagtest nur einige KB? Kannst du den Inhalt in der Datei wiederfinden? Nimm einfach mal eine präparierte Datei.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 12.09.2010, 22:05  
Neuer Benutzer
 
Registriert seit: 12.12.2008
Beiträge: 29
Määx befindet sich auf einem aufstrebenden Ast
Standard

ja, dass diese Vorgabe quatsch ist, ist mir klar - aber sie existiert nunmal...

Danke für die Hilfe - ich probiere es dann einmal mit dem concat bzw ob man einen blob direkt füllen kann!

Viele Grüße
Määx
Määx ist offline   Mit Zitat antworten
Alt 12.09.2010, 22:42  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

Abhängig von den mysql-Einstellungen bedeutet es halt auch, dass man die datei beim SELECT in teilen abholen muss z.b. mit http://dev.mysql.com/doc/refman/5.0/...unction_substr

So oder so, bei einem projekt mit solchen spezialaforderungen, wo sicherheit und ähnliches eine solche hohe rolle spielt ist es eigentlich eh ein nogo das auf normalem webspace laufen zu lassen, da gehört ein Server her, dann muss man sich auch nicht mit so umständlichen Arbeitswegen befassen.

Hast du denn mal überlegt wie es ausschaut mit den backups die üblicherweise jeder hoster macht ? dadurch liegen im endeffekt die daten und damit die dateien aus der db und das über tage, wochen, monate oder wie lange der hoster backups speichert, auch noch herum.

Geändert von robo47 (12.09.2010 um 22:47 Uhr).
robo47 ist offline   Mit Zitat antworten
Alt 13.09.2010, 00:20  
Neuer Benutzer
 
Registriert seit: 12.12.2008
Beiträge: 29
Määx befindet sich auf einem aufstrebenden Ast
Standard

Hey robo47,
danke für den Denkanstoß! Aber kann dich beruhigen - das ganze läuft auf einem eigenen Server - wir mussten nur Hausintern auf einen anderen umziehen...

Aber danke für den Tipp mit dem SELECT - das hätte ich sonst sicherlich vergessen! Außerdem erhöht das natürlich gleich noch den Arbeitsaufwand
Kann man die Buffergröße nicht irgendwie höher stellen?

Danke
Määx
Määx ist offline   Mit Zitat antworten
Alt 13.09.2010, 00:37  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

max_allowed_packet dürfte die erste Anlaufstelle sein.

Für weitere Details/ggf. weitere zu setzende Optionen - wende dich an deinen Server-Admin.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] mehrfaches INSERT über PHP drzwockel PHP Tipps 2010 10 10.08.2010 11:03
[Erledigt] MySQL Link Resource in einer statischen Variablen speichern Lenki PHP-Fortgeschrittene 8 18.03.2010 16:37
[Erledigt] MySQL Insert (merkwürdiges) Problem Hendrik PHP Tipps 2010 4 18.03.2010 15:46
Mysql INSERT INTO Auranores Scriptbörse 6 11.03.2010 00:53
[Erledigt] mysql InnoDB Insert Problem mit Fremdschlüssel itachy Datenbanken 3 25.02.2010 08:37
MySQL: insert ... select aha_01 Datenbanken 2 02.12.2008 16:03
Verständnisprobleme bei Utf8 > Character Set > Collate erna Datenbanken 4 20.03.2007 14:08
MySQL Server startet nicht mehr richtig... Datenbanken 16 03.03.2006 19:40
[Erledigt] mysql: INSERT und wenn vorhanden UPDATE Datenbanken 7 07.01.2006 09:54
MySQL to Access - INSERT INTO zu langsam bendigo Datenbanken 0 23.11.2005 16:33
[Erledigt] INSERT INTO MySql mit while oder... PHP-Fortgeschrittene 2 10.02.2005 10:20
php / mysql insert into in schleife raffnix Datenbanken 4 14.01.2005 08:46
dem verzweifeln nahe PHP Tipps 2004 26 24.10.2004 17:28
MySQL INSERT --> Rückmeldung ob erfolgreich? Datenbanken 5 09.08.2004 08:53
MySQL INSERT --> Rückmeldung ob erfolgreich? PHP Tipps 2004 2 06.08.2004 15:20

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql insert buffer, php mysql blob insert, mysql insert langsam, php mysql buffer, mysql insert, mysql insert max, mysql insert sehr langsam, mysql insert zu gross, mysql insert aufteilen, mysql inserts langsam, mysql php buffer, php5 blob insert problem, http://www.php.de/datenbanken/71762-erledigt-mysql-insert-buffer.html, php mysql insert, mysql langsam insert, php buffer, mysql insert \zu langsam\, php mysql blob buffering, mysql inserts aufsplitten for, mysql viele inserts langsam

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:45 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum