Performance von Ansichten

  • Hallo,


    ich habe eine Applikation mit ca. 200 Ansichten und 140.000 Dokumenten. Es arbeiten permanent ca. 150 Personen in dieser Applikation. Das heißt mehrere 1000 Dokumente werden mehrmals täglich geändert/gespeichert. Die Ansichten haben viele Spalten von denen wiederum viele Daten auf Basis von Formulas anzeigen. Die Applikation ist doch sehr häufig zu träge für die Benutzer.
    Jetzt meine Frage ob jemand von euch Erfahrung hat ob es viel bringt, wenn wir die Spalten in den Ansichten nicht mit Formulas sondern mit bereits im Dokument berechneten Feldwerten versorgen.
    Die Umstellung wäre für uns ein ziemlicher Aufwand, weil doch sehr viel LotusScript im Spiel ist. Daher möchte eben vorher Fragen wie eure Erfahrung mit Performancegewinn ist.

  • So einfach lässt sich das nicht beantworten.


    Zunächst einmal muss geklärt werden, was in den Augen der User als "langsam" gilt. Hier sind subjektive Empfindungen und objektive Messergebnisse zeitweilen doch zwei völlig verschiedene Dinge. Auch die Erwartungshaltung der User sollte in diesem Schritt überprüft werden.


    Dann erst geht es ans Design: vermutlichgleich zu Anfangs fliegen die bekannten Performancekiller ("@Now", "@Today", ...) raus. Dann muss geprüft werden, ob wirklich jede Spalte, die jetzt sortierbar ist, auch wirklich sortierbar sein müssen. Dann ließe sich eine Menge bewirken, wenn per mehr oder weniger häufig schedultem Programmdokument die am 2 oder 3 am häufigsten genutzten Ansichten aktualisiert werden. Die Frage der in den Ansichtseigenschaften eingestellten Indexaktualisierungen und -verwerfungen muss ebenfalls geklärt werden...


    Ganz generell muss eruiert werden, ob es für 140k Dokumente wirklich 200 Ansichten braucht oder ob man diese Zahl nicht auch massiv eindampfen kann.


    Bevor man nun die gesamte Anwendung umkrempelt, erst einmal auf die naheliegenden Dinge sich konzentrieren und wenn das geklärt ist, kann man immer noch weiterschauen.
    Die Berechnung von Feldwerten wird ganz sicher kein Erfolgsrezept werden, wenn die Berechnungen bspw. mit excessiven @DbLookups passieren. Dann mag eine Ansicht gefühlt schneller öffnen, aber dafür öffnet sich ein Dokument weit langsamer, bzw. das Speichern dauert entsprechend länger.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Danke Rockwilder für dein Feedback.


    Zur Erwartungshaltung: Es ist mir selber auch zu langsam. Das eigenartige dabei ist, dass es manchmal recht gut geht, aber dann doch zu häufig zu lange benötigt. Das Öffnen einer Ansicht mit zig-tausendenden Dokumenten dauert im Schnitt 10 sekunden. Eine Ansicht ein paar Tausend Dokumenten schon auch 2 sekunden. Beim Schließen einer Maske mache ich per LotusScript ein workspace.viewrefresh damit die Benutzer ihre Änderung auch gleich sehen können. Dadurch dauert auch das schließen einer Maske schon mal einige Sekunden.


    @Now und @Today in den Ansichten werden jede Nacht um 2:00 mittels Lotus Script ersetzt durch @Date(...) und danach nochmals ein updall drüber.


    Die Anzahl der Ansichten habe ich bereits reudziert (es sind "nur" 106), in dem dass ich ein Logging beim Öffnen eingebaut habe und somit sehe welche Ansichten denn überhaupt genutzt werden.
    Sortierbar sind nur mehr ganz wenige Spalten. Das habe ich schon alles so gut wie möglich gestrichen.


    Das mit dem Programmdokument und dem Aufbauen der häufig genutzten Ansichten kenne ich nicht. Das würde mich interessieren wie du das machst. Kannst mir da eine Beispielzeile posten.


    Die Indexaktualisierung der Ansichten ist ganz Standard "Automat. 1 Verwendung" verwerfen falls 45 Tage nicht verwendet.


    Die Berechnung der Feldwerte für die Ansichtsspalten würde nie über @DBLookup gemacht. Da könnt ich die Feldwerte ja jetzt gar nicht anzeigen. Stellt sich für mich natürlich auch die Frage, wenn ich diese Werte im Dokument speichere wächst natürlich die Datenbank wieder um ein bisschen.

  • Die Datenbankgröße ist im Großen und Ganzen irrelevant. Wesentlich ist der Ansichtsindex. Öffnet ein User eine Ansicht, prüft der Client neben vielen anderen Dingen eben auch die Aktulität des Index'.
    Stehen die Informationen im Dokument und werden nicht in der Ansicht über Spaltenformeln berrechnet, wird es aller Wahrscheinlichkeit nach ein Stückchen weit performanter öffnen.


    Das update der Ansichten via Programmdokument kann bspw. in der Hilfe nachgeschlagen werden. Im Artikel zu den "compat options" wird explizit auf "lo compact db.nsf -T view" hingewiesen...


    Ob 2 Sekunden Wartezueit nun wirklich langsam und unannehmbar sind, das sei einfach mal dahingestellt.....

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl