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] Update en mode deferred


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] Update en mode deferred
    Bonjour,

    J'ai la requete ci-dessous qui passe en mode deferred et je ne comprend pas pourquoi.

    Il n'y a aucun index sur le champ INDCLI_CLI_AH_ID, ni INDCLI_CRITERE !

    update WA_INDIVIDU_CLIENT_WEBFID
    set INDCLI_CLI_AH_ID = (select min(INDCLI_ID) from WA_INDIVIDU_CLIENT_WEBFID T2
    where WA_INDIVIDU_CLIENT_WEBFID.INDCLI_PRENOM_NOM = T2.INDCLI_PRENOM_NOM
    and WA_INDIVIDU_CLIENT_WEBFID.INDCLI_ADRESSE1 = T2.INDCLI_ADRESSE1
    and WA_INDIVIDU_CLIENT_WEBFID.INDCLI_CODE_POSTAL = T2.INDCLI_CODE_POSTAL
    and WA_INDIVIDU_CLIENT_WEBFID.INDCLI_ID <> T2.INDCLI_ID),
    INDCLI_CRITERE = 1
    where exists (select INDCLI_ID from WA_INDIVIDU_CLIENT_WEBFID T2
    where WA_INDIVIDU_CLIENT_WEBFID.INDCLI_PRENOM_NOM = T2.INDCLI_PRENOM_NOM
    and WA_INDIVIDU_CLIENT_WEBFID.INDCLI_ADRESSE1 = T2.INDCLI_ADRESSE1
    and WA_INDIVIDU_CLIENT_WEBFID.INDCLI_CODE_POSTAL = T2.INDCLI_CODE_POSTAL
    and isnull(WA_INDIVIDU_CLIENT_WEBFID.INDCLI_PRENOM_NOM ,' ') <> ' '
    and isnull(WA_INDIVIDU_CLIENT_WEBFID.INDCLI_ADRESSE1,' ') <> ' '
    and isnull(WA_INDIVIDU_CLIENT_WEBFID.INDCLI_CODE_POSTAL,' ') <> ' '
    and (WA_INDIVIDU_CLIENT_WEBFID.INDCLI_CLI_AH_ID = 0 or WA_INDIVIDU_CLIENT_WEBFID.INDCLI_CLI_AH_ID > T2.INDCLI_ID)
    and WA_INDIVIDU_CLIENT_WEBFID.INDCLI_ID <> T2.INDCLI_ID)

    Plan dexécution :


    Warnings: --->
    W (1):
    W (2): QUERY PLAN FOR STATEMENT 1 (at line 1).
    W (3):
    W (4):
    W (5): STEP 1
    W (6): The type of query is UPDATE.
    W (7): The update mode is deferred.
    W (8):
    W (9): FROM TABLE
    W (10): WA_INDIVIDU_CLIENT_WEBFID
    W (11): Nested iteration.
    W (12): Table Scan.
    W (13): Forward scan.
    W (14): Positioning at start of table.
    W (15): Using I/O Size 16 Kbytes for data pages.
    W (16): With LRU Buffer Replacement Strategy for data pages.
    W (17):
    W (18): FROM TABLE
    W (19): WA_INDIVIDU_CLIENT_WEBFID
    W (20): T2
    W (21): EXISTS TABLE : nested iteration.
    W (22): Index : idx_npc
    W (23): Forward scan.
    W (24): Positioning by key.
    W (25): Keys are:
    W (26): INDCLI_PRENOM_NOM ASC
    W (27): INDCLI_ADRESSE1 ASC
    W (28): INDCLI_CODE_POSTAL ASC
    W (29):
    W (30): Run subquery 1 (at nesting level 1).
    W (31): Using I/O Size 2 Kbytes for index leaf pages.
    W (32): With LRU Buffer Replacement Strategy for index leaf pages.
    W (33): Using I/O Size 2 Kbytes for data pages.
    W (34): With LRU Buffer Replacement Strategy for data pages.
    W (35): TO TABLE
    W (36): WA_INDIVIDU_CLIENT_WEBFID
    W (37): Using I/O Size 2 Kbytes for data pages.
    W (38): STEP 1
    W (39):
    W (40): NESTING LEVEL 1 SUBQUERIES FOR STATEMENT 1.
    W (41):
    W (42): QUERY PLAN FOR SUBQUERY 1 (at nesting level 1 and at line 2).
    W (43):
    W (44): Correlated Subquery.
    W (45): Subquery under an EXPRESSION predicate.
    W (46):
    W (47):
    W (48): STEP 1
    W (49): The type of query is SELECT.
    W (50): Evaluate Ungrouped MINIMUM AGGREGATE.
    W (51):
    W (52): FROM TABLE
    W (53): WA_INDIVIDU_CLIENT_WEBFID
    W (54): T2
    W (55): Nested iteration.
    W (56): Index : idx_npc
    W (57): Forward scan.
    W (58): Positioning by key.
    W (59): Keys are:
    W (60): INDCLI_PRENOM_NOM ASC
    W (61): INDCLI_ADRESSE1 ASC
    W (62): INDCLI_CODE_POSTAL ASC
    W (63): Using I/O Size 2 Kbytes for index leaf pages.
    W (64): With LRU Buffer Replacement Strategy for index leaf pages.
    W (65): Using I/O Size 2 Kbytes for data pages.
    W (66): With LRU Buffer Replacement Strategy for data pages.
    W (67):
    W (68): END OF QUERY PLAN FOR SUBQUERY 1.
    W (69):
    W (70):
    [
    Merci de votre aide.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Au moins un des champs qui est mis à jour est aussi présent dans la clause WHERE. Pour éviter le risque d'une boucle infinie Sybase utilise le mode DEFERRED dans ce cas.

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  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
    Le problème que j'ai viens du fait que cet update sur une table de 1,8 millions se fait en 5 minutes, mais que sur 2,8 millions, cette requete n'aboutit pas (on kill la requete au bout d'1 heure)

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Je ne pense pas que le mode deferred soit vraiment la cause du problème (bien que cela n'aide pas, évidemment!)
    Par contre il est tout à fait possible que dans le deuxième cas on passe un seuil par rapport à la cache qui fait que le nombres de lectures physiques augmente fortement. On fait un table scan de la table, et pour chaque enregistrement on fait un SELECT EXISTS imbriqué, et un SELECT max imbriqué. Le nombre d'IOs logiques doit être considérable...

    Il y a peut-être un autre moyen d'ecrire la requète - soit avec la forme UPDATE ... FROM ..., soit en passant par une table temporaire.

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  5. #5
    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
    Ok, j'ai créer une table temporaire reprennant les informations de la table (WA_INDIVIDU_CLIENT_WEBFID) et fait une jointure avec celle-ci.
    Cela fonctionne parfaitement avec un gain de x8
    Merci

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

Discussions similaires

  1. [Débutant] Update en mode déconnecté
    Par pinketta dans le forum C#
    Réponses: 0
    Dernier message: 26/05/2012, 23h48
  2. insert update access mode déconnecter
    Par lorine dans le forum C#
    Réponses: 0
    Dernier message: 16/11/2009, 12h57
  3. [ASE]update stats
    Par plochert dans le forum Sybase
    Réponses: 8
    Dernier message: 20/03/2006, 14h23
  4. [ASE][T-SQL] Optimisation d'un update
    Par metheorn dans le forum Sybase
    Réponses: 2
    Dernier message: 06/03/2006, 13h12
  5. [ASE] Les locks avec un cursor for update
    Par PiyuXYZ dans le forum Sybase
    Réponses: 1
    Dernier message: 11/02/2006, 13h17

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