Hallo Liebes Forum...
da ich Rat von Fachleuten brauche, und ich hoffe hier auf den ein oder anderen zu treffen, habe mich soeben angemeldet.
Vorab ein Paar Infos zum System, MAC OS X 10.4, MAMP in der aktuellsten Version (MySQL 5.0), 1GByte RAM und eine Festplatte mit 5400 Umdrehungen)
Mein Fall:
Ich importiere über ein PHP Script eine CSV Datei, die in etwa 35000 Einträge hat, in eine Datenbank. Das PHP Script übernimmt bereits ein paar Prüfungen und entscheidet was mit welchen Eintrag (aus der CSV) gemacht werden soll. Je nach dem wird dann eine SP aufgerufen die alle weiteren prüfungen und Insert Anweisungen übernimmt.
Ihr müsst euch nun vorstellen das jeder Eintrag (aus der CSV) in 6 verschiedene Tabellen aufgeteilt wird:
Wert1, Wert2, Wert3 = > Tabelle 1
Wert4, Wert5, Wert6 = > Tabelle 2
etc.
Nach jedem Insert in der SP wird geprüft ob tatsächlich ein Eintrag in die Tabelle gemacht wurde. Sollte das nicht der Fall sein wird ein Eintrag in eine einfache Error_Tabelle gemacht und anschließend die Prozedur verlassen.
Das Problem:
Wenn ich meinen Rechner neustarte und dieses Script laufen lasse so kommt es manchmal vor das Alle Daten in Tabelle 1 eingetragen werden, aber in Tabelle 2, 3, etc. sind willkürlich, sagen wir 500 Datensätze, weniger drin. Obwohl ja wie oben beschrieben er jedes Insert prüft, und bei einem fehler eigentlich einen Eintrag in die Error_Tabelle einfügen soll.
Starte ich das Script dann noch zwei drei mal werden dann alle Einträge erstellt.
Dann läuft alles Problemlos, ich erhalte auch keinerlei Fehlermeldungen.
Was ich bisher tun konnte:
Einige Recherchen haben mich darauf schließen lassen das es eventuell ein Speicherproblem sein könnte.
Ich habe dann folgende MySQL Start Variablen angepasst:
key_buffer_size = 128M
bulk_insert_buffer_size = 128M
read_buffer_size = 16M
sort_buffer_size = 16M
myisam_repair_threads = 1
max_heap_table_size = 64M
max_allowed_packet = 32M
tmp_table_size = 64M
table_cache = 1024
query_cache_type = 1
query_cache_size = 64M
query_cache_limit = 2M
thread_concurrency = 8
thread_cache_size = 16
max_connections = 20
Seit dieser Anpassung läuft das Skript immer einwandfrei. Speziell dir Erhöhung des "key_buffer_size" hat eine enorme Geschwindikeitssteigerung zur Folge gehabt.
Gut, nun habe ich das Problem ja anscheindend gelöst, aber leider nur temporär!
Was wenn dieses Phänomän wieder auftritt, und das Script Datensätze einfach übergeht?
Ist euch schonmal etwas derartiges aufgefallen?
Hat jemand eine Idee wie man dagegen vorgehen kann?
Lösungsansätze, Erfahrungen, mir hilft sicher alles weiter...
Vielen Dank schon mal...
Ich hoffe auf eure Hilfe.
Robert
da ich Rat von Fachleuten brauche, und ich hoffe hier auf den ein oder anderen zu treffen, habe mich soeben angemeldet.
Vorab ein Paar Infos zum System, MAC OS X 10.4, MAMP in der aktuellsten Version (MySQL 5.0), 1GByte RAM und eine Festplatte mit 5400 Umdrehungen)
Mein Fall:
Ich importiere über ein PHP Script eine CSV Datei, die in etwa 35000 Einträge hat, in eine Datenbank. Das PHP Script übernimmt bereits ein paar Prüfungen und entscheidet was mit welchen Eintrag (aus der CSV) gemacht werden soll. Je nach dem wird dann eine SP aufgerufen die alle weiteren prüfungen und Insert Anweisungen übernimmt.
Ihr müsst euch nun vorstellen das jeder Eintrag (aus der CSV) in 6 verschiedene Tabellen aufgeteilt wird:
Wert1, Wert2, Wert3 = > Tabelle 1
Wert4, Wert5, Wert6 = > Tabelle 2
etc.
Nach jedem Insert in der SP wird geprüft ob tatsächlich ein Eintrag in die Tabelle gemacht wurde. Sollte das nicht der Fall sein wird ein Eintrag in eine einfache Error_Tabelle gemacht und anschließend die Prozedur verlassen.
Das Problem:
Wenn ich meinen Rechner neustarte und dieses Script laufen lasse so kommt es manchmal vor das Alle Daten in Tabelle 1 eingetragen werden, aber in Tabelle 2, 3, etc. sind willkürlich, sagen wir 500 Datensätze, weniger drin. Obwohl ja wie oben beschrieben er jedes Insert prüft, und bei einem fehler eigentlich einen Eintrag in die Error_Tabelle einfügen soll.
Starte ich das Script dann noch zwei drei mal werden dann alle Einträge erstellt.
Dann läuft alles Problemlos, ich erhalte auch keinerlei Fehlermeldungen.
Was ich bisher tun konnte:
Einige Recherchen haben mich darauf schließen lassen das es eventuell ein Speicherproblem sein könnte.
Ich habe dann folgende MySQL Start Variablen angepasst:
key_buffer_size = 128M
bulk_insert_buffer_size = 128M
read_buffer_size = 16M
sort_buffer_size = 16M
myisam_repair_threads = 1
max_heap_table_size = 64M
max_allowed_packet = 32M
tmp_table_size = 64M
table_cache = 1024
query_cache_type = 1
query_cache_size = 64M
query_cache_limit = 2M
thread_concurrency = 8
thread_cache_size = 16
max_connections = 20
Seit dieser Anpassung läuft das Skript immer einwandfrei. Speziell dir Erhöhung des "key_buffer_size" hat eine enorme Geschwindikeitssteigerung zur Folge gehabt.
Gut, nun habe ich das Problem ja anscheindend gelöst, aber leider nur temporär!
Was wenn dieses Phänomän wieder auftritt, und das Script Datensätze einfach übergeht?
Ist euch schonmal etwas derartiges aufgefallen?
Hat jemand eine Idee wie man dagegen vorgehen kann?
Lösungsansätze, Erfahrungen, mir hilft sicher alles weiter...
Vielen Dank schon mal...
Ich hoffe auf eure Hilfe.
Robert
Kommentar