OVH Cloud OVH Cloud

Recréation d'index : utilité ou abérration ?

7 réponses
Avatar
Jean-Yves
Bonjour,

J'ai un GROS souci sur un lot de procédures stockées, dont les performances
fluctuent énormément dans le temps et provoquent des timeouts bloquants pour
les utilisateurs. A l'analyse du code, il sembleraient qu'elles accèdent à
des tables assez volumineuses (certaines ont des dizaines de millions de
lignes) par le biais d'index dont les clés ne sont pas en cause.

Jusqu'il y a très peu, je recréais nocturnement tous les index de ma base
(300 tables de tailles diverses, index clustered pour les clés primaires),
afin de bénéficier de pointeurs frais et de chemins de parcours d'index les
plus courts. Dans la foulée, histoire que tout le monde profite de cette
fraîcheur, je marquais à recompilation toutes les procédures dépendantes de
toutes les tables de ma base.

Constatant que le premier utilisateur matinal de certaines de ces 20 p.s se
prenait timeout sur timeout (le code a été vérifié et même réécrit pour
limiter les gabegies de ressources) avant de décrocher son téléphone pour
m'incendier, en dépit de ce que je pensais être un modèle d'optimisation.
J'ai donc fait appel à un consultant qui m'a conseillé de laisser faire
SQL2000 autant que possible, de désactiver la recréation automatique des
index (via mon plan de maintenance) et de coder un script qui le ferait en
utilisant DBCC et que je ferais tourner en hebdo, voir en bimensuel. Ceci
aurait pour effet d'éviter les recompilations en cascade de chaque procédure
référencée, même si elle ne change pas. Dont acte, ça me paraissaît logique,
sauf qu'une semaine plus tard, c'était toujours (au moins) pareil.

J'ai du mal à comprendre ce qui peut produire ces ralentissements ni le côté
cyclique irrégulier du phénomène. La seule chose que je comprends, c'est que
la base respecte les formes normales, les index ne sont pas faits en dépit du
bon sens, que la machine est une bombe, que l'OS est censé la booster encore
plus, que le code (et particulièrement les jointures) a été vérifié et que
les clients gueulent toujours, chose que je ne peux leur reprocher.

Toute (bonne) idée sera la bienvenue.
Jean-Yves AUGER

7 réponses

Avatar
Med Bouchenafa
Avoir une fenêtre de temps pour récréer les index de sa base est un luxe que
beaucoup d'applications ne peuvent pas se permettrent .
Autant s'estimer heureux donc. Quelques remarques cependant à la lecture de
ton message

a) Ce n'est pas forcément une bonne chose de choisir une clef primaire en
index cluster
Il est vrai que c'est l'option par défaut de SQL Server mais ce n'est pas
une raison pour la suivre à chaque fois

b) Le temps aléatoire d'exécution d'un SP ne peut s'expliquer par le temps
de compilation
Il est fort possible que le plan d'exécution compilé et sauvegardé pour une
procédure ne corresponde pas forcement à un autre jeu de paramètres de cette
même SP

--
Bien cordialement
Med Bouchenafa

"Jean-Yves" a écrit dans le message de
news:
Bonjour,

J'ai un GROS souci sur un lot de procédures stockées, dont les
performances
fluctuent énormément dans le temps et provoquent des timeouts bloquants
pour
les utilisateurs. A l'analyse du code, il sembleraient qu'elles accèdent à
des tables assez volumineuses (certaines ont des dizaines de millions de
lignes) par le biais d'index dont les clés ne sont pas en cause.

Jusqu'il y a très peu, je recréais nocturnement tous les index de ma base
(300 tables de tailles diverses, index clustered pour les clés primaires),
afin de bénéficier de pointeurs frais et de chemins de parcours d'index
les
plus courts. Dans la foulée, histoire que tout le monde profite de cette
fraîcheur, je marquais à recompilation toutes les procédures dépendantes
de
toutes les tables de ma base.

