Announcement

Collapse
No announcement yet.

MSSQL Antwortzeit

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

  • MSSQL Antwortzeit

    Hi,

    wie kann man die Antwortzeiten einer DBMS messen. Ich möchte z.B. wissen, wie lange MSSQL braucht, um 10,000,000 Datensätze nach ID=1 zu suchen. 'SQL Server Management Studio' gibtndie Zeiten nur im Sekundentakt an. Ich brauche aber die Zeiten im Millisekundenbereich.

    Danke im Voraus

  • #2
    einfach mal in der Toolbar auf den 'Include Client Statistics' Knopf (oder Shift+Alt+S) drücken.

    Comment


    • #3
      Hallo Ralf,

      dnake. Ich habe es gefunden. Ich sehe aber keine Zeitangabe, die im Millisekundenbereich liegt.

      Gruß
      Zuletzt editiert von Smart; 25.06.2014, 10:40.

      Comment


      • #4
        Du bekommst im Ergebnis Bereich einen weiteren Tab 'Client Statistics' neben den Results. Der enthält einen 'Time Statistics' Bereich.

        Statistics.jpg

        Comment


        • #5
          Hi,

          danke für die Amtwort. Ich gehe davon aus, dass das relevante Feld das 'Client processing time' ist. Bei dir hat es 16 Millisekunden gedauet? Bei mir stehen die Erbenisse auf 0.

          Gruß

          Result.jpg
          Zuletzt editiert von Smart; 25.06.2014, 11:27.

          Comment


          • #6
            Dann hat es vermutlich bei dir kürzer als 16ms Sekunden gedauert. Die Timerauflösung die hier vermutlich zieht ist ungefähr 16ms so das du auch immer vielfache (ungefähr) davon bekommst.
            Aber man sieht doch schon das deine Abfrage unkompiliert ungefähr 80ms dauert und sobald die kompiliert ist und das Ergebnis vorraussichtlich komplett aus dem Cache kommt keine Zeit bzw. Zeit unterhalb der Meßgenauigkeit braucht.

            Comment


            • #7
              Das ist aber sehr ungenau. Bei Oracle gibt es z.B. eine sqlldr mit der man von dem Eingabeaufforderungsfenster heruas den Loader anstoßen kann. Da bekommt man auch die Zeit exakt mitgeteilt. Bei MSSQL Server gibt es anscheint so etwas nicht.

              Gruß

              Comment


              • #8
                Originally posted by Smart View Post
                Das ist aber sehr ungenau. Bei Oracle gibt es z.B. eine sqlldr mit der man von dem Eingabeaufforderungsfenster heruas den Loader anstoßen kann. Da bekommt man auch die Zeit exakt mitgeteilt. Bei MSSQL Server gibt es anscheint so etwas nicht.
                Gruß
                Ja, schlimm ist das, nimm lieber wieder Oracle!

                Aber sei froh dass die Ausgabe nicht gefaked ist mit 5 pseudogenauen Nachkommastellen.

                Notfalls hilft auch ein wenig Kenntnis über die Funktion eines gängigen RDBMS oder ein Messverfahren, dass die Ungenauigkeit eleminiert.

                Falls es Dir um einen Vergleich der Ausführungszeiten bei MS und Oracle geht:
                Das Verfahren ist sicher genau genug für einen echten Vergleich und nicht das kleinste bzw. einzige Problem, was bei einem solchen Vergleich auftaucht (wenn man überhaupt vergleichbare Ergebnisse produzieren will)
                Gruß, defo

                Comment


                • #9
                  Eine mögliche Lösung für alle, die sich dafür interessieren:

                  Code:
                  DECLARE @t1 DATETIME;
                  DECLARE @t2 DATETIME;
                  
                  SET @t1 = GETDATE();
                  
                  --Query--
                  
                  SET @t2 = GETDATE();
                  SELECT DATEDIFF(millisecond,@t1,@t2) AS elapsed_ms;
                  Zuletzt editiert von Smart; 27.06.2014, 08:56.

                  Comment


                  • #10
                    geht auch genauer
                    [HIGHLIGHT=SQL]DECLARE @t1 DATETIME2(7);
                    DECLARE @t2 DATETIME2(7);
                    SET @t1 = GETDATE();

                    Select * from Sys.all_objects

                    SET @t2 = GETDATE();
                    SELECT DATEDIFF(Ns, @t1,@t2) AS elapsed_ns;
                    [/HIGHLIGHT]

                    Comment


                    • #11
                      Das nutzt vermutlich nicht viel wenn man weiterhin getdate (liefert immer noch datetime) anstatt sysdatetime (liefert datetime2) benutzt

                      Egal wie hätte ich damit aber erhebliche Zweifel was die Genauigkeit betrifft.
                      a.) Nur weil der Datentyp es von seinem Format hergibt die Zeiten so genau darzustellen heißt das noch lange nicht das die getdate bzw. sysdatetime Funktionen die auch so genau liefern können.
                      b.) Was habt ihr damit denn jetzt genau gemessen? Vorher war es eindeutig die Zeit auf dem Client jetzt macht ihr abfragen vom Client gegenüber dem Server. Sind die Laufzeiten der beiden SET aufrufe jetzt mit drin oder nur zum Teil. Oder da es ein Batch ist landet der komplett auf dem Server und die Laufzeiten zum Client sind gar nicht enthalten?

                      Ohne genau zu wissen wie getdate und sysdatetime intern funktionieren würde ich erstmal vermute das man so sehr viel ~Zeitrauschen~ bekommt das Genauigkeit vortäuscht die gar nicht da ist.

                      Comment

                      Working...
                      X