ANALYZE nach createdb .. -T vorlagedb nötig?

Hallo,

mal eine etwas spezielle Frage: ich erzeuge viele Datenbanken als Kopien eines bestimmten Masters,
momentan noch mit der Mimik

dump master / createdb copy / restore copy / vacuum -Z copy

Ich würde, um die Sache zu beschleunigen, gerne den Master direkt als Vorlage beim createdb nutzen:

createdb -T master copy

Frage: muss ich dann die copy-Datenbank auch noch einmal ANALYZEn, oder kommt die Info beim erzeugen „mit rüber“?

Danke und beste Grüße,
Torsten

ich gehe nicht davon aus, daß nach so einer Aktion die Statistiken stimmen. Dafür bin ich mir sehr sicher, daß sie nicht stimmen. Der Dump des Masters enthält keine Statistiken - woher sollen sie also kommen? Da ist definitiv ein entsprechender Lauf nötig. Ob nun expliziet oder via Auto-vacuum - er ist aber nötig.

Grüße aus Tallinn von der pgconf.eu :wink:

Aber die Frage war doch, ob das auch notwendig ist, wenn man eine DB als Template verwendet. Also eine direkte Kopie ohne dump.

Stimmt :wink:

Aufgabe an den Fragesteller: autovacuum abschalten, eine neue DB aus einem Template erstellen, Statistiktabellen von Template und neuer DB vergleichen, hier berichten. Dann autovacuum wieder einschalten.

Grüße aus Tallinn.

na ich guck mal heute. Welche Tabellen sind das denn? Ich kenne nur pg_stat.

Ich habe jetzt mal folgendes gemacht:

  1. Autovacuum aus.

  2. pg_dump -b -C -f orig.dump -Fc -Z9 original_db

  3. createdb restest-01-fromdump
    pg_restore -d restest-01-fromdump orig.dump

  4. createdb restest-02-analyzed
    pg_restore -d restest-02-analyzed orig.dump
    psql restest-02-analyzed -c ‘vacuum full analyze;’

  5. createdb -T restest-02-analyzed restest-03-T-copied

  6. pg_dump -b -C -f analyzed.dump -Fc -Z9 restest-02-analyzed
    createdb restest-04-restore-analyzed
    pg_restore -d restest-04-restore-analyzed analyzed.dump

Und dann für jede davon

SELECT n_live_tup,last_vacuum,last_autovacuum,last_analyze,last_autoanalyze FROM pg_catalog.pg_stat_all_tables WHERE relname=‘fetteste_tabelle’;

Ergebnisse:

restest-01-fromdump => n_live_tup=839507, alle last sind leer
restest-02-analyzed => n_live_tup=839507, last_analyze ist belegt (logisch)
restest-03-T-copied => n_live_tup=0, alle last sind leer
restest-04-… => n_live_tup=839507, alle last sind leer

Alles als User postgres.

Sieht für mich also so aus, als käme es bei dump/restore sehr wohl mit, nicht
aber bei createdb -T. Das macht meine schöne neue schnelle Methode leider
langsamer.