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 :

Astuce :Fermer les connexions Inactives


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de dream_rachid
    Homme Profil pro
    DBA & Responsable BI
    Inscrit en
    Mars 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Tunisie

    Informations professionnelles :
    Activité : DBA & Responsable BI
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2006
    Messages : 278
    Par défaut Astuce :Fermer les connexions Inactives
    Vous pouvez essayer la requête ci-dessous, ceci pourrait vous aider à fermer toutes les connexions de couchage qui sont âgés de plus de 60 min.

    Toutefois, la suggestion est de fermer les connexions des utilisateurs du côté de l'application elle-même au lieu du côté de SQL Server.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Code Snippet
    DECLARE @v_spid INT
    DECLARE Users CURSOR
    FAST_FORWARD FOR
    SELECT SPID
    FROM master.dbo.sysprocesses (NOLOCK)
    WHERE spid>50 
    AND status='sleeping'
    AND DATEDIFF(mi,last_batch,GETDATE())>=60 --Check sleeping connections that exists before 60 min..
    AND spid<>@@spid
    OPEN Users
    FETCH NEXT FROM Users INTO @v_spid
    WHILE (@@FETCH_STATUS=0)
    BEGIN
    PRINT 'KILLing '+CONVERT(VARCHAR,@v_spid)+'...'
    EXEC('KILL '+@v_spid)
    FETCH NEXT FROM Users INTO @v_spid
    END
    CLOSE Users
    DEALLOCATE Users

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Je ne prendrai pas cette requête pour plusieurs raisons :

    - tuer des connexions est assez dangereux, et si une connexion n'est pas active, il est fort peu probable qu'elle consomme des ressources.
    C'est donc bien d'avoir montré qu'il est préférable de fermer les connexions côté application.

    - la table système master.dbo.sysprocesses est obsolète.
    Il n'est pas encore à dire qu'elle peut retourner des informations incorrectes, mais il est très probable que vous ne puissiez pas l'utiliser sur les prochaines versions de SQL Server.

    - la requête utilise un curseur et je n'aime pas les curseurs.
    Il ne s'agit pas là d'une lubie, mais en plus d'être moches et consommateurs de ressources, il sont lents parce qu'ils ne sont pas ensemblistes, ce que SQL est.

    J'aurais donc écrit la requête comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DECLARE @sql varchar(max)
    SELECT    @sql = CASE WHEN @sql IS NULL THEN '' ELSE @sql + 'KILL ' + CAST(session_id AS varchar(3)) + '; ' END
    FROM    sys.dm_exec_sessions
    WHERE    last_request_end_time < DATEADD(minute, -60, GETDATE())
     
    EXEC (@sql)
    Même si je ne m'en servirai jamais

    @++

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 997
    Billets dans le blog
    6
    Par défaut
    Oui, c'est parfaitement idiot de tuer des connexions inactives qui consomment rien et donc de devoir recréer tout l'environnement d'une connexion à chaque fois ce qui pénalisera très fortement les applications. Sans compter qu'en client lourd, le pauvre utilisateur perdra ses modif en cours et attendra éternellement une reconnexion !!!!

    Posons une analogie. Imaginons que vous construisez un parking. Il est plein, mais il y a encore de la surface non structurée. Une voiture arrive. Vous vous mettez à lisser le béton, peindre le sol et délimiter la place. La voiture repart, vous prenez votre marteau piqueur afin de détruire votre travail... Au moins avec une telle stratégie, c'est le secteur du bâtiment qui va y gagner !!!

    Encore une preuve de la prolétarisation de l'informatique : je poste un code pour épater la galerie sans voir que les conséquence en seront catastrophique....

    Commencez donc par apprendre comment fonctionne un SGBDR et ce que sont les pools de connexion par exemple afin d'éviter de polluer Internet avec de telles inepties....

    On va encore dire que je tape fort... Mais devant la bêtise de la chose, je reste pantois !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre chevronné Avatar de dream_rachid
    Homme Profil pro
    DBA & Responsable BI
    Inscrit en
    Mars 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Tunisie

    Informations professionnelles :
    Activité : DBA & Responsable BI
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2006
    Messages : 278
    Par défaut
    Bonjour

    je respectes vos avis , néanmoins, je pense que cette requête pourra être utile dans certain cas et j'ai déjà précisé deux conditions :

    - connexion inactive depuis 60 Mn (on pourra étaler cette période suivant le besoin)
    - il est préférable qu'on effectue cette opération coté applicatif : comment faire si ce dernier ne le prends pas en charge

    SQLPRO : j'étais très motivé de participer dans ce forum en espérant échanger des différents idées mais en lisant vos commentaires ... vraiment ça donne une impression négative sur les modérateurs

    je suis très désolé si , en postulant une requête ,j'ai commis une "bêtise"

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    comment faire si ce dernier ne le prends pas en charge
    Étant extrêmement loin d'être un expert en développement d'applications, je me doute que si vous ouvrez une connexion à une base de données, il doit exister une méthode pour la fermer );

    SQLPro tape effectivement fort, mais il ne le fait pas pour vous démotiver de participer. C'est cela aussi, modérer.

  6. #6
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Citation Envoyé par dream_rachid Voir le message
    Bonjour

    je respectes vos avis , néanmoins, je pense que cette requête pourra être utile dans certain cas et j'ai déjà précisé deux conditions :

    - connexion inactive depuis 60 Mn (on pourra étaler cette période suivant le besoin)
    - il est préférable qu'on effectue cette opération coté applicatif : comment faire si ce dernier ne le prends pas en charge

    SQLPRO : j'étais très motivé de participer dans ce forum en espérant échanger des différents idées mais en lisant vos commentaires ... vraiment ça donne une impression négative sur les modérateurs

    je suis très désolé si , en postulant une requête ,j'ai commis une "bêtise"
    Tu ne gagneras rien en tuons les connexions inactives d'ailleurs les connexions doivent être souvent inactives lors que vous avez réussis votre couche d'accèss aux données le cas contraire, il faut revoir votre stratégie car il y'a beaucoups de conséquences à savoir :
    1- la montée en charge que vos applications ne vont pas supporter;
    2- les lenteurs liées aux connexions ;
    3- Les transactions bloquantes ;

    Et j'en passe,

    Non, oubliez les anciennes façons de penser, et adopter les bests practices.
    Espérant vous relire très bientôt.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 997
    Billets dans le blog
    6
    Par défaut
    je suis très désolé si , en postulant une requête ,j'ai commis une "bêtise"
    Ce n'est pas en postant (et non pas postulant) une requête que vous avez commis une bêtise. C'est le contenu qui est en cause. Ce n'est pas non plus une bêtise à proprement parler, mais plutôt quelque chose de totalement incongru que vous pensez positif par manque de culture sur le sujet !
    Si l'on a justement inventé le pooling de connexion c'est pour éviter des pertes de performance importante. Or justement vous présenter ceci comme étant un avancée...
    Quels sont les tests que vous avez effectué pour affirmer cela ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Fermer les connexions d'un code externe.
    Par BugFactory dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 17/02/2011, 13h14
  2. Pourquoi doit-on fermer les connexions sql ?
    Par thebloodyman dans le forum Persistance des données
    Réponses: 6
    Dernier message: 28/10/2009, 20h45
  3. [HttpClient 4.0] Comment fermer les connexions ?
    Par Rykian dans le forum Général Java
    Réponses: 1
    Dernier message: 11/10/2009, 19h03
  4. [SQL-Server] BACKUP - Fermer les connexions de force
    Par Drahu dans le forum Administration
    Réponses: 12
    Dernier message: 28/07/2009, 23h49
  5. Fermer toutes les connexions d'une BDD
    Par youssef619 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/11/2008, 23h21

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