Salut à tous,
J'ai une base (un annuaire) que se trouve vérouillée avec aucune lecture
possible lorsque l'on y fait des insertions (et on en fait pas mal par
jour, il y a 6 personnes qui y travaille avec en moyenne 1000 nouvelles
insertions par heure et par personne). Y a t'il un moyen pour
outrepasser ce blocage.
Autre petite chose, l'insertion est beaucoup plus consommatrice de
ressources que la lecture. Existe t'il un moyen de limiter les
ressources utilisées par les processus d'insertion (par utilisateur,
procédure stockée...) pour favoriser ceux en lecture seule ?
La base est constituée d'un arbre intervallaire (merci à Fred Brouard
pour son excellent article) qui définit la structure de l'annuaire
(environ 470000 enregistrements) et une table spécifique qui comporte
l'ensemble des contacts de celui-ci (plus de 16 millions et elle devrait
doubler cette année).
Si vous avez besoin de complément d'info pour me conseiller n'hésitez pas.
Jérôme
Salut à tous,
J'ai une base (un annuaire) que se trouve vérouillée avec aucune lecture
possible lorsque l'on y fait des insertions (et on en fait pas mal par
jour, il y a 6 personnes qui y travaille avec en moyenne 1000 nouvelles
insertions par heure et par personne). Y a t'il un moyen pour
outrepasser ce blocage.
Autre petite chose, l'insertion est beaucoup plus consommatrice de
ressources que la lecture. Existe t'il un moyen de limiter les
ressources utilisées par les processus d'insertion (par utilisateur,
procédure stockée...) pour favoriser ceux en lecture seule ?
La base est constituée d'un arbre intervallaire (merci à Fred Brouard
pour son excellent article) qui définit la structure de l'annuaire
(environ 470000 enregistrements) et une table spécifique qui comporte
l'ensemble des contacts de celui-ci (plus de 16 millions et elle devrait
doubler cette année).
Si vous avez besoin de complément d'info pour me conseiller n'hésitez pas.
Jérôme
Salut à tous,
J'ai une base (un annuaire) que se trouve vérouillée avec aucune lecture
possible lorsque l'on y fait des insertions (et on en fait pas mal par
jour, il y a 6 personnes qui y travaille avec en moyenne 1000 nouvelles
insertions par heure et par personne). Y a t'il un moyen pour
outrepasser ce blocage.
Autre petite chose, l'insertion est beaucoup plus consommatrice de
ressources que la lecture. Existe t'il un moyen de limiter les
ressources utilisées par les processus d'insertion (par utilisateur,
procédure stockée...) pour favoriser ceux en lecture seule ?
La base est constituée d'un arbre intervallaire (merci à Fred Brouard
pour son excellent article) qui définit la structure de l'annuaire
(environ 470000 enregistrements) et une table spécifique qui comporte
l'ensemble des contacts de celui-ci (plus de 16 millions et elle devrait
doubler cette année).
Si vous avez besoin de complément d'info pour me conseiller n'hésitez pas.
Jérôme
Ceci n'est pas normal. Au moins pouvez vous faire du "dirty read" soit
en pilotant un niveau d'isolation soit par un tag dans les requêtes.
Non et ce serait pire, car ilsdureraient plus longtemps donc
verouillerait plus => contention.
Vérifiez que le niveau d'isolation des proc d'insertion dans l'arbre est
bien remis à READ COMMITED après usage.
Si les insertions dans l'arbre sont massive et que vous n'avez pas
besoin des dernières entrées tout de suite, déportez le traitement du
recalcul de l'arbre par un bacth planifié.
Par exemple insertion des saisies dans une table temporaire et
basculement dans l'arbre la nuit.
Dans ce cas il vous faudra implémenter une procédure de calcul des
intervalles basée sur le modéle en auto référence.
Ceci n'est pas normal. Au moins pouvez vous faire du "dirty read" soit
en pilotant un niveau d'isolation soit par un tag dans les requêtes.
Non et ce serait pire, car ilsdureraient plus longtemps donc
verouillerait plus => contention.
Vérifiez que le niveau d'isolation des proc d'insertion dans l'arbre est
bien remis à READ COMMITED après usage.
Si les insertions dans l'arbre sont massive et que vous n'avez pas
besoin des dernières entrées tout de suite, déportez le traitement du
recalcul de l'arbre par un bacth planifié.
Par exemple insertion des saisies dans une table temporaire et
basculement dans l'arbre la nuit.
Dans ce cas il vous faudra implémenter une procédure de calcul des
intervalles basée sur le modéle en auto référence.
Ceci n'est pas normal. Au moins pouvez vous faire du "dirty read" soit
en pilotant un niveau d'isolation soit par un tag dans les requêtes.
Non et ce serait pire, car ilsdureraient plus longtemps donc
verouillerait plus => contention.
Vérifiez que le niveau d'isolation des proc d'insertion dans l'arbre est
bien remis à READ COMMITED après usage.
Si les insertions dans l'arbre sont massive et que vous n'avez pas
besoin des dernières entrées tout de suite, déportez le traitement du
recalcul de l'arbre par un bacth planifié.
Par exemple insertion des saisies dans une table temporaire et
basculement dans l'arbre la nuit.
Dans ce cas il vous faudra implémenter une procédure de calcul des
intervalles basée sur le modéle en auto référence.
Bonjour,Ceci n'est pas normal. Au moins pouvez vous faire du "dirty read" soit
en pilotant un niveau d'isolation soit par un tag dans les requêtes.
Je vais effectivement modifier le niveau d'isolation pour mettre un Read
Uncommitted. A part un tag dans mes différentes procédures stockées
c'est que la solution de "pilotage" du niveau d'isolation ?
Non et ce serait pire, car ilsdureraient plus longtemps donc
verouillerait plus => contention.
Ok, ça parait logiqueVérifiez que le niveau d'isolation des proc d'insertion dans l'arbre
est bien remis à READ COMMITED après usage.
Je vais vérifier ça de suite...Si les insertions dans l'arbre sont massive et que vous n'avez pas
besoin des dernières entrées tout de suite, déportez le traitement du
recalcul de l'arbre par un bacth planifié.
Par exemple insertion des saisies dans une table temporaire et
basculement dans l'arbre la nuit.
Dans ce cas il vous faudra implémenter une procédure de calcul des
intervalles basée sur le modéle en auto référence.
En fait comme l'ajout d'une branche ce fait systématiquement en "fin" de
table c'est notre logiciel qui calcule automatiquement les bords et
évite donc ce genre de problème. Il reste juste à mettre à jour la
racine ce qui reste une opération simple et non couteuse. Mais votre
procédure reste très intéressanteet et je vais l'étudier de plus près...
Tiens d'ailleurs une petite chose qui manque à l'article c'est une
procédure optimisée pour déplacer une branche dans une autre. Les
différentes tests que j'ai effectué me donne des temps conséquents
(surtout sur 470 000 enregistrements :) ce qui rend le procédé
inutilisable dans mon logiciel (j'aimerai pouvoir faire un drag'n'drop
d'une branche dans mon treeview, en moyenne un branche complète
d'annuaire doit faire 1000 à 2000 enregistrements). Si vous avez une
nouvelle astuce à me faire profiter :) :).
Jérôme
Bonjour,
Ceci n'est pas normal. Au moins pouvez vous faire du "dirty read" soit
en pilotant un niveau d'isolation soit par un tag dans les requêtes.
Je vais effectivement modifier le niveau d'isolation pour mettre un Read
Uncommitted. A part un tag dans mes différentes procédures stockées
c'est que la solution de "pilotage" du niveau d'isolation ?
Non et ce serait pire, car ilsdureraient plus longtemps donc
verouillerait plus => contention.
Ok, ça parait logique
Vérifiez que le niveau d'isolation des proc d'insertion dans l'arbre
est bien remis à READ COMMITED après usage.
Je vais vérifier ça de suite...
Si les insertions dans l'arbre sont massive et que vous n'avez pas
besoin des dernières entrées tout de suite, déportez le traitement du
recalcul de l'arbre par un bacth planifié.
Par exemple insertion des saisies dans une table temporaire et
basculement dans l'arbre la nuit.
Dans ce cas il vous faudra implémenter une procédure de calcul des
intervalles basée sur le modéle en auto référence.
En fait comme l'ajout d'une branche ce fait systématiquement en "fin" de
table c'est notre logiciel qui calcule automatiquement les bords et
évite donc ce genre de problème. Il reste juste à mettre à jour la
racine ce qui reste une opération simple et non couteuse. Mais votre
procédure reste très intéressanteet et je vais l'étudier de plus près...
Tiens d'ailleurs une petite chose qui manque à l'article c'est une
procédure optimisée pour déplacer une branche dans une autre. Les
différentes tests que j'ai effectué me donne des temps conséquents
(surtout sur 470 000 enregistrements :) ce qui rend le procédé
inutilisable dans mon logiciel (j'aimerai pouvoir faire un drag'n'drop
d'une branche dans mon treeview, en moyenne un branche complète
d'annuaire doit faire 1000 à 2000 enregistrements). Si vous avez une
nouvelle astuce à me faire profiter :) :).
Jérôme
Bonjour,Ceci n'est pas normal. Au moins pouvez vous faire du "dirty read" soit
en pilotant un niveau d'isolation soit par un tag dans les requêtes.
Je vais effectivement modifier le niveau d'isolation pour mettre un Read
Uncommitted. A part un tag dans mes différentes procédures stockées
c'est que la solution de "pilotage" du niveau d'isolation ?
Non et ce serait pire, car ilsdureraient plus longtemps donc
verouillerait plus => contention.
Ok, ça parait logiqueVérifiez que le niveau d'isolation des proc d'insertion dans l'arbre
est bien remis à READ COMMITED après usage.
Je vais vérifier ça de suite...Si les insertions dans l'arbre sont massive et que vous n'avez pas
besoin des dernières entrées tout de suite, déportez le traitement du
recalcul de l'arbre par un bacth planifié.
Par exemple insertion des saisies dans une table temporaire et
basculement dans l'arbre la nuit.
Dans ce cas il vous faudra implémenter une procédure de calcul des
intervalles basée sur le modéle en auto référence.
En fait comme l'ajout d'une branche ce fait systématiquement en "fin" de
table c'est notre logiciel qui calcule automatiquement les bords et
évite donc ce genre de problème. Il reste juste à mettre à jour la
racine ce qui reste une opération simple et non couteuse. Mais votre
procédure reste très intéressanteet et je vais l'étudier de plus près...
Tiens d'ailleurs une petite chose qui manque à l'article c'est une
procédure optimisée pour déplacer une branche dans une autre. Les
différentes tests que j'ai effectué me donne des temps conséquents
(surtout sur 470 000 enregistrements :) ce qui rend le procédé
inutilisable dans mon logiciel (j'aimerai pouvoir faire un drag'n'drop
d'une branche dans mon treeview, en moyenne un branche complète
d'annuaire doit faire 1000 à 2000 enregistrements). Si vous avez une
nouvelle astuce à me faire profiter :) :).
Jérôme
llopht a écrit:
Attention, dans les PS de gestion de l'arbre, le niveau d'isoaltion doit
rester en SERIALIZABLE. Le mieux est de rétablir un READ COMMITED en fin
de SP.
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
llopht a écrit:
Attention, dans les PS de gestion de l'arbre, le niveau d'isoaltion doit
rester en SERIALIZABLE. Le mieux est de rétablir un READ COMMITED en fin
de SP.
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
llopht a écrit:
Attention, dans les PS de gestion de l'arbre, le niveau d'isoaltion doit
rester en SERIALIZABLE. Le mieux est de rétablir un READ COMMITED en fin
de SP.
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Bonjourllopht a écrit:
Attention, dans les PS de gestion de l'arbre, le niveau d'isoaltion doit
rester en SERIALIZABLE. Le mieux est de rétablir un READ COMMITED en fin
de SP.
J'ai testé avec tous les niveaux d'isolations possible, mais la base se
bloque à chaque fois.
SqlServer fait-il une différence en un simple SELECT et une procédure
stockée qui fait ce SELECT ?
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Nathan
Bonjour
llopht a écrit:
Attention, dans les PS de gestion de l'arbre, le niveau d'isoaltion doit
rester en SERIALIZABLE. Le mieux est de rétablir un READ COMMITED en fin
de SP.
J'ai testé avec tous les niveaux d'isolations possible, mais la base se
bloque à chaque fois.
SqlServer fait-il une différence en un simple SELECT et une procédure
stockée qui fait ce SELECT ?
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Nathan
Bonjourllopht a écrit:
Attention, dans les PS de gestion de l'arbre, le niveau d'isoaltion doit
rester en SERIALIZABLE. Le mieux est de rétablir un READ COMMITED en fin
de SP.
J'ai testé avec tous les niveaux d'isolations possible, mais la base se
bloque à chaque fois.
SqlServer fait-il une différence en un simple SELECT et une procédure
stockée qui fait ce SELECT ?
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Nathan