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

 PostgreSQL Discussion :

Accés concurrent, verrou


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 197
    Par défaut Accés concurrent, verrou
    Bonjour,

    je commence un mini projet en python avec accés à une BDD postgre via le module psycopg2.
    Je parviens a verrouiller des lignes d'une table grâce à un SELECT.. FOR UPDATE.
    Là je suis content!

    Par contre, si j'ouvre une 2e session et tente d'accéder aux memes lignes avec : SELECT.. FOR UPDATE. J'ai la session qui se fige tant que la premiere n'a pas fait son COMMIT (ce qui est normal).

    Comment puis je tester si les lignes sont verrouillées au préalable sans faire attendre que la 1ere session se termine? Peut on savoir qui bloque les lignes? (l'ideal serait de faire apparaitre un message pour dire untel réserve les lignes..)
    j'ai consulté divers forums où on parle de pg_locks mais j'ai très peu d'info dessus.

    Pouvez vous m'aider?

    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Par principe ce n'est pas dans le code applicatif que l'on gère les verrous (d'ailleurs on ne devrait jamais avoir besoin de poser des verrous explicites). Le SGBDR le fait tout seul et il est certainement meilleur que vous à ce niveau car il est capable de prévoir la granularité (ligne, page, bloc, table...) comme le type (partagé, exclusif, schéma, intention, update...) de verrous de manière dynamique (en fonction du contexte et notamment de la concurrence et de la charge à un instant t)

    Mais si vous voulez des performances catastrophiques et des deadlocks en pagaille, allez-y, amusez vous à tout verrouiller !

    En revanche, vous pouvez gérer des transactions. Ca c'est la manière intelligente de développer des applications cohérentes.

    Lisez ce que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/sqlaz/techniques/
    http://sqlpro.developpez.com/isolation-transaction/

    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/ * * * * *

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    On utilise pg_locks principalement pour trouver la source d'un problème en tant qu'administrateur de base de données.
    Mais s'il s'agit de mettre en oeuvre une stratégie de coopération/exclusion entre sessions concurrentes, c'est probablement une mauvaise voie. Il faudrait préciser le besoin fonctionnel. Sinon il y a des fonctions de verrouillage coopératif dans postgresql (advisory locks), voir la doc à ce sujet.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 197
    Par défaut
    Bonjour,

    Admettons que plein d'intervenants sont amenés à modifier une fiche ( article par exemple car c'est le cas pour notre gestion de stock). Avec notre "SGBD" actuel, nous reservons la fiche, l'utilisateur fait ses modifs et on fait un update qui libere la fiche.
    Personne d'autre ne doit pouvoir etre en modification si un utilisateur modifie la fiche en cours.
    alors, Comment gerer cela en postgres? (verouiller un temps indefini)

    peut être je dois procéder autrement et que je m'inspire trop du fonctionnement de notre "SGBD"..

    les avis sont les bienvenus

    merci

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Ce type de verrrouillage "pendant la saisie" doit idéalement être géré par l'applicatif.
    Conceptuellement, une simple colonne dans une table qui dit "la fiche X est actuellement verrouillée par l'utilisateur Y" est suffisante comme technique de base.
    Pour prendre le verrrou, un UPDATE sur la ligne de la fiche en question suivi d'un test pour savoir si la ligne a bien été mise à jour suffit à assurer l'exclusion mutuelle. Il faut ensuite faire un commit sans attendre.

    Ce qu'il ne faut pas faire dans la plupart des SGBD, PostgreSQL inclus, c'est laisser des transactions ouvertes pendant que l'utilisateur saisit parce que ça bloque des ressources pour un temps indéterminé.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    ça c'est du verrouillage pessimiste côté client. Le gros problème est : que va t-il se passer si l'utilisateur :
    1) ne termine jamais sa session de travail (prend sa pause et tombe dans l'escalier en plien modif....)
    2) sort de l'application sans passer par la bonne action
    3) le PC fait un écran bleu
    ???

    Dans tous les cas gérer les verrous manuellement en mode pessimiste à l'heure, des SGBDR de type C/S reste une hérésie. Il faut changer votre manière de faire et abandonner vos vieilles habitudes

    Sachez d'autant plus que dans un curseur, (les datagrid "live" reposent sur des curseurs) cette gestion est automatisée.. La question est :
    es-te vous en mode client lourd ou léger ?

    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. procédure stockée : Verrou / accès concurrent
    Par florent_g dans le forum Développement
    Réponses: 8
    Dernier message: 01/07/2011, 17h19
  2. Réponses: 22
    Dernier message: 25/08/2005, 16h03
  3. Lenteur et acces concurrent
    Par JeanMarc_T2k dans le forum Bases de données
    Réponses: 7
    Dernier message: 04/12/2004, 20h57
  4. acces concurrent avec delphi 5 entreprise
    Par Jean_paul dans le forum Bases de données
    Réponses: 2
    Dernier message: 30/11/2004, 20h19
  5. [EJB] Accès concurrents à la base de données
    Par cameleon2002 dans le forum Java EE
    Réponses: 10
    Dernier message: 23/09/2003, 11h31

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