MS SQL Datenbank "Timeout abgelaufen" ???



  • Hallo zusammen,
    ich benutze einen MS-SQL Server 2000 Enterprise,
    und mache eine Menge Inserts und selects , nach einer gewissen Zeit bekomme ich folgende

    Meldung :
    [Microsoft][ODBCSQL Server Driver]Timeout abgelaufen.
    Ich habe schon im Enterprise Manager unter
    Extras | Konfigurationseigenschaften | Verbinduungen
    das Abfragetimeaout auf "0" gesetzt
    aber das ändert nichts an der Fehlermeldung.

    Kann ich noch irgendwo eine Einstellung vornehmen.
    (Ich benutze die Standard Komponenten von Borland C Builder 5 [TDatabase und TQuery])

    Danke



  • Nur so eine Idee:

    Wenn Du besonders viele INSERTS direkt hintereinander machen mußt ( ab einigen 10.000 kann das passieren), dann steigen die Wartezeiten wegen des Transaktions-Logs erheblich an. Bei größeren Triggern oder Prozeduren oder vielen Indizes kann das auch schon eher passieren. Das ist auch der Grund warum DTS das Log deaktiviert. In diesen Fällen solltest Du entweder selber für Pausen sorgen oder per BULK ohne Protokollierung arbeiten ( ich hab jetzt gerade nicht im Kopfe ob select into das z.B. macht, kann aber gerne nachschauen, wenn dies Dein Problem überhaupt löst).
    Ich gehe mal nicht davon aus, daß der SQL-Server auf einer einzelnen IDE-Platte unter Win2k läuft, wenn doch dann bringt mind SP3 erhebliche Geschwindigkeitsvorteile ( merkte ich vor kurzem auf meinem Test-SQLserver, der hat nur ne IDE-HDD).

    Gruß Karsten



  • KarstenW schrieb:

    Nur so eine Idee:

    Wenn Du besonders viele INSERTS direkt hintereinander machen mußt ( ab einigen 10.000 kann das passieren), dann steigen die Wartezeiten wegen des Transaktions-Logs erheblich an.

    Ja so die Groessenordnung ist Richtig.

    In diesen Fällen solltest Du entweder selber für Pausen sorgen

    Wie meinst DU das nach einem insert ein Sleep ??

    oder per BULK ohne Protokollierung arbeiten

    Sorry, was ist BULK ??? 🙄
    (

    Ich gehe mal nicht davon aus, daß der SQL-Server auf einer einzelnen IDE-Platte unter Win2k läuft, wenn doch dann bringt mind SP3 erhebliche Geschwindigkeitsvorteile ( merkte ich vor kurzem auf meinem Test-SQLserver, der hat nur ne IDE-HDD).

    Doch, der SQL Server läuft auf einem WIN2K-Server auf einer IDE-Platte



  • Dann lag ich ja wohl richtig...

    Dein Problem ist, daß sich die Prozesse bei zunehmendem Insert aufschaukeln. Je mehr Inserts, desto mehr Last. Dagegen hilft:

    (1) einfachste Lösung mehr Speicher ( so 1GB darf man schon haben). Je mehr
    Speicher je später treten die Timeouts auf; kommen tun sie dann eh irgendwann.

    (2) MS hatte damals bei Win 2k den Plattencache der IDE-Platten deaktiviert ( Stichwort Datenkonsistenz), dies wird mit SP3 und größer wieder behoben. Dadurch wird der SQL-Server um Größenordnungen schneller. Ich betreue hier eine ca. 1GB große DB. Dafür habe ich einen Entwicklungsrechner für Programmierung und Test mit einer IDE-Platte, da hat das SP3 ein mehrfaches an Geschwindigkeit gebracht ( ich schätze 4fach oder mehr). Vorher hatte ich sogar bei einigen komplexeren Abfragen schon timeouts

    (3) Guck mal im Query-Analyzer in die T-SQL Hilfe unter dem Stichwort "Bulk Insert", da steht eine Variante um große Datenmengen schnell in den SQL-Server zu bekommen. Ansonsten hilft Dir nur das Logging für den Zeitraum der Inserts zu deaktivieren oder eben alle 5tsnd Inserts mal 10-20 Sekunden Pause einzulegen. Inserts und Updates sind nunmal zeitraubend ( reorganisation, locking, logging) und mehrere tausend hintereinander sprengen irgendwann jede queue. Der SQL-Server muß ja weit mehr schreiben als bloß die Daten in eine DB-Datei, dafür mußt Du ihm schon Zeit lassen. Oder Du sagst Ihm halt "nimm die Daten und gut ist, keine Protokolle, keine Transaktionen..." dann gehts deutlich schneller.

    Gruß Karsten



  • Danke ertst einmal für Deine Hilfe.
    Ich werd es mal ausprobieren.


Anmelden zum Antworten