Constatant que le premier utilisateur matinal de certaines de ces 20 p.s
se
prenait timeout sur timeout (le code a été vérifié et même réécrit pour
limiter les gabegies de ressources) avant de décrocher son téléphone pour
m'incendier, en dépit de ce que je pensais être un modèle d'optimisation.
J'ai donc fait appel à un consultant qui m'a conseillé de laisser faire
SQL2000 autant que possible, de désactiver la recréation automatique des
index (via mon plan de maintenance) et de coder un script qui le ferait en
utilisant DBCC et que je ferais tourner en hebdo, voir en bimensuel. Ceci
aurait pour effet d'éviter les recompilations en cascade de chaque
procédure
référencée, même si elle ne change pas. Dont acte, ça me paraissaît
logique,
sauf qu'une semaine plus tard, c'était toujours (au moins) pareil.

J'ai du mal à comprendre ce qui peut produire ces ralentissements ni le
côté
cyclique irrégulier du phénomène. La seule chose que je comprends, c'est
que
la base respecte les formes normales, les index ne sont pas faits en dépit
du
bon sens, que la machine est une bombe, que l'OS est censé la booster
encore
plus, que le code (et particulièrement les jointures) a été vérifié et que
les clients gueulent toujours, chose que je ne peux leur reprocher.

Toute (bonne) idée sera la bienvenue.
Jean-Yves AUGER


Avatar
bruno reiter [MVP]
La recompilation est sans doute une mauvaise idée.

La mise à jour des index la nuit si c'est possible est une bonne idée

rajouter un fillfactor peut etre une bonne idée si les tables sont modifiées
en journée

ajouter un NOLOCK pour les lectures peut etre une bonne idée aussi (ou
passer en read uncommited)

HTH

br

"Jean-Yves" wrote in message
news:
Bonjour,

J'ai un GROS souci sur un lot de procédures stockées, dont les


performances
fluctuent énormément dans le temps et provoquent des timeouts bloquants


pour
les utilisateurs. A l'analyse du code, il sembleraient qu'elles accèdent à
des tables assez volumineuses (certaines ont des dizaines de millions de
lignes) par le biais d'index dont les clés ne sont pas en cause.

Jusqu'il y a très peu, je recréais nocturnement tous les index de ma base
(300 tables de tailles diverses, index clustered pour les clés primaires),
afin de bénéficier de pointeurs frais et de chemins de parcours d'index


les
plus courts. Dans la foulée, histoire que tout le monde profite de cette
fraîcheur, je marquais à recompilation toutes les procédures dépendantes


de
toutes les tables de ma base.

Constatant que le premier utilisateur matinal de certaines de ces 20 p.s


se
prenait timeout sur timeout (le code a été vérifié et même réécrit pour
limiter les gabegies de ressources) avant de décrocher son téléphone pour
m'incendier, en dépit de ce que je pensais être un modèle d'optimisation.
J'ai donc fait appel à un consultant qui m'a conseillé de laisser faire
SQL2000 autant que possible, de désactiver la recréation automatique des
index (via mon plan de maintenance) et de coder un script qui le ferait en
utilisant DBCC et que je ferais tourner en hebdo, voir en bimensuel. Ceci
aurait pour effet d'éviter les recompilations en cascade de chaque


procédure
référencée, même si elle ne change pas. Dont acte, ça me paraissaît


logique,
sauf qu'une semaine plus tard, c'était toujours (au moins) pareil.

J'ai du mal à comprendre ce qui peut produire ces ralentissements ni le


côté
cyclique irrégulier du phénomène. La seule chose que je comprends, c'est


que
la base respecte les formes normales, les index ne sont pas faits en dépit


du
bon sens, que la machine est une bombe, que l'OS est censé la booster


encore
plus, que le code (et particulièrement les jointures) a été vérifié et que
les clients gueulent toujours, chose que je ne peux leur reprocher.

Toute (bonne) idée sera la bienvenue.
Jean-Yves AUGER


Avatar
Fred BROUARD
Med Bouchenafa a écrit:
Avoir une fenêtre de temps pour récréer les index de sa base est un luxe que
beaucoup d'applications ne peuvent pas se permettrent .
Autant s'estimer heureux donc. Quelques remarques cependant à la lecture de
ton message

a) Ce n'est pas forcément une bonne chose de choisir une clef primaire en
index cluster



Je confirme : le cluster n'a d'intérêt que si, lors de l'insertion de la ligne,
la valeur de la clef est toujours supérieure à toutes les valeurs précédentes.
En général un auto incrément ou un DATETIME avec la date/heure courante
satisfait a cette remarque.


Il est vrai que c'est l'option par défaut de SQL Server mais ce n'est pas
une raison pour la suivre à chaque fois

