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

SQL Oracle Discussion :

ARRAYSIZE: modification définitive de la valeur


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 54
    Points : 56
    Points
    56
    Par défaut ARRAYSIZE: modification définitive de la valeur
    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!

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par thisistheend Voir le message
    . Par défaut, elle vaut 15, mais je voudrais qu'elle soit positionnée définitivement à 500.
    Ca serait intéressant que vous nous fassiez part de l'amélioration (chiffrée) des temps de traitement suite à ce changement.
    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 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par Pomalaix Voir le message
    Ca serait intéressant que vous nous fassiez part de l'amélioration (chiffrée) des temps de traitement suite à ce changement.
    Les quelques fois où j'ai voulu suivre cette piste, ça n'a jamais été très concluant.
    Cela est très simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    SQL> r
      1* select * from all_objects
     
    25119 ligne(s) sélectionnée(s).
     
    Ecoulé : 00 :00 :01.15
     
    Statistiques
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
         120029  consistent gets
              0  physical reads
              0  redo size
        1494238  bytes sent via SQL*Net to client
          18906  bytes received via SQL*Net from client
           1676  SQL*Net roundtrips to/from client
            621  sorts (memory)
              0  sorts (disk)
          25119  rows processed
     
    SQL> set arraysize 1
    SQL> r
      1* select * from all_objects
     
    25119 ligne(s) sélectionnée(s).
     
    Ecoulé : 00 :00 :02.14
     
    Statistiques
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
         132748  consistent gets
              0  physical reads
              0  redo size
        3486146  bytes sent via SQL*Net to client
         138641  bytes received via SQL*Net from client
          12561  SQL*Net roundtrips to/from client
            621  sorts (memory)
              0  sorts (disk)
          25119  rows processed
    [EDIT]
    AskTom
    [/EDIT]

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    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é.

  6. #6
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par mnitu Voir le message

    SQL> set arraysize 1
    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 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  7. #7
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    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 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  8. #8
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    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.

  9. #9
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Si t’écrit tes données sur disque comment arraysize pourrait t’aider ?
    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 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  10. #10
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    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 .

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    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.

  12. #12
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par mnitu Voir le message
    ...
    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 ?
    • D'une part tu dis que ces 20% d'amélioration, ce n'est pas négligeable (sous-entendu "tu vois que ça marche ARRAYSIZE"),


    • d'autre part juste en dessous tu prétends qu'aucune amélioration n'est possible sur le temps de traitement par le simple effet d'ARRAYSIZE, notamment si le traitement commence par du stockage (sous-entendu "ça ne peut pas marcher dans ton cas, abruti")

    Si on fait la synthèse, ces 20% sont magnifiques, mais impossibles !

    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 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  13. #13
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    mni@DIANA> create table t as
      2  select object_id, object_name from all_objects
      3  /
     
    Table crÚÚe.
     
    mni@DIANA> set autotrace traceonly statistics
    mni@DIANA> select * from t;
     
    71489 ligne(s) sÚlectionnÚe(s).
    Ensuite on exécute le script du test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    ConnectÚ Ó :
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
     
    mni@DIANA> set autotrace traceonly statistics
    mni@DIANA> set arraysize 15
    mni@DIANA> set timi on
    mni@DIANA> alter session set sql_trace=true
      2  /
     
    Session modifiÚe.
     
    EcoulÚ : 00 :00 :00.01
    mni@DIANA> select * from t
      2  /
     
    71489 ligne(s) sÚlectionnÚe(s).
     
    EcoulÚ : 00 :00 :00.67
     
    Statistiques
    ----------------------------------------------------------
              5  recursive calls
              0  db block gets
           5152  consistent gets
              0  physical reads
              0  redo size
        2784592  bytes sent via SQL*Net to client
          52830  bytes received via SQL*Net from client
           4767  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
          71489  rows processed
     
    mni@DIANA> set arraysize 100
    mni@DIANA> select * from t cherche_moi
      2  /
     
    71489 ligne(s) sÚlectionnÚe(s).
     
    EcoulÚ : 00 :00 :00.23
     
    Statistiques
    ----------------------------------------------------------
              5  recursive calls
              0  db block gets
           1119  consistent gets
              0  physical reads
              0  redo size
        2258302  bytes sent via SQL*Net to client
           8269  bytes received via SQL*Net from client
            716  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
          71489  rows processed
     
    mni@DIANA> alter session set sql_trace = false
      2  /
     
    Session modifiÚe.
     
    EcoulÚ : 00 :00 :00.00
    Regardons aussi le fichier de trace. On peut noter deux modèles différentes d'appels Oracle dans ce fichier
    1)

    FETCH #4:c=0,e=18,p=0,cr=1,cu=0,mis=0,r=15,dep=0,og=1,plh=1601196873,tim=3784878805
    FETCH #4:c=0,e=18,p=0,cr=1,cu=0,mis=0,r=15,dep=0,og=1,plh=1601196873,tim=3784878928
    FETCH #4:c=0,e=18,p=0,cr=1,cu=0,mis=0,r=15,dep=0,og=1,plh=1601196873,tim=3784879060
    FETCH #4:c=0,e=18,p=0,cr=1,cu=0,mis=0,r=15,dep=0,og=1,plh=1601196873,tim=3784879269
    FETCH #4:c=0,e=18,p=0,cr=1,cu=0,mis=0,r=15,dep=0,og=1,plh=1601196873,tim=3784879396
    FETCH #4:c=0,e=19,p=0,cr=1,cu=0,mis=0,r=15,dep=0,og=1,plh=1601196873,tim=3784879517
    FETCH #4:c=0,e=18,p=0,cr=1,cu=0,mis=0,r=15,dep=0,og=1,plh=1601196873,tim=3784879637
    FETCH #4:c=0,e=21,p=0,cr=1,cu=0,mis=0,r=15,dep=0,og=1,plh=1601196873,tim=3784879761
    Notez les valeurs pour e (elapsed), cr (consistent reads) et surtout r (rows): 15

    2)

    FETCH #4:c=0,e=55,p=0,cr=2,cu=0,mis=0,r=100,dep=0,og=1,plh=1601196873,tim=3785597434
    FETCH #4:c=0,e=56,p=0,cr=1,cu=0,mis=0,r=100,dep=0,og=1,plh=1601196873,tim=3785597719
    FETCH #4:c=0,e=58,p=0,cr=2,cu=0,mis=0,r=100,dep=0,og=1,plh=1601196873,tim=3785598004
    FETCH #4:c=0,e=55,p=0,cr=1,cu=0,mis=0,r=100,dep=0,og=1,plh=1601196873,tim=3785598288
    FETCH #4:c=0,e=53,p=0,cr=1,cu=0,mis=0,r=100,dep=0,og=1,plh=1601196873,tim=3785598568
    FETCH #4:c=0,e=58,p=0,cr=2,cu=0,mis=0,r=100,dep=0,og=1,plh=1601196873,tim=3785598862
    FETCH #4:c=0,e=55,p=0,cr=1,cu=0,mis=0,r=100,dep=0,og=1,plh=1601196873,tim=3785599145
    FETCH #4:c=0,e=55,p=0,cr=1,cu=0,mis=0,r=100,dep=0,og=1,plh=1601196873,tim=3785599429
    FETCH #4:c=0,e=58,p=0,cr=2,cu=0,mis=0,r=100,dep=0,og=1,plh=1601196873,tim=3785599718
    FETCH #4:c=0,e=52,p=0,cr=1,cu=0,mis=0,r=100,dep=0,og=1,plh=1601196873,tim=3785600012
    ...
    Dans le premier cas il faut environ 4766 (71489/15) appels Oracles (FETCH ) pour lire les données. Comparez ça avec 715 appels dans le deuxième cas. Notez les valeurs pour e (18, 18, …) et comparez avec (55, 56, …) dans le deuxième cas et vous avez la tendance: chaque appel lis plus des données (100 par rapport au 15) en visitant parfois 2 blocs des données par rapport à 1 mais, pour des valeurs elapsed plus grandes.

    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.

  14. #14
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Oui il est possible d'optimiser avec arraysize.
    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 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Points : 807
    Points
    807
    Par défaut
    Citation Envoyé par Pomalaix Voir le message
    Tiens, pour faire réellement avancer le schmilblick, pourquoi ARRAYSIZE n'est-il pas directement à sa valeur maximum sous SQL*Plus ?
    Parce que ce n'est pas forcement malin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
    create package tmp_pkg is
       type t_num is table of date;
       function my_func return t_num pipelined;
    end tmp_pkg;
    /
    show errors
     
    create package body tmp_pkg is
       function my_func return t_num pipelined is
          answer number default 42;
       begin
          for i in 1..20 loop
             dbms_lock.sleep(1);
             pipe row(current_timestamp);
          end loop;
       end;
     
    end tmp_pkg;
    /
    show errors
    set arraysize 2
    select * from table(tmp_pkg.my_func);
     
    set arraysize 15
    select * from table(tmp_pkg.my_func);
     
    drop package tmp_pkg;
    La si je peux traiter les résultats un par un, je vais pas m'amuser a mettre un arraysize de 500. Sinon mon appli perdrait du temps a rien faire avant d'avoir les resultats de la BdD.

    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.

  16. #16
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    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/

  17. #17
    Membre du Club
    Inscrit en
    Octobre 2010
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 54
    Points : 56
    Points
    56
    Par défaut
    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 .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/10/2007, 11h03
  2. [Tableaux] Définition de la valeur par défaut
    Par ciel65 dans le forum Langage
    Réponses: 1
    Dernier message: 24/12/2006, 19h01
  3. Récupérer la modification dynamique d'une valeur d'un champ
    Par romaintaz dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/11/2006, 14h09
  4. Historiser des modifications et les anciennes valeurs
    Par el_quincho dans le forum Access
    Réponses: 4
    Dernier message: 29/05/2006, 16h49

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