|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() M H Inscription : octobre 2010 Messages : 45 ![]() |
Bonjour à tous,
Dans le cadre de l'optimisation de ma base de données où une de mes applications requiert la récupération de plusieurs dizaines de milliers de lignes, je souhaiterai modifier la valeur de ARRAYSIZE. Je sais que l'on peut le modifier via: Toutefois, je voudrais modifier cette valeur de façon définitive et non au cours d'une session. Par défaut, elle vaut 15, mais je voudrais qu'elle soit positionnée définitivement à 500. Est-il possible de réaliser une telle chose? Merci d'avance! |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
|
|
|
00
|
|
|
#3 | |
![]() Inscription : décembre 2002 Messages : 2 385 ![]() |
Citation:
Les quelques fois où j'ai voulu suivre cette piste, ça n'a jamais été très concluant.
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
|
00
|
|
|
#4 | |||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Citation:
Code :
AskTom [/EDIT] |
|||
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Par contre SET ARRAYSIZE c'est pour sqlplus donc, à moins que l'application n'utilise sqlplus, il faut regarder dans la doc du driver utilisé.
|
|
|
00
|
|
|
#6 |
![]() Inscription : décembre 2002 Messages : 2 385 ![]() |
Petit marrant ! Ca sert à quoi de tester avec 1 quand la valeur par défaut est 15 ??
Ma question ne porte pas sur le moyen de tester, mais sur les résultats réels. Mon expérience est que 15 est une valeur assez bien adaptée, et que son augmentation n'apporte guère d'amélioration. Vos résultats de la vraie vie m'intéressent.
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
01
|
|
|
#7 |
![]() Inscription : décembre 2002 Messages : 2 385 ![]() |
Tiens d'ailleurs, sans vouloir faire mon Burleson, faire ce genre de test avec un SET AUTOTRACE TRACE, ce qui semble simple et élégant, n'est pas réaliste quant à l'amélioration concrète qu'on peut tirer de la manoeuvre.
En effet, quand on ramène sur le client des centaines de milliers de lignes, voire des millions, soit on va les afficher, soit, plus probablement, on va les stocker sur disque. Affichage ou stockage, ceci prend un temps loin d'être négligeable. Donc au mieux, le SET AUTOTRACE TRACE indiquera le gain théorique possible si on travaillait uniquement en mémoire. Sur des tests réels (avec stockage des résultats), je ne gagne pas mieux que 20% en passant ARRAYSIZE de 15 à 100. Bien entendu, ça dépendra du matériel.
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
01
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Cher @Pom
1 (cas limite) c’est moins bien que 15 qui est moins bien que 100. 20% c’est 20% plus vite quand même. Il n’est pas possible de gagner au niveau de traitement des données ramenées avec arraysize. Si t’écrit tes données sur disque comment arraysize pourrait t’aider ? Donc, le test rapide montre ce que tu peux gagner au niveau de la lecture des données et non pas au niveau du traitement global. |
|
|
00
|
|
|
#9 |
![]() Inscription : décembre 2002 Messages : 2 385 ![]() |
Demande à un informaticien
Si je gagne 20% sur le temps constaté au niveau client, grâce à l'augmentation d'ARRAYSIZE (tout en continuant à stocker mes données), ça veut peut-être dire que les données n'étaient pas transmises assez vite au client initialement, et que maintenant, c'est la vitesse de stockage du disque qui est devenue le facteur limitant. Ce n'est pas à toi que je vais apprendre que ce qui compte, ce sont les performances réelles à l'extrémité de la chaîne, du côté du client. Si ces performances sont insuffisantes, ça peut provenir de ralentissements à divers niveaux, qu'il faut identifier et quantifier, au lieu de donner des coups de tournevis anarchiques à ARRAYSIZE en faisant des incantations (et des démonstrations de mauvaise foi, hein camarade !)
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
00
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Arraysize pour sqlplus c’est le même principe d’array processing qui est présent dans Pro*c, Pl/Sql (bulk fetch), Java, Vb, etc.
Je ne vois pas dans quoi ma démonstration est de mauvaise foi |
|
|
00
|
|
|
#11 |
![]() ![]() |
Si je peux me permettre, ce que dit Pomalaix c'est que la valeur par défaut étant positionnée à 15, faire une comparaison entre 1 et 15 est inutile puisque le sujet concerne l'augmentation du paramètre, donc autant faire la comparaison entre 15 et 500.
Supposer que passer de 1 à 15 équivaut à passer de 15 à 500 est une sacrée extrapolation : comme chacun sait les performances ne sont jamais linéaires.
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#12 | |
![]() Inscription : décembre 2002 Messages : 2 385 ![]() |
Citation:
Je veux bien que tu trouves tous les arguments pour défendre ton avis (d'ailleurs le comble, c'est qu'on n'est même pas en désaccord sur ce qu'on "mesure" avec le SET AUTOTRACE TRACE), mais évite au moins que ces arguments soient grossièrement contradictoires. Tiens, pour faire réellement avancer le schmilblick, pourquoi ARRAYSIZE n'est-il pas directement à sa valeur maximum sous SQL*Plus ?
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
|
00
|
|
|
#13 | ||||||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Comme cette discussion dégénère un peu il serait sage que chacun garde les sous-entendues pour soi.
Peut être que j'ai été un peu superficielle dans mes interventions, j'avais pensé que les choses sont «*évidentes*» surtout après avoir ajouté le link sur la discussion du site AskTom. Mon test est un test qualitatif pour dire la valeur d'arraysize a un impact et non pas quantitatif, c'est pour ça que je ne vois pas de problème pour comparer 1 avec 15. A partir de ce test quelqu'un pourrait comparer 15 avec 100, 1000 ou bien 5000. Le fait même qu'il existe un valeur limite implique que les gains ne seront pas linéaires. De plus comme je l'ai déjà dit augmenter arraysize c'est la même technique qu'utiliser bulk fetch dans PL/SQL, utiliser les host array en Pro*C, etc. Pour quoi ça marchera en PL, Pro*C et non pas en sqlplus ? Oui il est possible d'optimiser avec arraysize. Pour comprendre pourquoi je vous propose le test suivant. D'abord je vais créer une table et chauffer un peu le système Code :
Code :
1) Citation:
2) Citation:
PS. @Pom Dans ce que tu considère comme une contradiction j'ai essayé de faire tout simplement la différence entre la lecture des données ou arraysize compte et ce qu'on fait ensuite avec ces données, pour exemples les écrire dans un fichier, ou arraysize ne peut pas intervenir. |
||||||
|
|
10
|
|
|
#14 |
![]() Inscription : décembre 2002 Messages : 2 385 ![]() |
Pour commencer, je te rassure, rien ne dégénère, on discute juste
.Par contre visiblement, on ne se comprend pas. Pourtant les choses sont simples. Quand une application a des performances insuffisantes, augmenter ARRAYSIZE ne peut être efficace que si l'application traite les données plus vite qu'elle ne les reçoit du serveur. (Et il faut bien sûr que le serveur soit capable de les extraire assez vite, pour en envoyer davantage d'un coup). Sinon cette piste ne peut apporter aucune amélioration. Traiter, c'est très général. Ca peut vouloir dire stocker aussi. Si mon stockage est plus rapide que l'envoi des données, alors mon traitement peut bénéficier d'une augmentation de l'ARRAYSIZE. Comme j'aime bien dire, un marteau c'est bien, mais pas pour couper du saucisson. Avant de sortir ARRAYSIZE de sa poche, il faut juste s'assurer d'être face à un clou.
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
10
|
|
|
#15 | |||
|
Membre expérimenté
![]() François Inscription : février 2010 Messages : 305 ![]() |
Citation:
Code :
Une remarque quand meme, avoir un petit arraysize oblige a augmenter le nombre de LIO (Cf examples de mnitu). Si le serveur est deja a la peine a cause de ca, ce n'est pas forcement l'aider que de mettre un arraysize tout petit. Mais ca peut quand meme etre pratique d'augmenter le arraysize. Ca peut eventuellement pernettre de reduire le nombre de LIO cote serveurs, et le nombre de SQL*NET round trips. |
|||
|
|
10
|
|
|
#16 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Bah, je pense que tout le monde (mnitu et pom entre autres) est d'accord que :
- Parfois arraysize peut aider - Parfois arraysize n'aide pas plus que ça Pom, je sais que ça n'aide pas beaucoup vu que ça ne s'appuie sur rien, mais dans une de mes missions, on réalisait un tas d'export par SQL*Plus, par fois sur des requêtes très simples (d'ailleurs on ressent plus la différence dans ces cas), et dans ces cas l'augmentation du arraysize nous à bien aidé
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
|
00
|
|
|
#17 |
|
Futur Membre du Club
![]() M H Inscription : octobre 2010 Messages : 45 ![]() |
Bonjour à tous,
Je vois que cette question suscite beaucoup d'intérêt de votre part Dans tous les cas, je n'ai pas ressenti d'amélioration de performances sur mes requêtes ou incrémentant ou en décrémentant cette valeur. Ma question était plus d'un ordre de culture générale, au cas je tomberais sur un cas où ARRAYSIZE pourrait m'aider. Ce qui n'est pas le cas ici malheureusement. Merci en tout cas pour vos réponses, ça m'a un peu plus éclairé sur l'intérêt de cette variable |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com