b) Le temps aléatoire d'exécution d'un SP ne peut s'expliquer par le temps
de compilation
Il est fort possible que le plan d'exécution compilé et sauvegardé pour une
procédure ne corresponde pas forcement à un autre jeu de paramètres de cette
même SP




Autre piste : y a t-il beaucoup de colonnes VARCHAR et si oui, ces dernières
sont-elles régulièrement mise à jour ? Sont-elles souvent lues ? Sont-elles des
critères pour certaines requêtes ?

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Jean-Yves
Med & Fred,

Merci tout d'abord d'avoir répondu. J'ai commis un lapsus : il fallait lire
non-clustered pour les clés primaires de mes tables.
Fred, pour ce qui est des colonnes VARCHAR, nous avons pris pour principe
(dûs à certains problèmes dans notre ancien système 6.5) de ne pas mettre de
colonne de ce type dans les clés primaires, à 99% composites. Toutes
contiennent du CHAR ou de l'entier, et surtout pas de valeur NULL.
Med, ma société n'ayant pas de but commercial (recherche), les clients nous
assurent une plage nocturne adéquate pour ce que je pensais être des
optimisations de ce genre. Sauf que ça n'optimise pas lourd...

Les avis des intervenants divergeant me laissent perplexe : je laisse la
recréation nocturne via le plan de maintenance ou je la vire ?

Jean-Yves AUGER

"Med Bouchenafa" a écrit :

Avoir une fenêtre de temps pour récréer les index de sa base est un luxe que
beaucoup d'applications ne peuvent pas se permettrent .
Autant s'estimer heureux donc. Quelques remarques cependant à la lecture de
ton message

a) Ce n'est pas forcément une bonne chose de choisir une clef primaire en
index cluster
Il est vrai que c'est l'option par défaut de SQL Server mais ce n'est pas
une raison pour la suivre à chaque fois

b) Le temps aléatoire d'exécution d'un SP ne peut s'expliquer par le temps
de compilation
Il est fort possible que le plan d'exécution compilé et sauvegardé pour une
procédure ne corresponde pas forcement à un autre jeu de paramètres de cette
même SP

--
Bien cordialement
Med Bouchenafa

"Jean-Yves" a écrit dans le message de
news:
> Bonjour,
>
> J'ai un GROS souci sur un lot de procédures stockées, dont les
> performances
> fluctuent énormément dans le temps et provoquent des timeouts bloquants
> pour
> les utilisateurs. A l'analyse du code, il sembleraient qu'elles accèdent à
> des tables assez volumineuses (certaines ont des dizaines de millions de
> lignes) par le biais d'index dont les clés ne sont pas en cause.
>
> Jusqu'il y a très peu, je recréais nocturnement tous les index de ma base
> (300 tables de tailles diverses, index clustered pour les clés primaires),
> afin de bénéficier de pointeurs frais et de chemins de parcours d'index
> les
> plus courts. Dans la foulée, histoire que tout le monde profite de cette
> fraîcheur, je marquais à recompilation toutes les procédures dépendantes
> de
> toutes les tables de ma base.
>
> Constatant que le premier utilisateur matinal de certaines de ces 20 p.s
> se
> prenait timeout sur timeout (le code a été vérifié et même réécrit pour
> limiter les gabegies de ressources) avant de décrocher son téléphone pour
> m'incendier, en dépit de ce que je pensais être un modèle d'optimisation.
> J'ai donc fait appel à un consultant qui m'a conseillé de laisser faire
> SQL2000 autant que possible, de désactiver la recréation automatique des
> index (via mon plan de maintenance) et de coder un script qui le ferait en
> utilisant DBCC et que je ferais tourner en hebdo, voir en bimensuel. Ceci
> aurait pour effet d'éviter les recompilations en cascade de chaque
> procédure
> référencée, même si elle ne change pas. Dont acte, ça me paraissaît
> logique,
> sauf qu'une semaine plus tard, c'était toujours (au moins) pareil.
>
> J'ai du mal à comprendre ce qui peut produire ces ralentissements ni le
> côté
> cyclique irrégulier du phénomène. La seule chose que je comprends, c'est
> que
> la base respecte les formes normales, les index ne sont pas faits en dépit
> du
> bon sens, que la machine est une bombe, que l'OS est censé la booster
> encore
> plus, que le code (et particulièrement les jointures) a été vérifié et que
> les clients gueulent toujours, chose que je ne peux leur reprocher.
>
> Toute (bonne) idée sera la bienvenue.
> Jean-Yves AUGER





