
Ich richte einen dedizierten PostgreSQL-Server auf Ubuntu ein und verwende 500 GB RAID 1. Ich frage mich, ob mir jemand ein einfaches, aber effektives Partitionierungsschema geben kann, das ich verwenden kann, da ich auf diesem Gebiet noch ziemlich neu bin.
Antwort1
Durch die Partitionierung mit einem einzigen großen RAID erzielen Sie keinen großen Leistungsvorteil (Sie vermeiden jedoch größere Probleme durch das Auffüllen von /).
Im Allgemeinen würde ich einfach die Standardeinstellungen des Betriebssystems verwenden, es sei denn, Sie sind wirklich sicher, die Größe selbst festzulegen. Stellen Sie einfach sicher, dass Sie genügend Speicherplatz haben, wo Sie das PGDATA-Verzeichnis erstellen möchten. Die folgenden Vorschläge zur Betriebssystempartitionierung verwende ich auf FreeBSD-Systemen. Für Ubuntu sind sie wahrscheinlich auch in Ordnung.
/ 1GB (or larger)
[SWAP] 2GB or 2*RAM Size
/var 10GB
/usr 10GB
/usr/local 15GB
/tmp 2GB
/home 10GB ("Big enough for home directories")
-------------------------------------------------------------
(OS Total) 50 GB
[PGDATA] Postgres data directory ("The rest")
(Ubuntu nutzt möglicherweise /usr/local nicht, andernfalls können Sie einen Teil davon in /usr integrieren)
Betreff: Postgres-spezifische Partitionierung. Wenn Sie dies auf einem einzelnen RAID-1 tun, machen Sie [PGDATA] einfach groß genug, um Ihre Datenbank und Transaktionsprotokolle sowie etwas Spielraum für Erweiterungen aufzunehmen.
Falls es sich um eine Produktionsbox handelt und Sie eine hohe DB-Aktivität erwarten, sollten Sie diese auf eine Reihe von RAID-1s aufteilen, um die Festplattenaktivität zu trennen (bei sehr hohen Datenmengen können Sie sogar eine Aufteilung auf mehrere Controller in Betracht ziehen).
Oracle hat viele tolle Whitepapers zu diesem Thema und ich empfehle Ihnen dringend, sich deren Designs zu holen: Sie sind nicht einfach, aber effektiv. Das Partitionierungsschema, das ich verwende (jeweils auf einem eigenen Festplattenpaar), ist:
[PGDATA] 5-10GB
[PGDATA]/pg_xlog 5-10GB (More if you expect lots of transaction logs)
[PGDATA]/base Big enough for your database
[PGDATA]/[Tablespace] Optional - Separate out "high-traffic" table spaces
[PGDATA]/xlog_archive Big enough for archived transaction logs & dumps
Antwort2
Ich habe einen PostgreSQL-Server mit interessanter Aktivität zwischen 600 und 1000 Transaktionen pro Sekunde und meine Partitionierung sieht ungefähr so aus:
/ - 10GB
swap - 15GB (I have 8GB RAM)
/var - 20GB
/home - 60GB (don't ask why, but I think 60gb is too much for home)
pgdata - 100 GB
Basierend auf Ihren Daten wäre es interessant, wenn Sie sich mit der Tabellenpartitionierung befassen würden, um das Scannen einer riesigen Tabelle zu vermeiden, falls Sie nur einen kleinen Teil der Daten benötigen. Ich verwende beispielsweise partitionierte Tabellen zum Speichern von Protokollen, daher habe ich eine Mastertabelle namensProtokolleund monatliche Tabellen genanntJJJJMM_logsvom Master geerbt. Dann verwende ich eine Triggerfunktion, um jedes Protokoll in die entsprechende partitionierte Tabelle einzufügen.