Utilisation élevée du file d'échange% lorsque la memory n'est pas pleine

On m'a remis un server hébergeant SQL Server et on m'a demandé d'imposer une amende aux causes de ses problèmes de performance.

Tout en surveillant PerfMon, j'ai constaté que:

Fichier d'échange: % Utilisation = 25% en moyenne pendant 3 jours. Mémoire: Pages / sec> 1 moyenne pendant 3 jours. Ce que je sais que si% Usage est> 2% alors il y a trop de pagination en raison de la pression de la memory et du manque d'espace memory. Cependant, si j'ai ouvert Resource Monitor, l'onglet Memory, j'ai trouvé:

-26 Go en cours d'utilisation (sur 32 Go de RAM totale) -2 Go de veille et 4 Go de memory libre !!!!!!

S'il y a 4 Go de memory libre pourquoi la pagination ?! et surtout pourquoi (paging%) est trop élevé? !!

Quelqu'un expliquez s'il vous plaît cette situation et comment l'utilisation du file d'échange% peut être réduite à la normale.

Notez que SQL Server Max. la memory est définie sur 15 Go

L'utilisation de files de page en elle-même n'est pas un drapeau rouge majeur. Le operating system aura tendance à utiliser un file de page même s'il y a beaucoup de RAM disponible, car il lui permet de vider les parties pertinentes de la memory en RAM – ne pas penser à l'utilisation du file de la page c'est juste une copy. Tous les access utiliseront toujours la RAM, le operating system se prépare simplement à une éventualité – si la memory n'était pas pré-écrite dans le file de page, les requests de memory devraient attendre que la "vieille" memory soit vidée avant de libérer la RAM pour d'autres utilisations.

En outre, il semble que vous soyez un peu confus sur le fonctionnement de la pagination. Toute la memory de l'espace user est toujours paginée, cela n'a rien à voir avec le file de page lui-même – cela signifie simplement que vous utilisez de la memory virtuelle. La mésortingque que vous cherchez est Hard défauts par seconde ( EDIT: j'ai mal lu celui que vous lisez – Pages / sec est combien de failles dures il y a, mais le rest s'applique toujours), ce qui vous dit à quelle fréquence l'OS devait effectivement lire les données du file de la page. Même alors, 1 par seconde est extrêmement faible . Vous verrez rarement quelque chose jusqu'à ce que ce nombre dépasse 50 par seconde ou plus, et beaucoup plus élevé pour les SSD (sur mon système particulier, je peux get des milliers de fautes dures sans retard de memory notable – cela varie beaucoup sur le disque dur réel et votre chipset et pilotes).

Enfin, les performances de SQL Server peuvent souffrir de nombreuses façons. Si vous n'avez pas un vrai DBA (ou au less quelqu'un avec beaucoup d'expérience DB), vous êtes en difficulté. La plupart de vos pistes de search vous mèneront à des impasses – quelque chose d'aussi complexe et optimisé qu'un moteur de database est toujours difficile à diagnostiquer correctement. Identifier les signes – y a-t-il une utilisation élevée du processeur? Y a-t-il une forte utilisation de la RAM? Existe-t-il des requêtes avec une utilisation élevée des E / S? Y a-t-il des requêtes spécifiques qui vous causent des problèmes, ou est-ce que toute la database en souffre? Vos indices et arrays sont-ils correctement conservés? Ce ne sont que les bases. Une fois que vous avez des informations supplémentaires comme ceci, essayez DBA.StackExchange.com – SO n'est pas vraiment le bon endroit pour requestr des conseils DBA 🙂

Juste quelques coups de feu dans le noir, peut-être un peu au hasard mais je ne pouvais pas tout de suite remarquer quelque chose:

  • Peut-il y avoir des process qui sélectionnent des sets de données inutilement grands ou qui exécutent des opérations trop fréquentes? (par exemple, la pratique horrible des développeurs d'applications d'utiliser SELECT * partout ou d'get toutes datatables et ensuite le filterr au niveau de l'application ou exécuter des requêtes DB dans les loops au lieu d'get des sets d'loggings, etc.
  • L'indexing est-elle correcte? (par exemple, les éléments feuille sont-ils employés lorsque cela est possible pour réduire les opérations de search de keys? De lourdes requêtes sont-elles sauvegardées avec des index appropriés pour éviter les parsings de tables et d'index, etc.)
  • comment la population de données est-elle gérée? (par exemple, est-il possible qu'il y ait trop de divisions de page en raison d'index groupés inappropriés ou d'insertions parallèles, y a-t-il des reconstructions d'index en cours, etc.)?