Comprendre le verrou partagé sur une base de données
Posted in 2009
Topics: Transactions, Locking & Isolation
Translated from English by DrWatson — View original
Lorsque j'exécute une requête (une requête select) sur une autre base de données, je constate qu'un verrou partagé est posé sur cette base de données. Ce verrou est maintenu même après la fin de l'exécution de la requête et n'est libéré qu'une fois la session terminée. Pourquoi en est-il ainsi ? Le verrou partagé ne devrait-il pas être libéré dès que l'exécution de la requête est terminée ? Les deux bases de données ont le même niveau d'isolation : committed read. L'excellente documentation indique que le verrou partagé sur la base de données est maintenu jusqu'à la fermeture de la base de données. http://publib.boulder.ibm.com/infocenter/idshelp/v115/topic/com.ibm.sqlt.doc/sii10961218.htm Est-ce que cela a un rapport avec ce que j'observe ? Krishna
Krishna a écrit : > Lorsque j'exécute une requête (une requête select) sur une autre base de données, je > constate qu'un verrou partagé est posé sur cette base. Ce verrou est maintenu > même après la fin de l'exécution de la requête et n'est libéré qu'à la > fin de la session. Pourquoi cela ? Le verrou > partagé ne devrait-il pas être libéré une fois l'exécution de la requête terminée ? > > Les deux bases de données ont le même niveau d'isolation : committed read. > > Le manuel indique que le verrou partagé sur la base de données est maintenu > jusqu'à la fermeture de celle-ci. > http://publib.boulder.ibm.com/infocenter/idshelp/v115/topic/com.ibm.sqlt.doc/sii10961218.htm > > Est-ce que cela a un rapport avec ce que j'observe ? > > Krishna Pour empêcher que la base de données ne soit supprimée pendant que vous y êtes connecté.
Le 26 août à 20h57, Madison Pruet <mpru...@verizon.net> a écrit : > Krishna a écrit : > > Lorsque j'exécute une requête (une requête SELECT) sur une autre base de > > données, je constate qu'un verrou partagé est posé sur cette base de données. > > Ce verrou est maintenu même après la fin de l'exécution de la requête et > > n'est libéré qu'une fois la session terminée. Pourquoi ce comportement ? > > Le verrou partagé ne devrait-il pas être libéré dès que la requête a > > terminé son exécution ? > > > Les deux bases de données ont le même niveau d'isolation : committed read. > > > L'excellent manuel indique que le verrou partagé sur la base de données est > > maintenu jusqu'à la fermeture de la base de données. > >http://publib.boulder.ibm.com/infocenter/idshelp/v115/topic/com.ibm.s... > > > Est-ce que cela a un rapport avec ce que j'observe ? > > > Krishna > > Pour empêcher que la base de données ne soit supprimée pendant que vous y êtes connecté. Mais dans ce cas, le verrou est maintenu sur la base de données distante et non sur la base de données locale.
Krishna a écrit : > Le 26 août, 20h57, Madison Pruet <mpru...@verizon.net> a écrit : >> Krishna a écrit : >>> Lorsque j'exécute une requête (une requête select) sur une autre base de >>> données, je constate qu'un verrou partagé est posé sur cette base de >>> données. Ce verrou est maintenu même après la fin de l'exécution de la >>> requête et n'est libéré qu'une fois la session terminée. Pourquoi >>> cela ? Le verrou partagé ne devrait-il pas être libéré dès que la >>> requête a fini de s'exécuter ? >>> Les deux bases de données ont le même niveau d'isolation — committed read. >>> Le fameux manuel indique que le verrou partagé sur la base de données est >>> maintenu jusqu'à la fermeture de la base de données. >>> http://publib.boulder.ibm.com/infocenter/idshelp/v115/topic/com.ibm.s... >>> Est-ce que cela a un rapport avec ce que j'observe ? >>> Krishna >> Pour empêcher que la base de données soit supprimée pendant que vous y êtes. > > Mais dans ce cas, le verrou est maintenu sur la base de données distante et > non sur la base de données locale. Oui... *après* l'exécution d'une requête distribuée. Il pourrait être posé puis levé après chaque requête, mais il reste en place plus longtemps... Une remarque au passage : les bases de données n'ont pas de niveaux d'isolation... ce sont les sessions qui en ont. Les bases de données ont un mode de journalisation, qui peut restreindre les niveaux d'isolation disponibles que les sessions peuvent choisir. Une base de données non journalisée n'autorise que le niveau d'isolation dirty read. Une base de données journalisée autorise tous les niveaux d'isolation. Cordialement.