Hallo zusammen,
ich habe eine T-SQL Prozedur (MSSQL 2008), in welcher ein Cursor mit FAST-FORWARD und Read Only-Option eine große Tabelle (mit Index) durchläuft, dabei sehr einfache Rechenoperationen durchführt und die Ergebnisse anschließend in eine andere Tabelle schreibt. Jedoch dauert das ganze sehr lange. Das seltsame dabei: Auf dem DB-Server deuten keine mit Perfmon beobachteten Werte auf einen Flaschenhals hin; die CPU-Auslastung ist nur bei 10% (!), es gibt keine Locks etc. Festplatte langweilt sich ebenfalls.
Wie in der Literatur nachzulesen ist, sei das bei Verwendung des Cursors normal.
Meine Frage ist nun: Wieso ist der Cursor so langsam, wenn der Server doch allem Anschein nach genügend Power hätte, den Cursor schneller abzuarbeiten?
Der Ausführungsplan sagt mir, dass 46% der Zeit für "Clustered Index Insert" und 45% der Zeit fürs Sortieren der Select-Anweisung in der Cursordeklaration drauf gehen.
Schon mal danke für die Hilfe!
Christoph
ich habe eine T-SQL Prozedur (MSSQL 2008), in welcher ein Cursor mit FAST-FORWARD und Read Only-Option eine große Tabelle (mit Index) durchläuft, dabei sehr einfache Rechenoperationen durchführt und die Ergebnisse anschließend in eine andere Tabelle schreibt. Jedoch dauert das ganze sehr lange. Das seltsame dabei: Auf dem DB-Server deuten keine mit Perfmon beobachteten Werte auf einen Flaschenhals hin; die CPU-Auslastung ist nur bei 10% (!), es gibt keine Locks etc. Festplatte langweilt sich ebenfalls.
Wie in der Literatur nachzulesen ist, sei das bei Verwendung des Cursors normal.
Meine Frage ist nun: Wieso ist der Cursor so langsam, wenn der Server doch allem Anschein nach genügend Power hätte, den Cursor schneller abzuarbeiten?
Der Ausführungsplan sagt mir, dass 46% der Zeit für "Clustered Index Insert" und 45% der Zeit fürs Sortieren der Select-Anweisung in der Cursordeklaration drauf gehen.
Schon mal danke für die Hilfe!
Christoph
Comment