2017-03-17 3 views
-2

Ich habe versucht, ~ 600M Reihen zu löschen, und es lief für 24 Stunden mit sehr hoher Last.Wie genau löscht Arbeit?

Was mich interessiert, ist die Interna mit Rücksicht darauf, wie die Daten auf der Festplatte gespeichert sind und was eigentlich passieren muss, wenn ein Löschen auftritt.

Antwort

-1

Wenn Sie Datensätze selektiv löschen, muss Krate über alle Daten iterieren. Für den Anwendungsfall, größere Datenmengen zu löschen, empfiehlt es sich, ein Partitionierungsschema zu wählen, das dies unterstützt.

Z. B .:

CREATE TABLE IF NOT EXISTS "tsdata" (
    "ts" TIMESTAMP, 
    "sensor_id" INT, 
    "temperature" FLOAT 
    "gen_day_partition" TIMESTAMP GENERATED ALWAYS AS date_trunc('day', "ts") 
) 
PARTITIONED BY ("gen_day_partition") 

so, wenn Sie Ausgabe:

DELETE FROM "tsdata" WHERE "gen_day_partition" < 1489759756 

es werden alle Partitionen löschen, die Daten jünger als heute halten.

wenn Sie Ausgabe:

DELETE FROM "tsdata" WHERE "temperature" < 23.4 

es eine teuere Operation ist, weil eine Menge von Daten berührt werden muss.

+0

Danke für die schnelle Antwort. Richtig, ich verstehe die Iteration und Partitionierung. Ich werde meine Frage präzisieren. Was mich interessiert, ist die Interna mit Rücksicht darauf, wie die Daten auf der Festplatte gespeichert sind und was tatsächlich passieren muss, wenn ein Löschen auftritt. – nicerobot