2010-05-04 5 views
3

Pour une application particulière, j'ai un ensemble de requêtes que j'exécute chaque fois que la base de données a été redémarrée pour quelque raison que ce soit (redémarrage du serveur). Ces «premiers» de la page SQL Server cache avec l'ensemble de base de travail commun des données de sorte que l'application n'est pas inhabituellement lent la première fois qu'un utilisateur se connecte par la suite. Une instance de l'application s'exécute sur un arrangement surchargé où la boîte SQL a plus de RAM que la taille de la base de données (4Gb dans la machine, la DB est actuellement inférieure à 1.5Gb et il est peu probable qu'elle croisse trop à cela dans un proche avenir). Existe-t-il un moyen net/facile de dire à SQL Server de s'en aller et de tout charger dans la RAM?"Priming" une base de données entière dans SQL Server pour la première fois

Cela pourrait se faire à la dure en ayant une analyse de script sysobjects & sysindexes et en cours d'exécution SELECT * FROM <table> WITH(INDEX(<index_name>)) ORDER BY <index_fields> pour chaque clé et l'index trouvé, ce qui devrait faire toutes les pages utilisées pour être lu au moins une fois et ainsi être en RAM, mais est-il un moyen plus propre ou plus efficace? Toutes les instances planifiées où le serveur de base de données est arrêté sont en dehors des heures normales de travail (tous les utilisateurs sont à un fuseau horaire au plus et contrairement à moi aucun d'entre eux ne travaille à des heures idiotes), un tel processus ralentit utilisateurs plus que l'ensemble de travail n'étant pas amorcée du tout ne serait pas un problème.

Répondre

1

j'utiliser un startup stored proc qui a appelé sp_updatestats

  1. Il bénéficiera des requêtes de toute façon
  2. Il boucles déjà à travers tout de toute façon (vous avez des index, non?)
+0

vous avez configuré pour qu'il effectue un scan complet et pas seulement un échantillonnage? –

+0

J'utiliserais un échantillonnage normal. Les données sont chargées dans le cache dans des extensions de 64 Ko (8 pages), vous devez donc échantillonner une rangée par étendue. Sauf si vous avez des lignes très larges, mais même dans ce cas vous obtiendrez des E/S readahead avec l'édition Enterprise aussi). Il pourrait manquer des choses, mais c'est facile à faire et même un échantillonnage de 5% avec 3 lignes par page chargerait 100% – gbn

Questions connexes