Announcement

Collapse
No announcement yet.

Schlafender Prozess Sperrt andere

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Schlafender Prozess Sperrt andere

    Hallo Zusammen

    ich habe das Problem, dass mir Prozesse im Ruhezustand, jedoch mit einer offenen Transaktion andere Prozesse blockieren. Dies passiert wenn ich mein Batchprogramm mehrmals starte, resp. ausführe:

    Beispiel:

    SPID Status Transaktion öff. Befehl Wartetyp
    54 Im Ruhezustand 1 Awaiting Command
    59 Angehalten 0 SELECT LCK_M_S

    Da die SPID 59 blockiert wird, verabschiedet sich auch meine Applikation. Die einzigen Einstellungen die ich vornehme ist, dass multiple Connection = TRUE. Wobei dies auch bereits eine umgehungsvariante für dieses Problem darstellt. Ebenfalls Ist das Result set eingeschaltet.

    Kann mir jemand erklären, an was das genau liegen kann? Wenn ich aus de app direkt ein commit sende, habe ich dieses Problem nicht - doch meines Wisses ist der SQL ja autocommited?! (habe ich nicht explizit deaktiviert)

    Vielen Dank für Eure Hilfe.

    Grüsse

    Philipp

    PS: Meine App verbindet über ODBC für SQL SERVER Version 2000.85.1117.00!

  • #2
    Dein Batch macht ein Read, der SQL-Server führt das durch und setzt dabei standardmäßig shared locks. Wenn die Query nun nicht alles ausliest, dann bleibt der Select praktisch "offen" und damit auch die shared locks. Die Transaktion ist ja aus Sicht des Servers nicht abgeschlossen (daher auch kein autocommit).
    Jetzt können weitere Queries nach wie vor dieselben Daten lesen, aber ein Update ist nicht möglich, weil dazu erst alle shared locks weg müssten. Abhilfe wäre wahrscheinlich, nach dem Select die Query-Komponente explizit zu schließen, dann könnte der Server sein autocommit machen und die shared locks wieder auflösen.
    Siehe auch hier: http://www.mssqlcity.com/Articles/Adm/SQL70Locks.htm

    bye,
    Helmut

    Comment


    • #3
      Uff. Bin ja nur Gastleser hier, aber das ist tatsächlich immer noch so bei MSSQL?
      Hat sich da in der Version 2005 bzw. 2008 was getan? Jetzt nur mal rein interessehalber aber das lesende Zugriffe schreibende Zugriffe blockieren ist ja wirklich nicht mehr zeitgemäß.


      Dim
      Zitat Tom Kyte:
      I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

      Comment


      • #4
        Na ja, da hat sich schon was getan mit dem SQl-Server 2005. Man muss aber mal damit umgehen lernen:
        http://msdn.microsoft.com/en-us/library/ms345124.aspx

        bye,
        Helmut

        Comment


        • #5
          Na dann ist mssql ja bald mal soweit wie Oracle mitte der 80er in dem Bereich war

          Dim
          Zitat Tom Kyte:
          I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

          Comment


          • #6
            Hallo Leute

            Besten Dank für Eure Hilfe. Ich werde mich künftig auch in den anderen bereichen mit meinem Wissen einbringen. Grüsse
            philipp

            Comment

            Working...
            X