C'est une GRANDE question et je trouve les réponses fascinantes. Je vais la commenter en tant que DBA Oracle et mes réponses sont SPECIFIQUES à la base de données Oracle. Il s'agit d'une erreur majeure que beaucoup de personnes commettent lorsqu'elles travaillent avec Oracle. Je ne suis pas sûr que cela s'applique également à d'autres applications. Il ne s'agit pas d'un hors-sujet, mais d'une réponse spécialisée.
Lorsque vous réglez les performances avec Oracle, vous cherchez vraiment à éliminer les goulets d'étranglement. Bien que la plupart d'entre nous ne le disent pas, cette approche est basée sur la théorie des contraintes : https://en.wikipedia.org/wiki/Theory_of_constraints
La mémoire n'est peut-être pas votre goulot d'étranglement. Oracle dispose de mécanismes complexes pour gérer la mémoire et le simple fait d'augmenter la mémoire peut en fait ralentir les choses si le goulot d'étranglement se situe dans d'autres domaines. Permettez-moi de vous donner un exemple TRÈS courant.
Les requêtes semblent être lentes. Le consensus est que si nous augmentons la RAM, nous devrions augmenter le temps de réponse des requêtes puisque la mémoire est plus rapide que le disque. Eh bien... Voici comment Oracle gère la mémoire pour les données. Oracle a une variété d'emplacements de mémoire qui sont alloués à des tâches spécifiques. Vous pouvez donc augmenter ces mémoires. La zone utilisée pour les données s'appelle le 'buffer cache'. Il s'agit d'une série de listes liées (dont le nombre a tendance à augmenter à chaque version). Chaque fois qu'un bloc est trouvé sur le disque lors d'une requête, un algorithme de hachage est exécuté sur celui-ci pour déterminer dans quelle liste le placer. L'endroit où le placer dans la liste est basé sur un algorithme de comptage des touches (expliqué sur le site de support Oracle, donc vous devez payer pour l'obtenir... ce n'est pas vraiment important).
CEPENDANT, lorsque vous exécutez une requête, Oracle prend un verrou sur la chaîne de tampons que vous recherchez à ce moment-là. Ce verrou (remarque : il ne s'agit pas d'un verrou. Cherchez la différence dans Google) bloque toutes les autres opérations sur cette chaîne pendant la durée de votre lecture. Il bloque donc les lectures ET les écritures (ce qui est totalement différent de l'affirmation d'Oracle selon laquelle les verrous ne bloquent pas les lectures).
Cela est nécessaire car, lorsque vous lisez le bloc dans la chaîne, Oracle le déplace en fonction de la fréquence à laquelle il est "demandé". Les blocs les plus fréquemment demandés sont déplacés vers le haut et les blocs moins fréquemment demandés sont laissés en bas et vieillis. Vous ne pouvez pas avoir deux sessions de lecture d'une liste chaînée et de déplacement de blocs, sinon vous rencontrerez des pointeurs qui pointent vers des emplacements inexistants.
Lorsque vous augmentez la taille de la mémoire, vous augmentez la taille de chaque liste liée. Cela augmente le temps nécessaire à la lecture de la liste. Une seule requête pauvre ou une requête complexe peut faire des dizaines de milliers, voire des millions de lectures dans des listes liées. Chaque lecture est rapide, mais le nombre d'entre elles conduit à la prise de latches et celles-ci bloqueront d'autres sessions. Oracle appelle cela une "entrée/sortie logique" (ou "buffer get" ou autre chose). Ce jargon est spécifique à Oracle et peut avoir une autre signification dans d'autres secteurs de l'informatique).
Ainsi, si la liste est plus longue et que vous avez un très mauvais SQL, les instructions SQL retiendront leurs verrous plus longtemps. L'augmentation de la mémoire peut occasionnellement RÉDUIRE les performances. La plupart du temps, cela ne se produit pas. Les gens dépenseront beaucoup d'argent et ne verront aucun avantage. Ceci étant dit, il y a des moments où vous avez besoin de plus de mémoire dans le cache de la mémoire tampon, mais vous devez identifier correctement le goulot d'étranglement pour savoir si cela est approprié. Je ne peux pas discuter de la façon d'analyser cela dans ce post. Consultez les forums DBA. Certaines personnes y discutent de ce sujet. C'est assez complexe.
Quelqu'un a-t-il des exemples spécifiques avec d'autres logiciels où cela peut se produire ? Il existe un excellent livre d'affaires intitulé "The Goal" qui traite de l'allègement des contraintes dans une usine. Ce processus est très similaire à celui que les DBA d'Oracle utilisent pour évaluer les problèmes de performance. Il s'agit souvent d'une lecture standard dans les programmes de MBA. Il est très utile à lire pour les professions informatiques.
https://en.wikipedia.org/wiki/Eliyahu_M._Goldratt