Puis-je tenir une base de données entière en mémoire?

9

Ma base de données mesure environ 1 Go (selon le fichier mdf de ma base de données). Mon serveur de base de données a 4 Go de RAM. En regardant la consommation de mémoire sur l'ordinateur lorsqu'il est actif, il se situe à environ 85% utilisé (y compris le système d'exploitation, etc.)

Cela signifie-t-il que toutes les activités de lecture de base de données fonctionnent uniquement en mémoire (c'est-à-dire que la base de données entière est en mémoire)? ou y a-t-il encore un cas où il faudrait aller sur le disque?


la source
1
Eh bien, à titre de comparaison, à quoi sert lorsque l'application n'est pas active? Généralement, l'un des avantages d'un système de base de données est qu'il n'a pas besoin du fichier complet en mémoire, mais il s'adaptera à ce que vous en retirerez en mémoire jusqu'à ce que vous le vidiez ailleurs. Je vais devoir dire «non».
Grant Thomas
@Monsieur. Déception: je conviens que c'est un avantage, mais dans le cas où il peut mettre le fichier complet en mémoire (comme dans ce cas), le serait-il?
Si cela devait être le cas, alors oui. Mais à la demande des appelants et des données dont ils ont besoin, pas naturellement, naturellement. Donc, généralement, si vous avez un problème de mémoire de base de données, ce sera avec le code appelant ou le logiciel de support, ou un mélange des deux.
Grant Thomas
1
Un exemple de perspective: je connais une très grande entreprise Internet possédant plusieurs très gros sites de portail. Ils livrent ca. 300 millions d'annonces de leurs propres adservers pour ces portails. La structure des serveurs publicitaires est telle qu'il existe une grande base de données Oracle avec toutes les informations pour la comptabilité et le ciblage, mais il y a 32 gros serveurs (32 Go de RAM) contenant des bases de données plus petites (avec uniquement les annonces actuellement actives) en RAM . Ils ne touchent pas à un disque, ils ne doivent pas: ils n'ont que 1/1000 seconde pour trouver une annonce à placer lorsque la requête la concernant arrive, tout accès au disque rendrait cet objectif impossible à atteindre.

Réponses:

5

Oui, la base de données entière est probablement stockée en mémoire. Il videra les pages sales sur le disque à des intervalles de point de contrôle. Notez cependant que toutes les mises à jour devront écrire dans le journal et attendre que les enregistrements du journal soient renforcés sur un stockage durable avant la validation. Cet ancien document de base sur les E / S SQL Server 2000 contient tous les détails dont vous aurez besoin et bien plus encore.

Mais vous n'avez pas à deviner, vous pouvez mesurer exactement cela et voir si cela se produit ou non. Les compteurs de performances concernés sont:

  • Espérance de vie de la page Nombre de secondes pendant lesquelles une page restera dans le pool de mémoire tampon sans références.
  • Lectures de page / s Nombre de lectures de pages de base de données physiques émises par seconde. Cette statistique affiche le nombre total de lectures de pages physiques dans toutes les bases de données. Étant donné que les E / S physiques sont coûteuses, vous pouvez réduire le coût, soit en utilisant un cache de données plus important, des index intelligents et des requêtes plus efficaces, soit en modifiant la conception de la base de données.
  • Écritures de page / s Nombre d'écritures de pages de base de données physiques émises par seconde.
Remus Rusanu
la source
"Oui, la base de données entière est probablement stockée en mémoire." Donc, dans le cas de notre serveur de production, avec un minimum de ~ 60 sites Web utilisant chacun une base de données dédiée au sein de SQL Server Master, où même une poignée d'entre eux seulement équivaut à une taille supérieure à la mémoire disponible des machines, comment cela fonctionne-t-il ? Je suis tenté de dire qu'il n'y a pas de défaut définitif, ou de probabilité de l'un ou l'autre scénario - selon un commentaire précédent que j'ai fait, il est vraiment plus dépendant de l'environnement que du moteur.
Grant Thomas
@Monsieur. Déception: vous appliquez ma réponse à une autre question. L'OP dit: My database is about 1gb in size (according to the mdf file of my db). My database server has 4gb of ram.. Si vous voulez une réponse au cas où vous avez 60 sites Web et comment fonctionne la mise en cache du pool de mémoire tampon dans ce cas, posez cette question :)
Remus Rusanu
Vous êtes l'expert ici, mais veuillez excuser ma nature curieuse: cette théorie suppose-t-elle (parce que nous n'avons pas de données spécifiques) que la machine ne fait rien d'autre? Ou représente un certain seuil de mémoire utilisé par des consommateurs inconnus?
Grant Thomas
Comme je l' ai dit: you don't have to guess, you can measure this exactly.
Remus Rusanu
-5

La base de données entière (c'est-à-dire les données) ne serait pas stockée en mémoire (serveur SQL). Après avoir examiné les index et / ou les clés, il récupérera un pointeur vers où se trouvent les données que vous recherchez dans le fichier de données, et ira probablement sur le disque pour les récupérer. Si aucune clé ou index, devrait analyser l'ensemble du tas.

Selon la version de SQL Server que vous exécutez, il peut exister des stratégies de mise en cache des données bien utilisées pour minimiser les lectures de disque.

Vous POUVEZ obtenir des bases de données en mémoire, par exemple la base de données MySql Cluster.


la source
1
Je n'ai pas assez de représentants pour voter contre, mais je ne sais pas pourquoi vous dites qu'il ne serait catégoriquement pas stocké en mémoire. Une fois qu'une page est lue dans le cache de tampon, elle y restera jusqu'à ce que la pression de la mémoire interne ou externe entraîne la suppression du cache.
Martin Smith