2011-10-04 4 views
3

Comment puis-je configurer la quantité maximale de mémoire qu'une requête (select query) peut utiliser dans sql server 2008?mémoire max. Par requête

Je sais qu'il existe un moyen de définir la valeur minimale, mais qu'en est-il de la valeur maximale? Je voudrais l'utiliser parce que j'ai beaucoup de processus en parallèle. Je connais l'option MAXDOP mais c'est pour les processeurs.

Mise à jour:

Ce que je suis en train d'essayer de faire est de lancer une charge de données en continu. Cette charge de données est dans le formulaire ETL (extraire la transformation et charger). Pendant que les données sont chargées, je veux lancer quelques requêtes (select). Tous sont des requêtes coûteuses (contenant group by). Le processus le plus important pour moi est la charge de données. J'ai obtenu une vitesse moyenne de 10000 lignes/seconde et quand je cours les requêtes en parallèle, elle descend à 4000 lignes/seconde et même plus bas. Je sais qu'un peu plus de détails devraient être fournis, mais c'est un produit plus complexe sur lequel je travaille et je ne peux pas le détailler davantage. Une autre chose que je peux garantir est que ma vitesse de chargement ne baisse pas en raison de problèmes de verrouillage, car je les ai surveillés et supprimés.

+1

Quelle édition de SQL Server 2008 sont-vous? –

+1

La réponse courte est: vous ne devriez probablement pas (et si vous essayez de le faire, alors vous faites probablement quelque chose de fondamentalement faux). Si vous avez construit une requête dont vous avez besoin des résultats, cela prend tout ce qu'il faut. –

+2

Peut-être que vous devriez décrire le problème réel que vous rencontrez ... –

Répondre

3

Il n'y a aucun moyen de définir une mémoire maximale à un niveau par requête que je peux penser.

Si vous utilisez Enterprise Edition, vous pouvez utiliser resource governor pour définir la quantité maximale de mémoire pouvant être consommée par un groupe de charges de travail particulier.

+0

pas tout à fait ce que l'affiche demande, mais pourrait être viable. –

+1

@MitchWheat - Oui, j'ai ajouté une première ligne parce que je ne connais aucun moyen de faire exactement ce que l'OP demande. –

+0

Oui. C'est ce que je cherchais. Merci: D –

0

Dans SQL 2008, vous pouvez utiliser le gouverneur de ressources pour cela. Là, vous pouvez définir le paramètre request_max_memory_grant_percent pour définir la mémoire (il s'agit du pourcentage relatif à la taille de pool spécifiée par la valeur max_memory_percent du pool). Ce paramètre n'est pas spécifique à la requête, il est spécifique à la session.

+1

ne sais pas comment cela ajoute beaucoup à la réponse de Martin (5 minutes) plus âgé? –

+0

Désolé, mais quand j'ai ouvert la fenêtre et ne l'a pas touché quelques minutes - après avoir enregistré que j'ai vu la réponse –

0

En plus de la réponse de Martin

Si vos requêtes sont tous identiques ou similaires, en travaillant sur les mêmes données, ils partageront la mémoire de toute façon.

Exemple:

Un site occupé avec 100 connexions simultanées exécutant 6 différentes requêtes paramétrées entre eux sur la même gamme générale de données.

  • 6 plans d'exécution
  • 100 hypothèses, l'utilisateur
  • un pool de tampons avec des drapeaux assortis et des compteurs pour montrer l'utilisation de chaque page de données

Si vous avez 100 requêtes différentes ou ils ne sont pas paramétrées puis fixez le code.

mémoire par requête est quelque chose que je ne l'ai jamais pensé ou souciais depuis la dernière millenium

+1

je supposais que l'OP parlait de subventions de mémoire pour les opérateurs comme les sortes et les jointures de hachage. Serait bon d'avoir une certaine clarté quant à la motivation de la question. –