Avatar
Jean-Yves
Merci Bruno,

La recompilation a été désactivée depuis déjà 4 semaines, j'ai un fillfactor
de 90% au niveau de la base elle-même, et ces procédures stockées ont été
"nolockées" intégralement.

J'ai une question : admettons que je ne reconstruise pas un index sur une
table de 10 millions de ligne pendant 2/3 semaines avec des modifications
régulières, même si peu nombreuses en ce moment. Si j'ai bien compris, au
cours du temps, il va se creuser "des trous" dans mon joli maillage
d'enregistrements chaînés. Que se passe-t-il si des modifications dans mes
pages font qu'elles ne tiennent plus dans une page, mais doivent être mise
sur d'autres, etc... ? Mon fillfactor a quelle utilité, si ce n'est permettre
ce genre de manip. Bref, serait-il trop important ?

Jean-Yves AUGER

"bruno reiter [MVP]" a écrit :

La recompilation est sans doute une mauvaise idée.

La mise à jour des index la nuit si c'est possible est une bonne idée

rajouter un fillfactor peut etre une bonne idée si les tables sont modifiées
en journée

ajouter un NOLOCK pour les lectures peut etre une bonne idée aussi (ou
passer en read uncommited)

HTH

br

"Jean-Yves" wrote in message
news:
> Bonjour,
>
> J'ai un GROS souci sur un lot de procédures stockées, dont les
performances
> fluctuent énormément dans le temps et provoquent des timeouts bloquants
pour
> les utilisateurs. A l'analyse du code, il sembleraient qu'elles accèdent à
> des tables assez volumineuses (certaines ont des dizaines de millions de
> lignes) par le biais d'index dont les clés ne sont pas en cause.
>
> Jusqu'il y a très peu, je recréais nocturnement tous les index de ma base
> (300 tables de tailles diverses, index clustered pour les clés primaires),
> afin de bénéficier de pointeurs frais et de chemins de parcours d'index
les
> plus courts. Dans la foulée, histoire que tout le monde profite de cette
> fraîcheur, je marquais à recompilation toutes les procédures dépendantes
de
> toutes les tables de ma base.
>
> Constatant que le premier utilisateur matinal de certaines de ces 20 p.s
se
> prenait timeout sur timeout (le code a été vérifié et même réécrit pour
> limiter les gabegies de ressources) avant de décrocher son téléphone pour
> m'incendier, en dépit de ce que je pensais être un modèle d'optimisation.
> J'ai donc fait appel à un consultant qui m'a conseillé de laisser faire
> SQL2000 autant que possible, de désactiver la recréation automatique des
> index (via mon plan de maintenance) et de coder un script qui le ferait en
> utilisant DBCC et que je ferais tourner en hebdo, voir en bimensuel. Ceci
> aurait pour effet d'éviter les recompilations en cascade de chaque
procédure
> référencée, même si elle ne change pas. Dont acte, ça me paraissaît
logique,
> sauf qu'une semaine plus tard, c'était toujours (au moins) pareil.
>
> J'ai du mal à comprendre ce qui peut produire ces ralentissements ni le
côté
> cyclique irrégulier du phénomène. La seule chose que je comprends, c'est
que
> la base respecte les formes normales, les index ne sont pas faits en dépit
du
> bon sens, que la machine est une bombe, que l'OS est censé la booster
encore
> plus, que le code (et particulièrement les jointures) a été vérifié et que
> les clients gueulent toujours, chose que je ne peux leur reprocher.
>
> Toute (bonne) idée sera la bienvenue.
> Jean-Yves AUGER





Avatar
bruno reiter [MVP]
Un fillfactor à 90 laisse 10% d'espace dispo à la reconstruction des index.

Quand il n'y a plus d'espace la page de données est divisée (split) et la
moitié est copiée sur une autre page, cette opération est couteuse et génère
de la fragmentation et des vides dans les pages de données couteux pour les
lectures.

Le fillfactor évite les splits ... pendant un certain temps et fonction des
opérations faites sur l'index (si on ne faite que de l'insert en
autoincrément, pas besoin de fillfactor sur l'index cluster)

