[MSSQL] Protollierung von übergangenen Insert-Befehlen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MSSQL] Protollierung von übergangenen Insert-Befehlen

    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
    Zuletzt geändert von jizza; 28.08.2007, 11:28.

  • #2
    echo mysql_error();
    error-log des mysql-Servers?
    (btw. wieso steht im Betreff mssql? Das ist was ganz anderes - das ist dir bewusst?!)

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Schreck lass nach, es ist natürlich MySQL... einfacher fehler bei der Auswahl im PullDown...

      Der mysql_error_log sowie die PHP funktion mysql_error() liefern keinerlei Fehler oder Hinweise auf Fehler...

      Kommentar


      • #4
        Sicher, dass du mysql_error() an der richtigen Stelle aufgerufen hast?
        Sicher, dass du dir das richtige mysql-Error-Log im fs angeschaut hast?

        Ist das eine stable mysql-Version?
        Hast du mal den Bugtracker nach deinem Problem abgesucht?
        Sicher, dass der Ram nicht kaputt ist?


        Linux? Syslog?


        Warum ist thread_concurrency eigentlich bei 8?
        2 wäre adäquater denke ich... vielleicht sogar nur 1 (außer der Server hat vier CPUs, wovon ich aber mal nicht ausgehe bei 128 MB Key Cache...)

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Also...

          1. mysql_error wird nach jedem Aufruf einer SP abgefragt (mysqli):

          PHP-Code:
          if(!$sql->multi_query("CALL bsp_sp("var1var2")")){
            echo 
          "Konnte Prozedur nicht ausführen: " $sql->error;

          2. Bei mir habe ich lediglich den Error Log aktiviert... der hat leider keine Einträge diesbezüglich. Macht es Sinn die Allgemeine Anfragen Logdatei zu aktivieren? Der Binär Log und Log für langsame Abfragen sind hier denke ich nicht hilfreich, oder?

          3. Meines Wissens nach ist die MySQL Version 5.0.41 stable...

          4. Den habe ich noch nicht bemüht...

          5. Ich hoffe doch das mein Ram nicht kaputt ist ;-). Aber nein, daran kann es nicht liegen da auf meinem Windows-System genau das gleiche auftritt.

          6. Linux... nein, Unix... aber noch nicht im syslog nachgesehen...

          Kommentar


          • #6
            Original geschrieben von jizza
            2. Bei mir habe ich lediglich den Error Log aktiviert... der hat leider keine Einträge diesbezüglich. Macht es Sinn die Allgemeine Anfragen Logdatei zu aktivieren? Der Binär Log und Log für langsame Abfragen sind hier denke ich nicht hilfreich, oder?
            Ich hab zwar keine Ahnung was du meinst, aber ja XD

            Bin-Log ist idT ziemlich sinnlos (auch wenn man da mal gucken könnte, ob die Queries bis dahin kommen)
            Slow-Query-Log ist eigentlich auch sinnlos, andererseits lässt sich vielleicht eine Gemeinsamkeit zwischen langsamen Queries und fehlenden Datensätzen herstellen...

            Da ich sonst gerade keine Idee hab würd ich mal alles mitloggen was geht und gucken, ob man irgendwelche Zusammenhänge findet

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar

            Lädt...
            X