Question

Dans l'une de mes applications, j'ai une table de base de données de 1 Go utilisée pour les données de référence.Il y a une énorme quantité de lectures provenant de cette table, mais il n'y a jamais d'écriture.Je me demandais s'il était possible de charger les données dans la RAM afin de ne pas avoir à y accéder à partir du disque ?

J'utilise SQL Server 2005

Était-ce utile?

La solution

Si vous disposez de suffisamment de RAM, SQL fera un travail remarquable pour déterminer ce qu'il faut charger dans la RAM et ce qu'il faut rechercher sur le disque.

Cette question est souvent posée et elle me rappelle les gens qui essaient de définir manuellement sur quel "cœur" leur processus s'exécutera - laissez le système d'exploitation (ou dans ce cas, la base de données) faire ce pour quoi il a été conçu.

Si vous souhaitez vérifier que SQL lit effectivement vos données de recherche hors du cache, vous pouvez lancer un test de charge et utiliser Sysinternals. FichierMon, Explorateur de processus et Moniteur de processus pour vérifier que la table de 1 Go n'est pas en cours de lecture.Pour cette raison, nous plaçons parfois nos données de « recherche » dans un groupe de fichiers distinct afin qu'il soit très facile de surveiller leur accès sur le disque.

J'espère que cela t'aides.

Autres conseils

Vous allez vouloir jeter un oeil à memcached.C'est ce que de nombreux sites énormes (et à bonne échelle) utilisaient pour gérer des problèmes comme celui-ci.Si vous disposez de quelques serveurs de rechange, vous pouvez facilement les configurer pour conserver la plupart de vos données en mémoire.

http://en.wikipedia.org/wiki/Memcached

http://www.danga.com/memcached/

http://www.socialtext.net/memcached/

Juste pour clarifier le problème pour sql2005 et versions ultérieures :

Cette fonctionnalité a été introduite pour les performances dans SQL Server version 6.5.DBCC Pintable a des effets secondaires très indésirables.Il s'agit notamment de endommager la piscine tampon.Le DBCC Pintable n'est pas requis et a été supprimé pour éviter des problèmes supplémentaires.La syntaxe de cette commande fonctionne toujours mais n'affecte pas le serveur.

DBCC PINTABLE épinglera explicitement une table dans le noyau si vous voulez vous assurer qu'elle reste en cache.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top