IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

SQL Serveur gourmand en ressources


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut SQL Serveur gourmand en ressources
    Bonjour, j'ai fait une application qui utilise SQL Serveur comme base de donnée de stockage.

    Quand on y insère en une fois plus d'un million d'enregistrements, SQL Serveur prend de plus en plus de mémoire pour monter jusqu'à 300Mo. Une fois les insertions terminées, il garde toute cette mémoire.
    J'ai vérifié avoir fermé la requête et la connexion une fois les données insérées. J'ai aussi vérifié que la transaction était fermée à la fin de l'exécution.

    Est-ce un fonctionnement normal de SQL Serveur de garder toute cette mémoire ? Et si non, comment peut-on lui demander de la rendre ?

    Merci.

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 890
    Par défaut
    Salut,

    Selon mon expérience, c'est un fonctionnement normal de SQL Serveur.

    Je n'ai pas l'impression qu'il y ait de moyen de lui demander de retourner cette mémoire, mais je me rappelle que la consommation mémoire augmentait et n'étais pas libérée. Cependant, elle est libérée ensuite petit à petit, si tu observes bien le gestionnaire des taches.

    Peut être que fermer et réouvrir SQL Serveur par le biais d'un script serait une solution ?

    A+

  3. #3
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 228
    Billets dans le blog
    25
    Par défaut
    Avez-vous configuré votre SQL Server en mémoire dynamique ? Avec un maximum ? Ou avez-vous tout laissé par défaut ? Dans ce dernier cas, partant du principe que plus il a de mémoire et plus il se porte bien ()= plus le cache de données est important), il se sert. A vous de le limiter.
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  4. #4
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Salut, merci de m'avoir répondu si vite.
    Avez-vous configuré votre SQL Server en mémoire dynamique ? Avec un maximum ? Ou avez-vous tout laissé par défaut ? Dans ce dernier cas, partant du principe que plus il a de mémoire et plus il se porte bien ()= plus le cache de données est important), il se sert. A vous de le limiter.
    J'ai tout laissé par défaut, je ne suis pas administrateur de base de donnée, je ne m'y connais pas vraiment. Aurriez-vous des liens qui expliqueraient comment faire tout ça ?

    En fait, le vrai problème est que j'ai un utilisateur qui a 2+4 Go ( vive + virtuelle ) de mémoire et qui désire insérer 42 millions d'enregistrements. Et lors de l'insertion il a le message d'erreur :
    Out of memory
    qui vient du fait que toute la mémoire est utilisée et je me vois mal lui demander d'augementer encore sa mémoire virtuelle.

  5. #5
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Avez-vous configuré votre SQL Server en mémoire dynamique ? Avec un maximum ?
    En fait ma question est : est-ce qu'en limitant la mémoire totale utilisée par SQL Serveur lui permettra tout de même de travailler normalement même avec 45 millions d'enregistrements à insérer ?

  6. #6
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    il n'y a pas trop de raison d'avoir un out of memory avec 2 GB de RAM. Je n'ai jamais vu SQL Server mourir de manque de RAM. Etes-vous sûr que le message "out of memory" ne vient pas d'un autre process ?

    Le problème que vous pourriez rencontrer en insérant 45 mio de lignes est plus du côté du log de transaction, qui risque de se remplir pas mal. Si vous voulez essayer de limiter la charge, peut-être pouvez-vous tourner votre INSERT dans une boucle, ou importer les données en plusieurs fois si vous importez d'un fichier ou d'une source externe.

  7. #7
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Citation Envoyé par rudib
    il n'y a pas trop de raison d'avoir un out of memory avec 2 GB de RAM. Je n'ai jamais vu SQL Server mourir de manque de RAM. Etes-vous sûr que le message "out of memory" ne vient pas d'un autre process ?
    Pour l'instant, ce message n'apparaît que pendant l'insertion des données dans SQL Serveur, ce qui ne garanti forcément que cela vienne de lui. Cela peut venir de mon application qui fait l'insertion mais il est sûr que cela vient de cette insertion.

    Citation Envoyé par rudib
    Le problème que vous pourriez rencontrer en insérant 45 mio de lignes est plus du côté du log de transaction, qui risque de se remplir pas mal.
    Je fais des commit tous les 1000 enregistrements afin de ne pas trop charger ce travail.
    Citation Envoyé par rudib
    peut-être pouvez-vous tourner votre INSERT dans une boucle, ou importer les données en plusieurs fois si vous importez d'un fichier ou d'une source externe.
    L'insertion de fait automatiquement en fonction des données sources des utilisateurs, il serait laborieux de découper l'insertion en plusieurs parties et le choix de la taille des différentes insertions serrait assez arbitraire (il faudrait prendre en compte le nombre d'enregistrements, le nombre de colonnes, la mémoire de la machine...) et ferrait beaucoup de développement.

    En fait, ce que j'ai pu remarquer, c'est qu'à chaque insertion, SQL Serveur prend plus de ressources et ne les rend pas toutes, ainsi il augmente progressivement. Ce qui peut faire que les autre applications n'ont plus de ressources pour fonctionner et font des "Out of Memory". Je ne cherche pas à désigner SQL Serveur comme étant le coupable, mais j'aimerais savoir si c'est un fonctionnement classique de SQL Serveur ou si c'est mon application qui ne sait pas lui demander de rendre de la ressource.

    PS : pour récupérer des ressources, redémarrer le SQL Serveur sans fermer le processus ne rend pas ces ressources, il faut arrêter le processus et relancer SQL Serveur, mais ce n'est qu'une solution de bricolage que les utilisateurs finaux n'accepteront pas.

Discussions similaires

  1. savoir si un user est connecté et ressources SQL/serveur
    Par newbie_php dans le forum Langage
    Réponses: 1
    Dernier message: 24/02/2011, 22h24
  2. RoR est-il gourmand en ressources serveur ?
    Par XavierWRC dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 27/03/2008, 12h35
  3. Taille Maxi pour un SQL SERVEUR 2000
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 21/07/2003, 09h37
  4. Supprimer une colonne sous SQL Serveur 2000
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/07/2003, 12h24
  5. [Crystal Report] Utilisation des vues de sql serveur
    Par Olivierakadev dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 15/11/2002, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo