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

Sybase Discussion :

[ASE][T-SQL] Requete qui n'aboutit pas


Sujet :

Sybase

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 43
    Points : 30
    Points
    30
    Par défaut [ASE][T-SQL] Requete qui n'aboutit pas
    Un update de 20 604 lignes depuis une table de travail comportant le même nombre de lignes n'aboutit pas !...
    Merci de votre aide

    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
    select INDCLI_ID, INDCLI_PRENOM_NOM, INDCLI_ADRESSE1,  INDCLI_CODE_POSTAL
    into #WA_AF
    from WA_INDIVIDU_CLIENT
    where  INDCLI_PRENOM_NOM = 'AIR FRANCE HOST'
    -- 20 604  lignes en 2s / 99% de tempdb disponible
     
     create clustered index idx_dedoub on #WA_AF(INDCLI_ADRESSE1,  INDCLI_CODE_POSTAL, INDCLI_PRENOM_NOM, INDCLI_ID)
    -- 1s / 99% de tempdb disponible
     
     UPDATE
         WA_INDIVIDU_CLIENT
    SET
        INDCLI_FLAG =  1
    WHERE
        INDCLI_FLAG = 0
        AND  INDCLI_CLI_AH_ID = 0
        AND INDCLI_PRENOM_NOM = 'AIR FRANCE  HOST'
        AND exists (select INDCLI_ID from #WA_AF  T2
                             WHERE  
                                 WA_INDIVIDU_CLIENT.INDCLI_PRENOM_NOM =  T2.INDCLI_PRENOM_NOM
                                 AND WA_INDIVIDU_CLIENT.INDCLI_ADRESSE1 =  T2.INDCLI_ADRESSE1
                                 AND WA_INDIVIDU_CLIENT.INDCLI_CODE_POSTAL =  T2.INDCLI_CODE_POSTAL
                                 AND isnull(T2.INDCLI_PRENOM_NOM,' ') <> '  '
                                 AND isnull(T2.INDCLI_ADRESSE1,' ') <> '  '
                                 AND isnull(T2.INDCLI_CODE_POSTAL,' ') <> '  '
                                 AND (WA_INDIVIDU_CLIENT.INDCLI_CLI_AH_ID =  0
                                     or WA_INDIVIDU_CLIENT.INDCLI_CLI_AH_ID > T2.INDCLI_ID)  
                                 AND WA_INDIVIDU_CLIENT.INDCLI_ID <>  T2.INDCLI_ID
                    )
    -- 20 604 lignes en 12s
     
     update
         WA_INDIVIDU_CLIENT
    set
        INDCLI_CLI_AH_ID = (select  min(T2.INDCLI_ID) from #WA_AF  T2
                             WHERE  
                                 WA_INDIVIDU_CLIENT.INDCLI_PRENOM_NOM =  T2.INDCLI_PRENOM_NOM
                                 AND WA_INDIVIDU_CLIENT.INDCLI_ADRESSE1 =  T2.INDCLI_ADRESSE1
                                 AND WA_INDIVIDU_CLIENT.INDCLI_CODE_POSTAL =  T2.INDCLI_CODE_POSTAL
                                 AND WA_INDIVIDU_CLIENT.INDCLI_ID <> T2.INDCLI_ID),
         INDCLI_CRITERE = 1
    where
        INDCLI_FLAG =  1
        and INDCLI_CLI_AH_ID = 0
        and  INDCLI_PRENOM_NOM = 'AIR FRANCE HOST'
    -- la  requête n'aboutit pas (aucun IO physique ...)

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Qu'en est-il du plan d'exécution (showplan) ? Et des verrous (sp_lock) ? Et du statut de la connexion (sp_who)? Ne voyez-vous effectivement rien bouger ?
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 43
    Points : 30
    Points
    30
    Par défaut
    Pas de verrou, et un sp_who normal.
    En fait, les IO augmentent à environ 10.000 pendant la 1ère minute puis s'arrêtent !
    Je récupère le showplan...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 43
    Points : 30
    Points
    30
    Par défaut
    Le plan d'exécution :
    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
     
    QUERY PLAN FOR STATEMENT 1 (at line 1). 
     
        STEP 1 
            The type of query is UPDATE. 
            The update mode is direct. 
     
     
            FROM TABLE 
                WA_INDIVIDU_CLIENT 
            Nested iteration. 
            Table Scan. 
            Forward scan. 
            Positioning at start of table. 
     
     
            Run subquery 1 (at nesting level 1). 
            Using I/O Size 16 Kbytes for data pages. 
            With MRU Buffer Replacement Strategy for data pages. 
            TO TABLE 
                WA_INDIVIDU_CLIENT 
            Using I/O Size 2 Kbytes for data pages. 
        STEP 1 
     
     
    NESTING LEVEL 1 SUBQUERIES FOR STATEMENT 1. 
     
     
      QUERY PLAN FOR SUBQUERY 1 (at nesting level 1 and at line 4). 
     
     
        Correlated Subquery. 
        Subquery under an EXPRESSION predicate. 
     
     
     
     
        STEP 1 
            The type of query is SELECT. 
            Evaluate Ungrouped MINIMUM AGGREGATE. 
     
     
            FROM TABLE 
                #WA_AF 
                T2 
            Nested iteration. 
            Table Scan. 
            Forward scan. 
            Positioning at start of table. 
            Using I/O Size 16 Kbytes for data pages. 
            With LRU Buffer Replacement Strategy for data pages. 
     
     
      END OF QUERY PLAN FOR SUBQUERY 1.
    Les tables utilisées :

    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
    68   fidelisa Ex_intent    ANAFID   WA_INDIVIDU_CL           0 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5502984 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5502985 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5502986 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5502987 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5502988 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5502989 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5502990 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5502991 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503003 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503004 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503005 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503006 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503007 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503008 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503009 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503010 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503011 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503012 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503013 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503014 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503015 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503016 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503017 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503018 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503019 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503020 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503021 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503022 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503023 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503032 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503033 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503034 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503035 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503036 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503037 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503038 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503039 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503040 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503041 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503042 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503048 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503049 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503050 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503051 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503052 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503053 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503054 0    NULL  
    68   fidelisa Ex_page      ANAFID   WA_INDIVIDU_CL     5503055 0    NULL  
    68   fidelisa Ex_table     tempdb   #WA_AF_______0           0 0    NULL  
    68   fidelisa Update_page  ANAFID   WA_INDIVIDU_CL     5503042 0    NULL
    A quoi correspondent toutes ces Ex_page ?

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Quoi qu'il en soit, un petit index sur la colonne INDCLI_PRENOM_NOM, ne devrait pas faire de mal... il faudra peut etre le forcer dans le plan d'execution car avec les tables temporaires, on ne sais jamais comment l'optimiseur réagi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    create index #IDX_WA_AF on #WA_AF ( INDCLI_PRENOM_NOM )
     
     
    .....
     
    set
      INDCLI_CLI_AH_ID = (select  min(T2.INDCLI_ID) from #WA_AF (index #IDX_WA_AF ) T2
     
    .....

Discussions similaires

  1. Requete qui n'aboutit pas
    Par juvamine dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 02/07/2012, 16h48
  2. Comment diagnostiquer une requete qui n'aboutit pas?
    Par Sunsawe dans le forum Réseau
    Réponses: 1
    Dernier message: 21/12/2010, 08h53
  3. requete SQL avec sous requete qui ne fonctionne pas
    Par skyarnangel dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/02/2009, 14h47
  4. pb de requete qui ne marche pas sur pl sql
    Par smartsorft dans le forum SQL
    Réponses: 6
    Dernier message: 15/01/2008, 15h14
  5. [PL/SQL] requete qui marche mais pas dans un cursor
    Par victor.ward dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/09/2005, 22h21

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