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

Projets ADP Discussion :

ADP sous 2007: performance des requêtes SET FMTONLY


Sujet :

Projets ADP

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut ADP sous 2007: performance des requêtes SET FMTONLY
    Bonjour,

    J'ai créé un projet adp sous Access 2003 et SQL Server 2005 que je voudrais utiliser avec Access 2007 (SP2).
    Je veux garder le format adp car les autres formats ne me conviennent pas, seulement je rencontre un problème assez gênant sous 2007 uniquement, c'est que les requêtes "SET FMTONLY" générés automatiquement à l'éxécution sont trop lentes et font des timeout car contrairement à 2003 elles ne contiennent pas la fameuse clause "WHERE 1=2" qui permet de ne pas parcourir entièrement les tables. Ces requêtes sont issues d'états et de sous-états.

    On créant une trace sous SQL Server Profiler je constate ceci:

    Avec 2003 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SET FMTONLY ON select "champ1","champ2","champ3" 
    from (SELECT * FROM Vue1) AS DRVD_TBL 
    WHERE 1=2 SET FMTONLY OFF
    Avec 2007 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET FMTONLY ON select "champ1","champ2","champ3" 
    from (SELECT * FROM Vue1) AS DRVD_TBL SET FMTONLY OFF
    J'utilise des vues mais j'ai pu constaté le même phénomène sur des tables.

    Ma question est donc il y a t'il un moyen de retrouver ou d'obtenir le même effet que le "WHERE 1=2" ?

    Allonger la durée du timeout ne m'aiderait pas car la requête serait trop lente de toute façon, sans compter les problèmes de performance que ça induit.

    J'ai déjà testé de recréer un projet adp sous 2007 et d'importer le projet, ainsi que de mettre la requête sous différentes formes (sql brut au lieu de la vue, select * from vue, select champs from vue, ...) mais rien n'y fait.

    Toute aide sera la bien venue

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Je n'ai pas la possibilité d'essayer mais tu peux procéder ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TOP 0 [champ1], [champ2], [champ3] FROM (SELECT * FROM Vue1) AS DRVD_TBL
    Argy

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    A priori, les requêtes ne sont pas modifiables. Ce dont parle Mafix si j'ai bien compris ce sont les requêtes envoyées par Access au serveur SQL afin de remplir les composants utilisant le databinding

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    SET FMTONLY ON select "champ1","champ2","champ3"
    from (
    SELECT * FROM Vue1) AS DRVD_TBL SET FMTONLY OFF


    En fait ma requête se situe ici en vert, le reste est généré automatiquement et donc je n'ai pas la possibilité d'agir dessus. Et bien sûr ma requête doit renvoyer des résultats.

    Moi ça me fait plutôt penser à un bug cette histoire, ou alors il y a peut être un paramètre quelque part pour ça ?

    Edit:
    Citation Envoyé par Tofalu Voir le message
    A priori, les requêtes ne sont pas modifiables. Ce dont parle Mafix si j'ai bien compris ce sont les requêtes envoyées par Access au serveur SQL afin de remplir les composants utilisant le databinding
    Exact

  5. #5
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Le phénomène est rencontré sur le même poste de travail ?
    (Tu as migré Access 2003 vers 2007 ?)

    Argy

  6. #6
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Je confirme la syntaxe sous Access 2007 et 2010 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET FMTONLY ON select "champ1","champ2","champ3" 
    from (SELECT * FROM Vue1) AS DRVD_TBL SET FMTONLY OFF
    Sans les WHERE 1=2

    Ces requetes semblent générées uniquement lorsque l'on manipule des sous états ou des sous formulaires.

  7. #7
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Le problème ressemble un peu à ce KB: http://support.microsoft.com/kb/836830

    Mais la version des MDAC auquel il s'applique ne correspond pas à ma version plus récente (2.81.1132.0)

  8. #8
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bon en attendant j'ai fini par trouver une solution de rechange.

    En fait c'est bien la relation père-fils entre état et sous états qui provoque ces requêtes. Access s'en sert pour obtenir des informations sur les champs qui font le lien.

    Pour contourner le problème j'ai donc retiré les requêtes sur les sous-états et j'exécute la requête moi même avec les bon paramètres, en la mettant dans l'évènement "Sur ouverture" des sous-états et en remplaçant leur Recordset.

    Le code de ceci correspond à ce que l'on trouve dans l'aide sur la propriété Recordset.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub Report_Open(Cancel As Integer)
     
      Dim rstSuppliers As ADODB.Recordset
      Set rstSuppliers = New ADODB.Recordset
      rstSuppliers.CursorLocation = adUseClient
      rstSuppliers.Open "Select * From Suppliers Where idSupplier=" & Me.Parent!idSupplier, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
      Set Me!Recordset = rstSuppliers
     
    End Sub

    Par contre la question reste entière sur cet étrange comportement d'Access...

Discussions similaires

  1. performance des requêtes SQL
    Par haykelFST dans le forum Développement
    Réponses: 3
    Dernier message: 20/10/2011, 18h28
  2. Mesurer les performances des requêtes Sybase
    Par kenji_getpowered dans le forum Sybase
    Réponses: 0
    Dernier message: 28/09/2011, 17h39
  3. CONSTRAINT FOREIGN KEY et Performance des requêtes
    Par zinzineti dans le forum Administration
    Réponses: 0
    Dernier message: 28/10/2010, 12h27
  4. Performance des requêtes - jointure par fonctions
    Par denevers dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 07/12/2007, 15h11

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