Wie zu schrumpfen pg_toast Tabelle?
Mir läuft auf postgres 9.3 auf mac osx und ich haben eine Datenbank, geriet außer Kontrolle. Früher habe ich die Tabelle, die hatten eine Spalte die gespeicherten großen Datenmengen. Dann habe ich bemerkt, dass es die db-Größe wuchs um rund 19 GB, nur weil der ein pg_toast Tabelle. Dann Entferne ich die erwähnte Spalte und lief Vakuum, um die db auf eine kleinere Größe wieder, aber es blieb das gleiche. Also, wie kann ich schrumpfen die Größe der Datenbank?
SELECT nspname || '.' || relname AS "relation"
,pg_size_pretty(pg_relation_size(C.oid)) AS "size"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')
ORDER BY pg_relation_size(C.oid) DESC
LIMIT 20;
Ergebnisse in
pg_toast.pg_toast_700305 | 18 GB
pg_toast.pg_toast_700305_index | 206 MB
public.catalog_hotelde_images | 122 MB
public.routes | 120 MB
VACUUM VERBOSE ANALYZE pg_toast.pg_toast_700305; INFO: vacuuming "pg_toast.pg_toast_700305"
INFO: index "pg_toast_700305_index" now contains 9601330 row versions in 26329 pages
DETAIL: 0 index row versions were removed.
0 index pages have been deleted, 0 are currently reusable.
CPU 0.06s/0.02u sec elapsed 0.33 sec.
INFO: "pg_toast_700305": found 0 removable, 0 nonremovable row versions in 0 out of 2393157 pages
DETAIL: 0 dead row versions cannot be removed yet.
There were 0 unused item pointers.
0 pages are entirely empty.
CPU 0.06s/0.07u sec elapsed 0.37 sec.
VACUUM
Struktur der Routen-Tabelle
id serial NOT NULL,
origin_id integer,
destination_id integer,
total_time integer,
total_distance integer,
speed_id integer,
uid bigint,
created_at timestamp without time zone,
updated_at timestamp without time zone,
CONSTRAINT routes_pkey PRIMARY KEY (id)
- Die toast-Tabellen speichern Daten, die für jede "große" Spalte. Jeder Datentyp mit variabler Länge, wobei der tatsächliche Wert einen bestimmten Schwellenwert überschreitet, werden dort gespeichert. Vermutlich haben Sie andere Spalten, die dazu beitragen, die Tabelle Größe
- Genau das ist es, was ich lese auch über die toast-Tabelle und ich Sie gelöscht, die Spalte, die große Datenmengen enthalten, nur sehr kleine Werte. Ich klebte die Struktur der Routen-Tabelle in den ursprünglichen post, da sieht man es.
- Wie Sie wissen, diese toast-Tabellen gehören zu den
routes
Tabelle?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie Folgendes:
VACUUM FULL
auf einem Produktion system, stellen Sie sicher, Sie sind sich bewusst mögliche Folgen.Können Sie eine der zwei Arten von Staubsaugen: standard oder voll.
standard:
voll:
Beachten Sie, dass VAKUUM-VOLL sperren der Tabelle arbeiten, bis es fertig ist.
Können Sie ausführen möchten, standard-Vakuum-häufiger auf Ihre Tabellen, die häufigen hochladen/löschen-Aktivität, es kann Ihnen nicht so viel Raum als Vakuum satt wird, aber Sie werden in der Lage zum ausführen von Operationen wie SELECT, INSERT, UPDATE und DELETE, und es wird weniger Zeit in Anspruch.
In meinem Fall, wenn pg_toast (zusammen mit anderen Tabellen) außer Kontrolle geriet, standard-VAKUUM-machte einen leichten Unterschied aber der war nicht genug. Ich verwendete VAKUUM-VOLL zurückfordern, die mehr Speicherplatz auf der Festplatte war sehr langsam auf große Beziehungen. Ich beschloss, tune autovacuum und verwenden standard-VAKUUM öfter auf meine Tabellen, die Häufig aktualisiert werden.
Wenn Sie Bedarf an VAKUUM-VOLL, Sie sollten es tun, wenn Ihre Nutzer sind weniger aktiv.
Auch, schalten Sie nicht autovacuum.
Können Sie einige zusätzliche Informationen hinzufügen ausführliche auf Ihre Befehle: