Je suis curieux de savoir si quelqu'un a fait des expériences ou des comparaisons entre les systèmes de fichiers et les performances des bases de données. Sous Linux, je me demande quel est le système de fichiers optimal pour une base de données postgres. De plus, quels paramètres (inode, etc.) lui conviennent le mieux? Est-ce quelque chose qui peut différer considérablement en fonction des données de la base de données?
Si vous recherchez une question relative aux performances générales du système de fichiers / base de données, ce message contient de bonnes informations.
Cependant, je voudrais obtenir autant de conseils que possible sur les performances d' insertion par rapport aux performances de lecture. Merci pour toutes les bonnes réponses!
Réponses:
Achetez une copie de "postgresql high performance" de Greg Smith. C'est un excellent livre et deux chapitres ou plus concernent le matériel disque et les systèmes de fichiers. Tu apprendras beaucoup.
En bref: il n'y a pas de réponse courte.
Mais je vais essayer de résumer:
Mais comme vous vous demandez vraiment quel FS utiliser, vous devriez lire le livre!
la source
Tout d'abord, vous voulez d'abord un système de fichiers fiable et rapide une seconde. Ce qui exclut certaines options ...
Les tests de performances montrent que souvent XFS donne les meilleures performances. Il y a des problèmes de stabilité une fois que vous atteignez des scénarios de disque très proche de saturé, mais tant que vous surveillez que cela ne se produit pas, cela vous donnera des performances légèrement meilleures.
En théorie, vous n'avez pas besoin d'un système de fichiers de journalisation pour le répertoire pg_xlog, mais la différence de vitesse est généralement si petite qu'elle n'en vaut pas la peine. Pour le répertoire de données, vous devriez toujours avoir un système de fichiers de journalisation des métadonnées.
la source
Les systèmes de gestion de base de données implémentent leur propre journalisation via les journaux de base de données, donc l'installation d'un tel SGBD sur un système de fichiers journalisé dégrade les performances via deux mécanismes:
La journalisation redondante augmente la quantité d'activité du disque
La disposition du disque physique peut être fragmentée (bien que certains systèmes de fichiers de journalisation aient des mécanismes pour nettoyer cela).
De nombreuses activités sur le disque peuvent remplir le journal, provoquant de fausses conditions de «disque plein».
Il y a quelques années, j'ai vu une instance où cela a été fait sur le système de fichiers LFS sur une installation Baan sur une boîte HP / UX. Le système avait des problèmes persistants de performances et de corruption de données qui n'ont pas été diagnostiqués jusqu'à ce que quelqu'un comprenne que les systèmes de fichiers étaient formatés avec LFS.
Les volumes contenant des fichiers de base de données auront normalement un petit nombre de fichiers volumineux. Les serveurs SGBD auront normalement un paramètre qui configure le nombre de blocs lus dans une seule E / S. Des nombres plus petits seraient appropriés pour les systèmes de traitement de transactions à volume élevé car ils minimiseraient la mise en cache des données redondantes. De plus grands nombres seraient appropriés pour des systèmes tels que les entrepôts de données qui effectuaient beaucoup de lectures séquentielles. Si possible, réglez la taille du bloc d'allocation de votre système de fichiers pour qu'elle soit identique à la lecture multi-bloc sur laquelle le SGBD est défini.
Certains systèmes de gestion de base de données peuvent fonctionner sur des partitions de disque brutes. Cela donne divers degrés de gain de performances, généralement moins sur un système moderne avec beaucoup de mémoire. Sur les systèmes plus anciens disposant de moins d'espace pour mettre en cache les métadonnées du système de fichiers, les économies d'E / S disque étaient assez importantes. Les partitions brutes rendent le système plus difficile à gérer, mais offrent les meilleures performances disponibles.
Les volumes RAID-5 entraînent plus de surcharge d'écriture que les volumes RAID-10, donc une base de données occupée avec beaucoup de trafic d'écriture fonctionnera mieux (souvent beaucoup mieux) sur un RAID-10. Les journaux doivent être placés des volumes de disque physiquement séparés dans les données. Si votre base de données est volumineuse et principalement en lecture seule (par exemple, un entrepôt de données), il peut être judicieux de la placer sur des volumes RAID-5 si cela ne ralentit pas indûment le processus de chargement.
La mise en cache en écriture différée sur un contrôleur peut vous permettre de gagner en performances au détriment de la création de certains modes de défaillance (raisonnablement improbables mais possibles) où les données pourraient être corrompues. La plus grande victoire en termes de performances est liée aux charges d'accès hautement aléatoires. Si vous souhaitez le faire, envisagez de placer les journaux sur un contrôleur distinct et de désactiver la mise en cache en écriture différée sur les volumes de journaux. Les journaux auront alors une meilleure intégrité des données et une seule défaillance ne peut pas supprimer à la fois le volume du journal et des données. Cela vous permet de restaurer à partir d'une sauvegarde et d'effectuer une restauration à partir des journaux.
la source
J'ai fait un rapport si détaillé, mais ce n'est qu'en français . Si vous lisez le français ou êtes satisfait des outils de traduction automatique ... Vous pouvez réutiliser la méthodologie et l'exécuter par vous-même.
Résumé: j'ai utilisé pgbench. Le planificateur d'E / S Linux a très peu d'importance pour les performances et le système de fichiers seulement un peu. Donc, si vous êtes pressé, choisissez simplement la valeur par défaut. J'ai choisi JFS.
la source
Le système de fichiers n'est qu'une partie du problème. Vous pouvez améliorer considérablement les performances en modifiant votre planificateur d'E / S. Heureusement, cela est assez facile à tester car vous pouvez changer le planificateur d'E / S à la volée. Je suggère d'essayer chacun d'eux pendant quelques jours sous une charge typique et de voir ce qui donne les meilleures performances.
la source
J'ai fait quelques tests il y a quelques mois:
J'ai eu un petit programme de test qui a créé 50 threads, où chaque thread a inséré 1000 (ou si c'était 10000) lignes dans la même table.
Mais avoir pg___xlog sur un disque virtuel logiciel n'est pas une option: si vous perdez le contenu du répertoire pg_xlog, postgres ne démarrera pas. (Mais il existe des disques virtuels matériels avec batterie de secours qui pourraient être intéressants.)
À mon humble avis: Utilisez le système de fichiers avec lequel vous êtes le plus à l'aise pour les fichiers de base de données. Déplacez le pg_xlog (avec un lien symbolique, voir la documentation) vers le périphérique le plus rapide possible dont vous disposez.
la source
J'ai vu que je me suis souvenu qu'un FreeBSD modifié vous donnera un peu plus de performances par rapport à d'autres OS. Bien que je sois sûr que cette information est obsolète et probablement un mythe en premier lieu. Mais vous pouvez néanmoins l'essayer, consultez cette directive pour les paramètres du noyau: http://developer.postgresql.org/pgdocs/postgres/kernel-resources.html
la source