Je suis en train de mettre en place un serveur postgresql dédié sous ubuntu, avec un RAID 1 de 500 Go. Je me demande si quelqu'un pourrait partager un schéma de partitionnement simple, mais efficace, que je peux utiliser, car je suis assez nouveau dans tout cela.
Réponses
Trop de publicités?Vous n'obtiendrez pas beaucoup d'avantages en termes de performances en partitionnant avec un seul gros RAID (mais vous éviterez les problèmes majeurs liés au remplissage).
En général, j'utiliserais les valeurs par défaut du système d'exploitation, à moins que vous ne soyez vraiment à l'aise pour dimensionner les choses vous-même et que vous vous assuriez d'avoir un bon morceau d'espace là où vous avez l'intention de créer le répertoire PGDATA. Les suggestions de partitionnement du système d'exploitation ci-dessous sont celles que j'utilise sur les systèmes FreeBSD, elles sont probablement correctes pour Ubuntu également.
/ 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 peut ne pas utiliser /usr/local, si ce n'est pas le cas, vous pouvez en replier une partie dans /usr).
Re : Partitionnement spécifique à Postgres, si vous faites cela sur un seul RAID-1, il suffit de faire en sorte que [PGDATA] soit suffisamment grand pour contenir votre base de données et les journaux de transactions, plus une certaine marge de progression.
S'il s'agit d'une boîte de production et que vous vous attendez à une forte activité de la base de données, vous devez la répartir sur plusieurs RAID-1 pour séparer l'activité des disques (pour les volumes très importants, vous pouvez même envisager de les répartir sur plusieurs contrôleurs).
Oracle propose de nombreux livres blancs sur ce sujet et je vous recommande vivement de vous inspirer de leurs modèles : Ils ne sont pas simples, mais ils sont efficaces. Le schéma de partitionnement que j'utilise (chacun sur sa propre paire de disques) est le suivant :
[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
J'ai un serveur postgresql avec une activité intéressante entre 600-1000 transactions par seconde et mon partitionnement est quelque chose comme ceci :
/ - 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
En fonction de vos données, il serait intéressant que vous vous plongiez dans le partitionnement de table, pour éviter de scanner une énorme table dans le cas où vous avez besoin d'une petite partie des données. Par exemple, j'utilise des tables partitionnées pour stocker les logs, j'ai donc une table principale appelée journaux et des tableaux mensuels appelés YYYYMM_logs hérité du maître. J'utilise ensuite une fonction trigger pour placer chaque log sur la table partitionnée correspondante.