On voit tout ça avec DBCC SHOWCONTIG

HTH

br


"Jean-Yves" wrote in message
news:
Merci Bruno,

La recompilation a été désactivée depuis déjà 4 semaines, j'ai un


fillfactor
de 90% au niveau de la base elle-même, et ces procédures stockées ont été
"nolockées" intégralement.

J'ai une question : admettons que je ne reconstruise pas un index sur une
table de 10 millions de ligne pendant 2/3 semaines avec des modifications
régulières, même si peu nombreuses en ce moment. Si j'ai bien compris, au
cours du temps, il va se creuser "des trous" dans mon joli maillage
d'enregistrements chaînés. Que se passe-t-il si des modifications dans mes
pages font qu'elles ne tiennent plus dans une page, mais doivent être mise
sur d'autres, etc... ? Mon fillfactor a quelle utilité, si ce n'est


permettre
ce genre de manip. Bref, serait-il trop important ?

Jean-Yves AUGER

"bruno reiter [MVP]" a écrit :

> La recompilation est sans doute une mauvaise idée.
>
> La mise à jour des index la nuit si c'est possible est une bonne idée
>
> rajouter un fillfactor peut etre une bonne idée si les tables sont


modifiées
> en journée
>
> ajouter un NOLOCK pour les lectures peut etre une bonne idée aussi (ou
> passer en read uncommited)
>
> HTH
>
> br
>
> "Jean-Yves" wrote in message
> news:
> > Bonjour,
> >
> > J'ai un GROS souci sur un lot de procédures stockées, dont les
> performances
> > fluctuent énormément dans le temps et provoquent des timeouts


bloquants
> pour
> > les utilisateurs. A l'analyse du code, il sembleraient qu'elles


accèdent à
> > des tables assez volumineuses (certaines ont des dizaines de millions


de
> > lignes) par le biais d'index dont les clés ne sont pas en cause.
> >
> > Jusqu'il y a très peu, je recréais nocturnement tous les index de ma


base
> > (300 tables de tailles diverses, index clustered pour les clés


primaires),
> > afin de bénéficier de pointeurs frais et de chemins de parcours


d'index
> les
> > plus courts. Dans la foulée, histoire que tout le monde profite de


cette
> > fraîcheur, je marquais à recompilation toutes les procédures


dépendantes
> de
> > toutes les tables de ma base.
> >
> > Constatant que le premier utilisateur matinal de certaines de ces 20


p.s
> se
> > prenait timeout sur timeout (le code a été vérifié et même réécrit


pour
> > limiter les gabegies de ressources) avant de décrocher son téléphone


pour
> > m'incendier, en dépit de ce que je pensais être un modèle


d'optimisation.
> > J'ai donc fait appel à un consultant qui m'a conseillé de laisser


faire
> > SQL2000 autant que possible, de désactiver la recréation automatique


des
> > index (via mon plan de maintenance) et de coder un script qui le


ferait en
> > utilisant DBCC et que je ferais tourner en hebdo, voir en bimensuel.


Ceci
> > aurait pour effet d'éviter les recompilations en cascade de chaque
> procédure
> > référencée, même si elle ne change pas. Dont acte, ça me paraissaît
> logique,
> > sauf qu'une semaine plus tard, c'était toujours (au moins) pareil.
> >
> > J'ai du mal à comprendre ce qui peut produire ces ralentissements ni


le
> côté
> > cyclique irrégulier du phénomène. La seule chose que je comprends,


c'est
> que
> > la base respecte les formes normales, les index ne sont pas faits en


dépit
> du
> > bon sens, que la machine est une bombe, que l'OS est censé la booster
> encore
> > plus, que le code (et particulièrement les jointures) a été vérifié et


que
> > les clients gueulent toujours, chose que je ne peux leur reprocher.
> >
> > Toute (bonne) idée sera la bienvenue.
> > Jean-Yves AUGER
>
>
>


Avatar
Med Bouchenafa
>>je laisse la recréation nocturne via le plan de maintenance ou je la vire
?





Il n'y a aucune raison de la virer.
D'une manière générale, le temps de recompilation d'une procédure stockée
n'est pas grand chose devant le temps d'exécution.
Faudrait investiguer plus pourquoi les premiers utilisateurs matinaux se
retrouvent avec des timeout.
Cela me semble peu probable que la recompilation soit l'unique cause.

