9 votes

Puis-je faire tenir une BD entière en mémoire ?

Ma base de données a une taille d'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 de l'ordinateur lorsqu'il est actif, on constate qu'il est utilisé à environ 85 % (y compris le système d'exploitation, etc.).

Cela signifie-t-il que toute l'activité de lecture de la base de données fonctionne uniquement en mémoire (c'est-à-dire que toute la base de données se trouve en mémoire) ? ou existe-t-il encore un cas où elle devrait aller sur le disque ?

1 votes

À titre de comparaison, quelle est l'utilisation lorsque l'application n'est pas active ? En général, l'un des avantages d'un système de base de données est qu'il n'a pas besoin de tout le fichier en mémoire, mais qu'il gardera en mémoire ce que vous en tirez jusqu'à ce que vous l'effaciez ailleurs. Je vais devoir répondre "non".

0 votes

@Mr. Disappointment : Je reconnais qu'il s'agit d'un avantage, mais dans le cas où il s'agit d'un avantage, il est nécessaire d'en tenir compte. peut mettre le fichier complet en mémoire (comme dans le cas présent), n'est-ce pas ?

0 votes

Si cela s'avère nécessaire, alors oui. Mais à la demande des appelants et des données dont ils ont besoin, et non pas de manière naturelle. Donc, en général, si vous avez un problème de mémoire de base de données, ce sera avec le code d'appel ou le logiciel d'appui, ou un mélange des deux.

5voto

Dr Zimmerman Points 136

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

Mais vous n'avez pas à deviner, vous pouvez le mesurer exactement et voir si cela se produit ou non. Les éléments pertinents compteurs de performance sont :

  • Page espérance de vie Nombre de secondes pendant lesquelles une page restera dans le pool de tampons sans références.
  • Pages lues/sec 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. Les E/S physiques étant coûteuses, vous pouvez peut-être minimiser ce coût, soit en utilisant un cache de données plus grand, des index intelligents et des requêtes plus efficaces, soit en modifiant la conception de la base de données.
  • Ecritures de pages/sec Nombre d'écritures de pages de base de données physiques émises par seconde.

0 votes

Oui, toute la base de données 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 dans le Master SQL Server, où même une poignée d'entre eux équivaut à une taille plus grande que la mémoire disponible de la machine, comment cela fonctionne-t-il ? Je suis tenté de dire qu'il n'y a pas de défaut définitif, ni de probabilité de l'un ou l'autre scénario - comme je l'ai dit précédemment, cela dépend davantage de l'environnement que du moteur.

0 votes

M. Déception : vous appliquez ma réponse à une question différente. L'OP a 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 pour le cas où vous avez 60 sites web et comment fonctionne la mise en cache du pool buffer dans ce cas, alors posez cette question :)

0 votes

Vous êtes l'expert en la matière, 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 tient-elle compte d'un certain seuil de mémoire utilisé par des consommateurs inconnus ?

-5voto

L'ensemble de la base de données (c'est-à-dire les données) ne serait pas stocké en mémoire (serveur sql). Après avoir examiné les index et/ou les clés, il récupérera un pointeur vers l'endroit du fichier de données où se trouvent les données que vous recherchez, et ira probablement sur le disque pour les récupérer. S'il n'y a pas de clés ou d'index, il faudrait scanner tout le 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 afin de minimiser les lectures sur disque.

Vous pouvez obtenir des bases de données en mémoire, par exemple MySql Cluster database..... Ce type de base de données est conçu pour placer la totalité de la base de données en mémoire sur un groupe de serveurs afin d'assurer une haute disponibilité, une reprise après sinistre et une récupération rapide des données.

1 votes

Je n'ai pas assez de représentants pour voter contre, mais je ne comprends pas bien pourquoi vous dites qu'il n'y a pas de raison catégorique pour que cela soit stocké dans la mémoire. Une fois qu'une page est lue dans le cache tampon, elle y reste jusqu'à ce que la pression interne ou externe de la mémoire entraîne la réduction du cache.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X