Seite 1 von 1

Zeitberechnung zur Ausführung von SQL Statements, Debug-Modus?

Verfasst: Mi, 21. Mär 2018 11:44
von UliTs
Gibt es eigentlich eine Möglichkeit, innerhalb eines DataDictionary so eine Art "Debug-Modus" zu aktivieren, der die Ausführungszeiten von SQL Statements protokolliert?
Im einfachsten Fall könnte eine Tabelle mit 2 Spalten gefüllt werden: 1) Das Statement als Memo-Feld, 2) die Ausführungszeit in Millisekunden

Könnte ich dies in ein DataDictionary integrieren?

Uli

Re: Zeitberechnung zur Ausführung von SQL Statements, Debug-Modus?

Verfasst: Mi, 21. Mär 2018 12:26
von HaPe
Hallo Uli !
Gibt es eigentlich eine Möglichkeit, innerhalb eines DataDictionary so eine Art "Debug-Modus" zu aktivieren, der die Ausführungszeiten von SQL Statements protokolliert?
Ist das beim ADS nicht schon "serienmäßig" dabei?
Eventuell muss man das nur aktivieren :roll:

Re: Zeitberechnung zur Ausführung von SQL Statements, Debug-Modus?

Verfasst: Mi, 21. Mär 2018 12:44
von UliTs
HaPe hat geschrieben: Mi, 21. Mär 2018 12:26 Hallo Uli !
Gibt es eigentlich eine Möglichkeit, innerhalb eines DataDictionary so eine Art "Debug-Modus" zu aktivieren, der die Ausführungszeiten von SQL Statements protokolliert?
Ist das beim ADS nicht schon "serienmäßig" dabei?
Eventuell muss man das nur aktivieren :roll:
Und? Wie geht das?

Re: Zeitberechnung zur Ausführung von SQL Statements, Debug-Modus?

Verfasst: Mi, 21. Mär 2018 13:00
von HaPe
Hallo Uli !
Ist das beim ADS nicht schon "serienmäßig" dabei?
Eventuell muss man das nur aktivieren :roll:
Und? Wie geht das?
Da ich kein ADS einsetze kann ich dir das nicht sagen wo man was einstellen muss :roll:
Meine zwei verwendeten SQL-Server ($MS-SQL und PostGreSQL) können das und ich gehe davon aus dass das bei jedem SQL-Server möglich ist :)

Der erste Google-Treffer mit +ads +sql-log bringt mir das:
http://devzone.advantagedatabase.com/dz ... y=42&ID=45

Re: Zeitberechnung zur Ausführung von SQL Statements, Debug-Modus?

Verfasst: Mi, 21. Mär 2018 14:40
von UliTs
Danke, aber warum rollst du andauernd mit den Augen?
Ich schaue mir das nachher an.
Uli

Re: Zeitberechnung zur Ausführung von SQL Statements, Debug-Modus?

Verfasst: Mi, 21. Mär 2018 15:05
von nightcrawler
EXECUTE PROCEDURE sp_EnableQueryLogging(....)
kostet aber Performance und sollte nicht einfach so eingesetzt werden.

Re: Zeitberechnung zur Ausführung von SQL Statements, Debug-Modus?

Verfasst: Mo, 26. Mär 2018 11:15
von UliTs
So, ich habe jetzt das Messen bei SQL Queries hinbekommen. Dazu muß man im DataDictionary eine Tabelle mit folgenden Spalten anlegen:

Code: Alles auswählen

Create Table SqlLogging(
  "ID" Autoinc            /* unique key for the query */,
  "Start Time" Timestamp  /* Query start timestamp */,
  "Optimized" Logical     /* True if optimized */,
  "Return Code" Integer   /* Query result code */,
  "Rows Affected" Integer /* Rows affected by the query */,
  "End Time" Timestamp    /* Query end timestamp */,
  "Run Time" Double       /* Query duration in milliseconds */,
  "Database" Char(255)    /* Database name */,
  "User Name" Char(100)   /* Connected user name */,
  "Connection Name" Char(100) /* Connection name */,
  "Application ID" Memo       /* Application ID */,
  "Query" Memo                /* The SQL statements */
)
Anschließend kann man mit

Code: Alles auswählen

execute procedure sp_EnableQueryLogging( 
  'SqlLogging'/*TableName*/,TRUE/*TruncateExistingData*/,
  FALSE/*LogOnlyUnoptimizedQueries*/,0/*MinimumTimeBeforeLogging*/,
  ''/*EncryptionPassword,C20*/ )
das Logging aktivieren und z.B. sich das Ergebnis mit

Code: Alles auswählen

select SL."Start Time",SL."Run Time",Left(SL.Query,50) Query50,SL.Query,SL.Description
from   SqlLogging SL
anschauen.

Re: Zeitberechnung zur Ausführung von SQL Statements, Debug-Modus?

Verfasst: Mo, 26. Mär 2018 11:16
von UliTs
Ach ja, und mit

Code: Alles auswählen

execute procedure sp_DisableQueryLogging();
kann man das Logging wieder ausschalten :-)

Re: Zeitberechnung zur Ausführung von SQL Statements, Debug-Modus?

Verfasst: Mo, 26. Mär 2018 15:23
von UliTs
Kann man auch die Rechenzeit von Locate, skip, oder gotop Befehlen protokollieren?

Re: Zeitberechnung zur Ausführung von SQL Statements, Debug-Modus?

Verfasst: Mo, 26. Mär 2018 15:31
von nightcrawler
zwei Sachen: Die Log-Tabelle legt ADS selbst an, falls sie nicht vorhanden ist.
auf ISAM-Befehle gibt es nur ein Debugging, welches jeden API Befehl in eine Datei schreibt, aber keine richtige Auswertung (und ist extremmmmmm langsam).

Re: Zeitberechnung zur Ausführung von SQL Statements, Debug-Modus?

Verfasst: Mo, 26. Mär 2018 15:45
von HaPe
Hallo Uli !
Kann man auch die Rechenzeit von Locate, skip, oder gotop Befehlen protokollieren?
Ich würde dafür auf Client-Seite den HRTimer (QueryPerformanceCounter/Frequency) einsetzen und damit protokollieren.
download/file.php?id=2900
So mache ich es auch in meinem Message-Manager (in VFP). Das Protokollieren kann ich in der INI-Datei aktivieren und deaktivieren.

Re: Zeitberechnung zur Ausführung von SQL Statements, Debug-Modus?

Verfasst: Di, 10. Apr 2018 13:11
von UliTs
Hallo Hans-Peter,

mit HRTimer habe ich auch schon gearbeitet. Damit komme ich -falls Zeit vorhanden- wahrscheinlich auch weiter.

Ich habe mal auf meinem Rechner das SqlLogging eingeschaltet. Bei einem Statement kommt als Ergebnis 812ms (Run Time) heraus. Die Zeit wäre an sich ok. Aber es ist trotzdem viel langsamer. Aber bei Start Time kommt 13:03:52 und bei End Time kommt 13:04:03 heraus. Das ist eine Differenz von 11000ms, was eindeutig zu viel ist.

Interpretiere ich die Werte falsch?

Edit: ja, habe ich. Die Differenz ist nicht die Zeit, die zur Berechnung des SqlStatements nötig war, sondern die Zeit, bis das Statement wieder geschlossen wurde...