--
Bien cordialement
Med Bouchenafa



"Jean-Yves" a écrit dans le message de
news:
Med & Fred,

Merci tout d'abord d'avoir répondu. J'ai commis un lapsus : il fallait
lire
non-clustered pour les clés primaires de mes tables.
Fred, pour ce qui est des colonnes VARCHAR, nous avons pris pour principe
(dûs à certains problèmes dans notre ancien système 6.5) de ne pas mettre
de
colonne de ce type dans les clés primaires, à 99% composites. Toutes
contiennent du CHAR ou de l'entier, et surtout pas de valeur NULL.
Med, ma société n'ayant pas de but commercial (recherche), les clients
nous
assurent une plage nocturne adéquate pour ce que je pensais être des
optimisations de ce genre. Sauf que ça n'optimise pas lourd...

Les avis des intervenants divergeant me laissent perplexe : je laisse la
recréation nocturne via le plan de maintenance ou je la vire ?

Jean-Yves AUGER

"Med Bouchenafa" a écrit :

Avoir une fenêtre de temps pour récréer les index de sa base est un luxe
que
beaucoup d'applications ne peuvent pas se permettrent .
Autant s'estimer heureux donc. Quelques remarques cependant à la lecture
de
ton message

a) Ce n'est pas forcément une bonne chose de choisir une clef primaire en
index cluster
Il est vrai que c'est l'option par défaut de SQL Server mais ce n'est pas
une raison pour la suivre à chaque fois

b) Le temps aléatoire d'exécution d'un SP ne peut s'expliquer par le
temps
de compilation
Il est fort possible que le plan d'exécution compilé et sauvegardé pour
une
procédure ne corresponde pas forcement à un autre jeu de paramètres de
cette
même SP

--
Bien cordialement
Med Bouchenafa

"Jean-Yves" a écrit dans le message
de
news:
> Bonjour,
>
> J'ai un GROS souci sur un lot de procédures stockées, dont les
> performances
> fluctuent énormément dans le temps et provoquent des timeouts bloquants
> pour
> les utilisateurs. A l'analyse du code, il sembleraient qu'elles
> accèdent à
> des tables assez volumineuses (certaines ont des dizaines de millions
> de
> lignes) par le biais d'index dont les clés ne sont pas en cause.
>
> Jusqu'il y a très peu, je recréais nocturnement tous les index de ma
> base
> (300 tables de tailles diverses, index clustered pour les clés
> primaires),
> afin de bénéficier de pointeurs frais et de chemins de parcours d'index
> les
> plus courts. Dans la foulée, histoire que tout le monde profite de
> cette
> fraîcheur, je marquais à recompilation toutes les procédures
> dépendantes
> de
> toutes les tables de ma base.
>
> Constatant que le premier utilisateur matinal de certaines de ces 20
> p.s
> se
> prenait timeout sur timeout (le code a été vérifié et même réécrit pour
> limiter les gabegies de ressources) avant de décrocher son téléphone
> pour
> m'incendier, en dépit de ce que je pensais être un modèle
> d'optimisation.
> J'ai donc fait appel à un consultant qui m'a conseillé de laisser faire
> SQL2000 autant que possible, de désactiver la recréation automatique
> des
> index (via mon plan de maintenance) et de coder un script qui le ferait
> en
> utilisant DBCC et que je ferais tourner en hebdo, voir en bimensuel.
> Ceci
> aurait pour effet d'éviter les recompilations en cascade de chaque
> procédure
> référencée, même si elle ne change pas. Dont acte, ça me paraissaît
> logique,
> sauf qu'une semaine plus tard, c'était toujours (au moins) pareil.
>
> J'ai du mal à comprendre ce qui peut produire ces ralentissements ni le
> côté
> cyclique irrégulier du phénomène. La seule chose que je comprends,
> c'est
> que
> la base respecte les formes normales, les index ne sont pas faits en
> dépit
> du
> bon sens, que la machine est une bombe, que l'OS est censé la booster
> encore
> plus, que le code (et particulièrement les jointures) a été vérifié et
> que
> les clients gueulent toujours, chose que je ne peux leur reprocher.
>
> Toute (bonne) idée sera la bienvenue.
> Jean-Yves AUGER