Comment vérifieriez-vous si votre instance de base de données postgresql a besoin de plus de mémoire RAM pour gérer ses données de travail actuelles?
database
performance
postgresql
memory
SDReyes
la source
la source
Réponses:
Si tout ce que vous êtes sur Linux, votre RAM physique totale doit être supérieure à la taille de votre base de données sur le disque afin de minimiser les E / S. Finalement, toute la base de données sera dans le cache de lecture du système d'exploitation et les E / S seront limitées à la validation des modifications sur le disque. Je préfère trouver la taille de la base de données en exécutant "du -shc $ PGDATA / base" - cette méthode regroupe toutes les bases de données en un seul numéro. Tant que vous êtes plus grand que ça, ça devrait aller.
En outre, vous pouvez consulter le taux d'accès au cache des récupérations de tas et d'index. Ceux-ci mesurent le taux de hits dans les tampons partagés de PostgreSQL. Les chiffres peuvent être un peu trompeurs - même si cela a pu être un échec dans le cache des tampons partagés, il peut toujours être un succès dans le cache de lecture du système d'exploitation. Pourtant, les hits dans les tampons partagés sont toujours moins chers que les hits dans le cache de lecture du système d'exploitation (qui, à leur tour, sont moins chers de quelques ordres de grandeur que d'avoir à revenir sur le disque).
Afin de regarder le taux de réussite des tampons partagés, j'utilise cette requête:
Cela vous donne les 25 pires contrevenants où le cache tampon est manquant pour toutes les tables où au moins un bloc a dû être récupéré à partir du "disque" (encore une fois, qui pourrait être le cache de lecture du système d'exploitation ou les E / S de disque réelles). Vous pouvez augmenter la valeur dans la clause WHERE ou ajouter une autre condition pour que heap_blks_hit filtre les tables rarement utilisées.
La même requête de base peut être utilisée pour vérifier le taux de réussite d'index total par table en remplaçant globalement la chaîne "heap" par "idx". Jetez un œil à pg_statio_user_indexes pour obtenir une ventilation par index.
Une note rapide sur les tampons partagés: une bonne règle de base pour cela sous Linux est de définir le paramètre de configuration shared_buffers sur 1/4 de RAM, mais pas plus de 8 Go. Ce n'est pas une règle stricte et rapide, mais plutôt un bon point de départ pour régler un serveur. Si votre base de données ne fait que 4 Go et que vous avez un serveur de 32 Go, 8 Go de tampons partagés sont en fait exagérés et vous devriez pouvoir définir cela à 5 ou 6 Go et avoir encore de la place pour une croissance future.
la source
J'ai fait ce SQL pour montrer le rapport tables / disques:
la source
Cela fonctionne également, comme indiqué dans le document Heroku:
la source