Casablanca: Antwortzeiten eines DBMS messen

Hallo Forum

wie kann man die Antwortzeiten eines 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' gibt die Zeiten nur in Sekundentakt an. Ich brauche aber die Zeiten im Millisekundenbereich. Die Zeiten bei 'Include Client Statistics' sind ziemlich ungenau.

Danke im Voraus

  1. Tach!

    wie kann man die Antwortzeiten eines DBMS messen.

    Uhrzeit am Ende abzüglich Uhrzeit am Anfang = verbrauchte Zeit.

    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' gibt die Zeiten nur in Sekundentakt an.

    Die vom DBMS ermittelte Zeit ist ein Anhaltspunkt, aber diese Laborzeit ist nicht immer so auf die Praxis übertragbar. Wenn du die aber wissen willst "mssql execution time" wären geeignete Suchstichwörter.

    dedlfix.

  2. Moin,

    die Frage ist, ob du es im Nachhinein machen willst, oder ob du es vorher weißt.

    Im Nachhinein:

    sys.dm_exec_query_stats -> Metadaten über die Abfragen
    sys.dm_exec_sql_text(sql_handle) -> SQL-Statements

    Beispiel-Abfrage:

    SELECT  
        s1.sql_handle,  
        (SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 ,  
          ( (CASE WHEN statement_end_offset = -1  
             THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2)  
             ELSE statement_end_offset END)  - statement_start_offset) / 2+1))  AS sql_statement,  
        total_elapsed_time  
    FROM sys.dm_exec_query_stats AS s1  
    CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2  
    WHERE s2.objectid is null  
    ORDER BY s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset;
    

    In der Tabelle dm_exec_query_stats stehen noch viele weitere Daten, die dich eventuell interessieren.

    Wenn du vorher weißt, dass du die genaue Zeit messen willst, kannst du es auch einfach so machen:

    set statistics time on  
    -- your query  
    set statistics time off
    

    In diesem Fall steht die genaue Ausführungszeit im Fenster "Meldungen".

    Grüße Marco

    --
    Ich spreche Spaghetticode - fließend.
    1. Hello,

      Wenn du vorher weißt, dass du die genaue Zeit messen willst, kannst du es auch einfach so machen:

      set statistics time on

      -- your query
      set statistics time off

      
      > In diesem Fall steht die genaue Ausführungszeit im Fenster "Meldungen".  
        
      Wie ist denn das bei mssql mit dem Caching von Index-Tabellen?  
      - Macht das einen Unterschied, ob das die Erstanfrage oder eine Folgeanfrage war?  
      - Macht das einen Unterschied, ob die Anfragen über unterschiedliche Connections kommen?  
        
        
        
        
      Liebe Grüße aus dem schönen Oberharz  
        
        
      Tom vom Berg  
      ![](http://selfhtml.bitworks.de/Virencheck.gif)  
        
      
      -- 
       ☻\_  
      /▌  
      / \ Nur selber lernen macht schlau  
      [Die ultimative Seite für Selbermacher](http://getscript.de/)
      
      1. Moin,

        • Macht das einen Unterschied, ob das die Erstanfrage oder eine Folgeanfrage war?

        Meinst du jetzt identische Abfragen? Wenn ja, dann macht es einen Unterschied. Wir haben sehr umfangreiche Abfragen (> 10 gejointe Tabellen, >1000000 Datensätze), die beim ersten mal erheblich länger brauchen, als beim zweiten mal.
        Als Test habe ich hier beispielsweise eine Testabfrage, die beim ersten Ausführen ~2 Sekunden braucht, beim zweiten Ausführen sind es nur noch wenige Millisekunden.

        • Macht das einen Unterschied, ob die Anfragen über unterschiedliche Connections kommen?

        Das weiß ich leider nicht, kann es auch gerade nicht testen. Ich vermute aber, dass der Cache nicht Connection-spezifisch ist.

        Grüße Marco

        --
        Ich spreche Spaghetticode - fließend.
        1. Hello,

          • Macht das einen Unterschied, ob das die Erstanfrage oder eine Folgeanfrage war?

          Meinst du jetzt identische Abfragen? Wenn ja, dann macht es einen Unterschied. Wir haben sehr umfangreiche Abfragen (> 10 gejointe Tabellen, >1000000 Datensätze), die beim ersten mal erheblich länger brauchen, als beim zweiten mal.

          Ich meinte "statistisch unterschiedlich" :-)

          Als Test habe ich hier beispielsweise eine Testabfrage, die beim ersten Ausführen ~2 Sekunden braucht, beim zweiten Ausführen sind es nur noch wenige Millisekunden.

          • Macht das einen Unterschied, ob die Anfragen über unterschiedliche Connections kommen?

          Das weiß ich leider nicht, kann es auch gerade nicht testen. Ich vermute aber, dass der Cache nicht Connection-spezifisch ist.

          Mir ging es darum, ob sich das Verhalten im Multiuser- MultiRequest-Umfeld eher verschlimmert oder verbessert. Ich denke, dass MSSQl (ehemals Sybase) da schon ganz intelligente Verfahren verfolgt. Problem ist aber, wie immer, der verfügbare und einsgestellte Hauptspeicher für die wesentlichen (internen) Tabellen. Dazu gehört die Größe und wann der Speicher spätetestens wieder freigegeben werden muss und wann und wie ein Speicherabbild auf die HDD zu erfolgen hat. Bei Index-Tabellen enorm wichtig!

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          Die ultimative Seite für Selbermacher
          1. Moin,

            Mir ging es darum, ob sich das Verhalten im Multiuser- MultiRequest-Umfeld eher verschlimmert oder verbessert. Ich denke, dass MSSQl (ehemals Sybase) da schon ganz intelligente Verfahren verfolgt. Problem ist aber, wie immer, der verfügbare und einsgestellte Hauptspeicher für die wesentlichen (internen) Tabellen. Dazu gehört die Größe und wann der Speicher spätetestens wieder freigegeben werden muss und wann und wie ein Speicherabbild auf die HDD zu erfolgen hat. Bei Index-Tabellen enorm wichtig!

            So tief stecke ich da nicht drin. Ich bin hauptsächlich für die Entwicklung von Statistik-Reports im Bezug auf die Anwendungsdaten verantwortlich. Selbige werden von einem Jasper-Server generiert und von einem Webserver ausgeliefert.
            Administrative Aufgaben habe ich bisher nur, wenn mein Kollege nicht da ist^^

            Grüße Marco

            --
            Ich spreche Spaghetticode - fließend.
            1. Hello lieber Marco,

              Mir ging es darum, ob sich das Verhalten im Multiuser- MultiRequest-Umfeld eher verschlimmert oder verbessert. Ich denke, dass MSSQl (ehemals Sybase) da schon ganz intelligente Verfahren verfolgt. Problem ist aber, wie immer, der verfügbare und einsgestellte Hauptspeicher für die wesentlichen (internen) Tabellen. Dazu gehört die Größe und wann der Speicher spätetestens wieder freigegeben werden muss und wann und wie ein Speicherabbild auf die HDD zu erfolgen hat. Bei Index-Tabellen enorm wichtig!

              So tief stecke ich da nicht drin. Ich bin hauptsächlich für die Entwicklung von Statistik-Reports im Bezug auf die Anwendungsdaten verantwortlich. Selbige werden von einem Jasper-Server generiert und von einem Webserver ausgeliefert.
              Administrative Aufgaben habe ich bisher nur, wenn mein Kollege nicht da ist^^

              Aber lässt sich denn das Eine vom Andren trennen?

              Wie lautet doch der klassische Spruch: Jede Messung verfälscht das Ergebnis und jede Statistik ist nur so gut, wie ihre Bewertbarkeit.

              Da müssten doch die beiden Schichten in enger Rekursion zusammenarbeiten ;-O

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              Die ultimative Seite für Selbermacher
              1. Moin,

                Aber lässt sich denn das Eine vom Andren trennen?

                Naja, mit der Datenbank zu arbeiten und die Interna detailliert zu kennen sind schon verschiedene Paar Schuhe...

                Wie lautet doch der klassische Spruch: Jede Messung verfälscht das Ergebnis und jede Statistik ist nur so gut, wie ihre Bewertbarkeit.
                Da müssten doch die beiden Schichten in enger Rekursion zusammenarbeiten ;-O

                Sicher, wir arbeiten auch eng zusammen (ich und mein Kollege). Aber mit der Zeit kristallisieren sich ja schon die Präferenzen heraus. Auch wenn ich gerne noch viel mehr über die Verwaltung von Indizes etc. der verschiedenen DBMS wüsste, bin ich schon ganz zufrieden recht effizient damit arbeiten zu können.
                Das ändert sich aber hoffentlich bald, wenn ich meinen neuen Job antrete. Dann bin _ich_ nämlich der Administrator :)

                Grüße Marco

                --
                Ich spreche Spaghetticode - fließend.
                1. Hello,

                  Das ändert sich aber hoffentlich bald, wenn ich meinen neuen Job antrete. Dann bin _ich_ nämlich der Administrator :)

                  Wenn Du genügend Zeit und Internet-Recherche-Kraft nebst HiWis, die auch mal in die Bücher (nicht alles ist im Internet) steigen für Dich, dann wirst Du auch viel Erfolg haben bei der Optimierung.

                  <flame>
                  Leider Werden oft Dinge in einer höheren Schicht neun erfunden, die es in einer tieferen bereits 10mal so schnell gab. Nur weil irgend ein Hansel C mit seinen ganzen halbgaren Libs und dessen Nachfolger als das Non plus Ultra erklärt hat, sind die Fähigkeiten verkümmert.
                  </flame>

                  Liebe Grüße aus dem schönen Oberharz

                  Tom vom Berg

                  --
                   ☻_
                  /▌
                  / \ Nur selber lernen macht schlau
                  Die ultimative Seite für Selbermacher
  3. Hallo Forum,

    ich danke euch allen. Das Problem habe mit eurer Hilfe gelöst.

    Gruß