SQL Server 2008 prend beaucoup de memory?

J'effectue des tests de stress sur ma database, hébergée sur SQL Server 2008 64 bits sur une machine 64 bits avec 10 Go de RAM.

J'ai 400 fils. Chaque thread interroge la database toutes les secondes, mais le time de requête ne prend pas de time, comme le dit le profileur SQL, mais après 18 heures, SQL Server utilise 7,2 Go de RAM et 7,2 Go de memory virtuelle.

Est-ce que c'est un comportement normal? Comment puis-je ajuster SQL Server pour nettoyer la memory inutilisée?

SQL Server est conçu pour utiliser autant de memory que possible pour améliorer les performances en mettant en cache des charges en memory. La recommandation est d'utiliser des machines dédiées pour SQL Server, ce qui en fait une approche parfaitement valide, car il ne s'attend pas à ce que quelqu'un d'autre ait besoin de la memory. Donc, vous ne devriez pas vous inquiéter à ce sujet; c'est parfaitement normal.

Cela dit, si vous êtes sur une machine de développement plutôt que sur un environnement en direct, vous voudrez peut-être limiter la quantité de memory pour arrêter la prise en charge de votre boîte. Dans ce cas, le plus simple est d'ouvrir SQL Server Management Studio, cliquez avec le button droit sur le server et select "properties", puis dans l'onglet "Mémoire" vous pouvez définir la memory maximale du server.

En fait, il y a une petite astuce pour get ce que vous cherchez. Le problème / la question est de savoir comment faire en sorte que SQL Server abandonne "temporairement" la memory dont il n'a pas besoin de façon agressive, puis le laisser le rétablir comme requirejs.

Pour ce faire, exécutez le script suivant:

EXEC sys.sp_configure N'show advanced options', N'1' RECONFIGURE WITH OVERRIDE GO EXEC sys.sp_configure N'max server memory (MB)', N'{low water mark}' GO RECONFIGURE WITH OVERRIDE GO EXEC sys.sp_configure N'max server memory (MB)', N'{High water mark}' GO RECONFIGURE WITH OVERRIDE GO EXEC sys.sp_configure N'show advanced options', N'0' RECONFIGURE WITH OVERRIDE GO 

Mettez vos propres valeurs pour {low water mark} et {high water mark} (en Mo).

Cela va forcer la memory à un montant minimum, puis l'ouvrir à nouveau tout de suite si SQL Server a besoin / veut.

La seule chose à faire est de programmer le script pour qu'il s'exécute périodiquement.

Recommandation:

Lorsque SQL Server n'est pas très utilisé, essayez de l'exécuter toutes les 6 heures automatiquement. S'il est fortement utilisé, exécutez une fois toutes les 24 heures (disons au milieu de la nuit ou juste avant le début de la journée). Votre utilisation va varier.

En quittant la réponse de Greg, lorsque vous configurez la memory, essayez de laisser au less 10% de la memory totale libre pour le operating system. Si SQL est hors de contrôle sur une longue requête, vous voulez que ce coussin puisse être à distance et administrer la boîte.