none
Vitesse et performence RRS feed

  • Question

  • Bonjour,

    J'ai créé une base de données composées de divers tables, requêtes, formulaires et états, du code VBA et des macros. Les formulaires et les états sont accessibles via un formulaire de navigation (9 onglets dont 8 directement liés sur des recordsets)

    Le base est partagées en 2 (programme d'un côté, base de l'autre)

    Mon problème est le suivant :
    Lorsqu'un seul utilisateur est connecté tout fonctionne nickel
    Dès qu'un 2è utilisateur se branche sur la base les temps de réponses deviennent très longs, la requête met un temps fou à être traitée
    Si le premier utilisateur va sur le premier onglet (celui du formulaire d'accueil, sans recordset), ou ferme le programme cela accélère le traitement pour le 2è utilisateur.
    Et je ne vous parle pas de la vitesse lorsque 10 utilisateurs sont connectés.

    De plus j'ai remarqué que la partie du programme qui initialement fait 1948ko, augmente, augmente, augmente... En 6 heures elle a atteint le 30 Mo. Elle là, même si tous les utilisateurs ont quitté le programme, ça galère encore...

    Quelqu'un aurait-il la solution miracle ?
    D'avance un grand merci.
    lundi 27 juin 2011 06:19

Toutes les réponses

  • Bonjour,

    C'est un vaste débat.
    Il existe de nombreuses raisons qui peuvent justifier ce comportement.

    • Déjà, y a t-il des images ? Si oui, quelle taille/format ?
    • Utilisez-vous des fonctions de domaine ? (DLookup...)
    • etc... 

    Quelques suggestions

    Mettez-vous comme second utilisateur et :

    • posez des points d'arrêt dans le code ;
    • exécutez les tâches telles que constatées par vos utilisateurs
    • voyez alors où ça flanche.

    Un tuto à lire : http://dolphy35.developpez.com/article/access/basesreseaux/


    Argy
    lundi 27 juin 2011 13:32
    Modérateur
  • Voici quelques précisions :

    Il n'y a qu'une image et elle est sur le seul onglet qui fonctionne à vitesse normale

    Je n'utilise aucune fonction de domaine.

    J'ai posé un point d'arrêt dans le code. ça prend du temps sur une requête qui n'a rien d'extraordinaire. La requête est enregistrée dans Access. En VBA elle correspond à :

    SELECT DISTINCTROW Documents.* FROM (ListePersonnes INNER JOIN FonctionsAttribuées ON ListePersonnes.NoPerso = FonctionsAttribuées.IdPerso) INNER JOIN (Documents INNER JOIN FonctionsAttribuéesDocuments ON Documents.NoDocument = FonctionsAttribuéesDocuments.IdDocument) ON (FonctionsAttribuées.IdZone.Value = FonctionsAttribuéesDocuments.IdZone.Value) AND (FonctionsAttribuées.IdFonction.Value = FonctionsAttribuéesDocuments.IdFonction.Value) WHERE (((ListePersonnes.Identité)=""" & utilisateur & """) AND ((Documents.[Périmé]) = False))


    La même requête s'exécute normalement lorsque il n'y a qu'un seul utilisateur connecté.

    J'ai supprimé tout le code est mis la requête dans les propriété de l'état mais ça ne va pas mieux....

     


    lundi 27 juin 2011 19:18
  • En effet...

    • Est-ce que l'option "Suivi de correction automatique des noms" est décochée ?
    • Quel est le niveau de position de l'arborescence de répertoire dans lequel est situé la BDD dorsale ?

    Argy
    mardi 28 juin 2011 07:34
    Modérateur
  • Où est-ce que je trouve cette option à décocher ?

    Pour ce qui est du niveau de position de l'arborescence ça doit être 7è ou 8è niveau mais malheureusement je n'y peut rien changer. C'est une arborescence d'entreprise,

    Une chose que je viens de remarquer. Je n'en suis pas 100% sûr, je dois encore tester...

    Il semble que le blocage n'ait lieu que sur les états et pas sur les formulaires.

    Cela donne-t-il une piste à quelqu'un ?

    mardi 28 juin 2011 17:57
  • Alors après transformation de l'état en formulaire, le temps de réponse est revenu normal (pour cet onglet...)

    S'agit-il d'un bug d'accès 2010 ?

    Est-il possible de faire remonter l'information jusqu'aux programmeurs de Microsoft ?

    mercredi 29 juin 2011 06:17
  • J'ai trouvé l'option à décocher... Elle était cochée !

    Mais cela n'a rien changé....

    mercredi 29 juin 2011 06:40
  • Le niveau d'arborescence peut avoir une influence sur la performance d'opérations sur les états.

    Il faut voir comment est conçu l'état ; Bon nombre de raisons peuvent justifier ce comportement comme dit ci-avant.

    Question :est-ce les tables sont correctement indexées ?

    Pour info, le SP1 Office 2010 est sorti...


    Argy
    vendredi 1 juillet 2011 10:11
    Modérateur
  • L'état est conçu "normalement"... Une requête sur plusieurs tables... Pas de calcul...

    Juste des champs texte, date, oui/non, pièce jointe, lien

    Pour ce qui est du nivreau d'arborescence, j'ai aussi fait un essai sur un autre réseau avec nettement moins de niveau, cela ne change rien...

    Je ne comprends pas que cela ralentisse sur un état mais pas sur un formulaire qui a la même requête et les même champs...

    vendredi 1 juillet 2011 14:48
  • Bonjour,

    Il est fort probable qu'établir une connection persistante résoudra le problème.
    Créer une table bidon et un formulaire bidon basé sur cette table. Ouvrir et cacher le formulaire au démarrage, c'est tout !
    http://www.granite.ab.ca/access/performanceldblocking.htm

    Pour l'augmentation de la taille de la base, c'est normal (quoique dans ces proportions cela ne me semble pas fort correct, mais cela dépend aussi de ce qu'on y fait).  Access n'est pas prévu pour fonctionner 24h/24.  Il faut la compacter de temps en temps.

    Cdt,
    Blaise

    <chouky> a écrit dans le message de news: e249a956-1923-41c1-b15b-793be9056743@communitybridge.codeplex.com...


    Bonjour,

    J'ai créé une base de données composées de divers tables, requêtes, formulaires et états, du code VBA et des macros. Les formulaires et les états sont accessibles via un formulaire de navigation (9 onglets dont 8 directement liés sur des recordsets)

    Le base est partagées en 2 (programme d'un côté, base de l'autre)

    Mon problème est le suivant :
    Lorsqu'un seul utilisateur est connecté tout fonctionne nickel
    Dès qu'un 2è utilisateur se branche sur la base les temps de réponses deviennent très longs, la requête met un temps fou à être traitée
    Si le premier utilisateur va sur le premier onglet (celui du formulaire d'accueil, sans recordset), ou ferme le programme cela accélère le traitement pour le 2è utilisateur.
    Et je ne vous parle pas de la vitesse lorsque 10 utilisateurs sont connectés.

    De plus j'ai remarqué que la partie du programme qui initialement fait 1948ko, augmente, augmente, augmente... En 6 heures elle a atteint le 30 Mo. Elle là, même si tous les utilisateurs ont quitté le programme, ça galère encore...

    Quelqu'un aurait-il la solution miracle ?
    D'avance un grand merci.

    vendredi 1 juillet 2011 16:55
  • Bonjour,

    Egalement à consulter :

    http://loufab.developpez.com/tutoriels/access/optimisation/

    Cordialement,


    Visitez mes sites : http://2gm.free.fr | http://loufab.developpez.com
    vendredi 22 juillet 2011 07:14