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 :

Spool lent en AL32UTF8 comparé à WE8ISO8859P15


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2005
    Messages : 197
    Par défaut Spool lent en AL32UTF8 comparé à WE8ISO8859P15
    Bonjour,

    Je rencontre un problème étrange, lorsque je spool le résultat d'un requête en AL32UTF8, cela prend 31 secondes. Lorsque je spool en WE8ISO8859P15, cela prend 2 secondes. Le character set de la base de données est UTF8.

    Voici un exemple:

    Code sql : 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
     
    1. création de la table
    CREATE TABLE source_data
     ( x, y, z
     , CONSTRAINT source_data_pk
          PRIMARY KEY (x,y,z)
     )
     AS
        SELECT ROWNUM           AS x
        ,      RPAD('x',50,'x') AS y
        ,      RPAD('y',50,'y') AS z
        FROM   dual
        CONNECT BY ROWNUM <= 100000;
     
    2. query.sql
     
    set pages 0
    set heading off
    set feed off
    set pause off
    set termout off
    set linesize 32767
    set longc 6000000
    set long 6000000
    set trimout on
    set trimspool on
    set timing on
    spool test.log;
    select * from source_data;
    exit;

    le test en lui même:
    1. export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    sqlplus
    @query.sql
    31 secondes elapsed

    2.export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15
    sqlplus
    @query.sql
    2 secondes elapsed....

    La majorité du temps est passé en "SQL*Net message from client". Est ce que c'est à cause d'UTF8? Qu'est ce qui fait que l'on passe de 2 à 31 secondes pour la même requête?
    Si vous avez une idée du pourquoi du comment je suis preneur.

    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Obtiens-tu les mêmes durées en inversant l'ordre d'exécution des commandes ? (WE8ISO8859P15 avant AL32UTF8)
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2005
    Messages : 197
    Par défaut
    oui, on peut le faire dans le sens que l'on veux, c'est toujours le même résultat. J'ai refait un test et sans le spool c'est aussi long. Donc ce n'est pas ça le problème.

    Autre test, en modifiant la linesize à 5000, je descends à 5.15s vs 0.57. C'est plus rapide mais ca reste quand même une sacré différence... La seule explication que je peux avoir c'est que UTF8 est multibyte et que donc ca prend plus de temps à traiter...

  4. #4
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Ne mélange pas tes tests : le character set d'un côté puis, une fois OK, le linesize mais si tu fais varier deux paramètres, le résultat sera trop dur à interpréter.

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 176
    Par défaut
    Bonjour,

    Quelle est la version de la base de données?

  6. #6
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Mais, hé, dans le premier SELECT, les données sont certainement sur le disque dur suite à la création de la table alors que pour le deuxième je pense qu'ils sont en mémoire, d'où les temps de réponse très différents.
    Peux-tu faire la chose suivante, si tu es sur une base non de prod et que cela ne gêne personne: tu vides le buffer cache pour remettre tous les blocs sur disque dur puis tu relances le .sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Linux> export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    Linux> sqlplus user/password
    sqlplus> set timing on
    sqlplus> alter system flush buffer_cache;
    sqlplus> @query.sql;
    Puis, test 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Linux> export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15
    Linux> sqlplus user/password
    sqlplus> set timing on
    sqlplus> alter system flush buffer_cache;
    sqlplus> @query.sql;
    Quels sont les temps obtenus?

Discussions similaires

  1. SQL Server très lent comparé à Mysql
    Par berceker united dans le forum Installation
    Réponses: 14
    Dernier message: 14/12/2006, 20h53
  2. SQL Server très lent comparé à Mysql ?
    Par berceker united dans le forum Décisions SGBD
    Réponses: 9
    Dernier message: 17/06/2006, 11h08
  3. changer CHARACTERSET (AL32UTF8 => WE8ISO8859P15)
    Par exempleinfo dans le forum Oracle
    Réponses: 2
    Dernier message: 02/03/2006, 12h47
  4. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37

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