2014-07-16 12 views
5

Lesen der Amazon Redshift-Dokumentation Ich habe einen VACUUM auf einer bestimmten 400GB-Tabelle ausgeführt, die zuvor noch nie abgesaugt wurde, um die Abfrageleistung zu verbessern. Leider hat der VACUUM dazu geführt, dass der Tisch auf 1,7 TB (!!) anwuchs und die Festplattennutzung der Redshift auf 100% gebracht hat. Ich habe dann versucht, den VACUUM durch Ausführen einer CANCEL-Abfrage in der Super User Queue zu stoppen (Sie geben sie ein, indem Sie "set query_group = 'superuser';") ausführen, aber die Abfrage hat keinen Fehler verursacht die Vacuum-Abfrage, die weiterläuft.Amazon Redshift bei 100% Festplattennutzung aufgrund der VACUUM-Abfrage

Was kann ich tun?

Antwort

8

Anscheinend gibt es zur Zeit nicht viel, was Sie tun können. Ich war stundenlang am Telefon mit Amazon-Unterstützung, sie hatten nicht die Werkzeuge, um den Vakuumbetrieb zu stoppen. Sie öffneten ein Ticket zur CANCEL-Abfrage, das stillschweigend nicht an VACUUM-Abfragen arbeitete.

Sie schlugen vor, ich mache Snapshot des Clusters (normalerweise sollte ein paar Minuten dauern, wenn Sie vorherige Snapshots gemacht haben), und dann starte ich den Cluster neu. Es funktionierte irgendwie, was bedeutete, dass das Vakuum aufhörte und ein Teil des Speicherplatzes gelöscht wurde (600GB), aber der Tisch blieb mehr als doppelt so groß wie ursprünglich. Weil es zu riskant wäre, es wieder abzusaugen, habe ich eine tiefe Kopie davon erstellt, die eine gesaugte Kopie des Tisches schaffen sollte. (Sie können über tiefe Kopie hier lesen - http://docs.aws.amazon.com/redshift/latest/dg/performing-a-deep-copy.html).

0
  1. Vakuum sollte regelmäßig geplant werden, wenn Sie auf dem Tisch täglich Vakuum machen, sollte es sehr schnell sein und wird keine erhebliche Nebenwirkung haben;
  2. In dem Fall, den Sie beschrieben haben, wäre es sicherer, den Cluster auf eine größere Konfiguration zu skalieren, dann das Vakuum zu verwenden und dann auf die ursprüngliche Konfiguration herunter zu skalieren. Beachten Sie, dass freier Speicherplatz für Berechnungen auf dem RedShift-Cluster von entscheidender Bedeutung ist. Wenn der freie Speicherplatz ausfällt, werden alle Lese-/Schreibvorgänge auf dem Cluster sehr langsam.
2

Ich habe den Vakuumbetrieb mehrmals gestoppt. Vielleicht war das Feature zu dieser Zeit nicht verfügbar.
Führen Sie die folgende Abfrage aus, die Ihnen die Prozess-ID für die Vakuumabfrage gibt.

select * from stv_recents where status='Running';

Sobald Sie Prozess-ID haben, können Sie die folgende Abfrage ausführen, um den Prozess zu beenden.

select pg_terminate_backend(pid);

3

Hinweis: Führen Sie diese Abfrage: (aus here) zu sehen, welche Tabellen sollten Sie absaugen.

Hinweis: Dies hilft nur, wenn Sie wissen möchten, welche Tabellen groß sind und was Sie durch vacuum erhalten können.

select trim(pgdb.datname) as Database, 
    trim(a.name) as Table, ((b.mbytes/part.total::decimal)*100)::decimal(5,2) as pct_of_total, b.mbytes, b.unsorted_mbytes 
    from stv_tbl_perm a 
    join pg_database as pgdb on pgdb.oid = a.db_id 
    join (select tbl, sum(decode(unsorted, 1, 1, 0)) as unsorted_mbytes, count(*) as mbytes 
    from stv_blocklist group by tbl) b on a.id=b.tbl 
    join (select sum(capacity) as total 
     from stv_partitions where part_begin=0) as part on 1=1 
    where a.slice=0 
    order by 3 desc, db_id, name; 

Dann Vakuumtisch (n) mit hohen unsorted_mbytes:

VACUUM your_table;
Verwandte Themen