Laufzeit einer Abfrage/eines Triggers

Fragen und Probleme zu PL/pgSQL.
Antworten
pgSteffen
Benutzer
Beiträge: 89
Registriert: Di 14. Dez 2010, 09:46

Laufzeit einer Abfrage/eines Triggers

Beitrag von pgSteffen » Mo 6. Mär 2017, 13:35

Hallo Wissende,
ich möchte die Laufzeit (die Dauer) einer Abfrage bzw. einer Triggerfunktion ermitteln.
Leider funktioniert das nicht wie gedacht - hatte darüber auch schon mal was gelesen - kann es aber nicht finden.

Problem ist, dass alle Zeiten gleich sind. Ich habe es auch schon mit einem zusätzlichen Trigger bei AfterUpdate versucht - bringt aber auch nichts.

Wie kann ich die Laufzeit eines Triggers ermitteln (loggen)?

Code: Alles auswählen

CREATE TRIGGER mytrg_after_ins_abgleich
  BEFORE INSERT
  ON tab_abgleich
  FOR EACH ROW
  EXECUTE PROCEDURE mytrg_after_ins_abgleich();

CREATE OR REPLACE FUNCTION mytrg_after_ins_abgleich()
  RETURNS trigger AS
$BODY$
DECLARE ssql character varying;
 rs      record;
 stime timestamp;
 etime timestamp;
BEGIN
-- Startzeitpunkt setzen
   stime = now();

   ssql= 'select * from ' || 'meine_umfangreiche_abfrage';

   ---- dies dauert ein paar Sekunden ----
   for rs in execute ssql
   LOOP
      raise notice '%',now();
   END LOOP;
   -----------------------------------------------
    
-- Endezeitpunkt setzen
   etime = now();
   raise notice '%',now();
   
   new.stimestamp = stime;
   new.etimestamp = etime;
   return new;
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
PostgreSQL 10.6, 64bit Windows

akretschmer
Erfahrener Benutzer
Beiträge: 7677
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Laufzeit einer Abfrage/eines Triggers

Beitrag von akretschmer » Mo 6. Mär 2017, 13:39

now() liefert die Startzeit der aktuellen Transaktion. Ein TRIGGER läuft innerhalb einer Transaktion. Damit ist die Startzeit imme rgleich ;-)

Was Du suchst ist timeofday().

Code: Alles auswählen

test=# begin;
BEGIN
test=*# select now();
              now              
-------------------------------
 2017-03-06 13:36:54.327738+01
(1 Zeile)

test=*# select timeofday();
              timeofday              
-------------------------------------
 Mon Mar 06 13:37:42.164028 2017 CET
(1 Zeile)

test=*# select now();
              now              
-------------------------------
 2017-03-06 13:36:54.327738+01
(1 Zeile)

test=*# select timeofday();
              timeofday              
-------------------------------------
 Mon Mar 06 13:37:49.415859 2017 CET
(1 Zeile)

test=*# 

PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

pgSteffen
Benutzer
Beiträge: 89
Registriert: Di 14. Dez 2010, 09:46

Re: Laufzeit einer Abfrage/eines Triggers

Beitrag von pgSteffen » Mo 6. Mär 2017, 14:08

Hallo akretschmer ,
vielen Dank für dioe schnelle Antwort.
Dass es so einfach wird hätte ich gar nicht gedacht :) .

Gruß Steffen
PostgreSQL 10.6, 64bit Windows

Antworten