Announcement

Collapse
No announcement yet.

Stored Proc: (Un)erklärliche Perfomanceverluste

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

  • Stored Proc: (Un)erklärliche Perfomanceverluste

    Hallo,

    Einer Stored Procedure werden unter MS SQL 2000 ein int-Parameter und ein varchar-Parameter übergeben. Ist der int-Parameter gegeben (d.g. ungleich NULL), wird er direkt in einem SELECT-Statement bei WHERE feld = int-Parameter verwendet. Ist dieser int nicht gegeben, hingegen der varchar-Parameter, dann, wird anhand einer Suche über den varchar-Parameter der int-Parameter gesetzt und anschließend im SELECT-Statement verwendet. Wird dieser zweite Ast durchlaufen, so ist die Performanceeinbuße extrem.

    Beim Debuggen der procedure werden alle Anweisungen bevor dem SELECT gleich schnell erledigt. Ist der int gegeben, so läuft der SELECT schnell durch, wurde der int aber gesetzt (SET @int-parameter = ...), da er als Parameter den Wert NULL hatte, so dauernd die Ausführung beim SELECT erheblich länger.

    Gibt es dafür eine Erklärung?

    Gruß<br>
    Stephan Schneider

  • #2
    Hallo,

    bei einem SELECT hängt die Performance davon ab, ob ein Index für die Suche zur Verfügung steht. Ich vermute einmal, dass der INT-Parameter für die Suche nach einem Schlüsselfeld (Primär- oder Fremdschlüssel) genutzt wird und da ist implizit ein Index drauf. Wenn bei der Suche nach dem VARCHAR-Paramter die betroffene Spalte jedoch keinen Index hat, muss der Server einen vollständigen Table Scan machen.

    Ich würde daher zuerst beide SELECT-Varianten im <i>Query Analyzer</i> ausführen und dabei die Option <b>Abfrage | Geschätzten Ausführungsplan anzeigen</b> auswählen. Selbstverständlich darf man auch alle Arbeiten/Entscheidungen auf den <b>Index-Optimierungs-Assistenten</b> des MS SQL Servers abwälzen :-

    Comment


    • #3
      Hallo,

      was passiert, wenn die SP gelöscht und neu angelegt wird

      Comment


      • #4
        Hallo Herr Kosch,

        >was passiert, wenn die SP gelöscht und neu angelegt wird?

        Ich habe die DB neu erzeugt und anschließend die SPs per Script neu aufgespielt. Wenn ich danach die besagte SP debugge, ernte ich diese extreme Performanceeinbuße. Die komplette DB ist also absolut "neu" bei diesem Verhalten.

        Was soll durch das Löschen und nochmalige Aufspielen bewirkt werden?

        Stepha

        Comment


        • #5
          Hallo,

          &gt;Was soll durch das Löschen und nochmalige Aufspielen bewirkt werden?

          dieser Versuch sollte nur prüfen, ob der Grund für dieses Verhalten in einem "Irrtum" des Optimizers (Procedure cache) liegt

          Comment

          Working...
          X