Einblick in die langfristige Laufzeit von INSERT INTO… SELECT

7

Ich habe eine große SQL-Insert-Anweisung, die eine Übersichtstabelle aktualisiert. Der Prozess wird normalerweise stündlich ausgeführt und dauert etwa 5 bis 10 Minuten, um die Eindeutigkeiten in diesem Zeitraum zu berechnen. Ich habe mich "dumm" dafür entschieden, es über einen Zeitraum von 15 Tagen laufen zu lassen, und ich frage mich, ob ich irgendetwas tun kann, um einen Überblick darüber zu bekommen, wo es sich befindet. Der Prozess läuft bereits seit 9 Stunden. Ich möchte einfach wissen, ob noch die SELECT-Abfrage ausgeführt wird oder ob Daten eingefügt werden: Ich muss wissen, ob ich sie stoppen und kleinere Stapel ausführen soll oder ob ich sie einfach beenden lassen soll.

Ich weiß, dass der Server aufgrund dieser Aussage seit 9 Stunden dabei ist:

select
    now() - xact_start
  , procpid
  , client_addr
  , client_port
  , current_query
from pg_stat_activity
where xact_start is not null
order by 1 desc

Die eigentliche Abfrage lautet:

INSERT INTO summary_show_unique_personas(period, show_id, persona_id, interactions_count)
  SELECT
      date_trunc('hour', created_at) AS period
    , show_id
    , persona_id
    , COUNT(*)
  FROM
          twitter_interactions
    JOIN  show_bindings        USING(interaction_id)
    JOIN  twitter_personas     USING(screen_name)
  WHERE
        created_at >= '__PERIOD_START_AT__' AND created_at < '__PERIOD_END_AT__'
    AND interaction_created_at >= '__PERIOD_START_AT__' AND interaction_created_at < '__PERIOD_END_AT__'
  GROUP BY
    1, 2, 3;
François Beausoleil
quelle
Wie viele Zeilen werden voraussichtlich eingefügt?
Jack sagt, versuchen Sie es mit topanswers.xyz
Wurde dies immer wieder ausgeführt und möglicherweise die Zieltabelle aufgebläht? Sie sagen, es dauert 5 bis 10 Minuten, um es auszuführen, und Sie haben es über 15 Tage ausgeführt, also frage ich mich, ob das bedeutet, dass Sie es immer und immer wieder ausgeführt haben.
Scott Marlowe

Antworten:

8

Postgres erlaubt keine Dirty Reads, daher benötigen wir andere Methoden, um zu überprüfen, ob Zeilen aus einer zweiten Transaktion eingefügt werden, z.

select pg_relation_size('summary_show_unique_personas');

Der von dieser Abfrage zurückgegebene Wert erhöht sich, wenn gerade Einfügungen ausgeführt werden (es sei denn, ich denke, sie füllen den durch vorherige deleteAnweisungen freigegebenen Speicherplatz aus ).

Jack sagt, versuchen Sie es mit topanswers.xyz
quelle