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

Advantage Database Server

Moderator: Moderatoren

Antworten
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

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

Beitrag 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
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

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

Beitrag 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:
--
Hans-Peter
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

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

Beitrag 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?
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

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

Beitrag 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
--
Hans-Peter
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

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

Beitrag von UliTs »

Danke, aber warum rollst du andauernd mit den Augen?
Ich schaue mir das nachher an.
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

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

Beitrag von nightcrawler »

EXECUTE PROCEDURE sp_EnableQueryLogging(....)
kostet aber Performance und sollte nicht einfach so eingesetzt werden.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

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

Beitrag 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.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

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

Beitrag von UliTs »

Ach ja, und mit

Code: Alles auswählen

execute procedure sp_DisableQueryLogging();
kann man das Logging wieder ausschalten :-)
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

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

Beitrag von UliTs »

Kann man auch die Rechenzeit von Locate, skip, oder gotop Befehlen protokollieren?
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

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

Beitrag 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).
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

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

Beitrag 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.
--
Hans-Peter
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

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

Beitrag 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...
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten