Agenten beschleunigen

  • Hallo Leute,


    gibt es ne möglichkeit nen agenten zu beschleunigen?
    das Problem ist das ich einen Prüfagenten geschrieben habe der prüft ob der jenige im folgenden Zeitraum schon irgendwie angemeldet ist sprich er holt sich aus dem uidoc die ID öffnet ne ansicht im backend und sucht darin...das problem ist r braucht ewig um die ansicht zu öffnen...die ist leider in ner anderen datenbank...gibt es da ne möglichkeit das etwas zu "tunen", ich lass schon das refreshen aus, dauert dennoch 5 bis 10 min bis er anfängt zu arbeiten


    Danke schon mal für die antworten :)

    • Offizieller Beitrag
    Zitat

    gibt es ne möglichkeit nen agenten zu beschleunigen?

    ja.


    1. die Ansicht prüfen, ob dort ein @Now oder @Today in der Auswahl- oder Spaltenformel verwendet wird
    2. in der DB mit der Ansicht prüfen, ob die Anzahl der Dokumente verringert werden kann
    3. Deinen Code hier posten, ohne das Script gesehen zu haben, kann da keiner was daran optimieren.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • ja klar ohne code gehts schlecht...sry...
    deine tipss werde ich mir mal zur gemüt führen und das mal prüfen danke...achja die ansicht ist
    ("(Auskunft Starter)")


    Sub Click(Source As Button)
    'Personensperren überprüfen - 05.07.2007
    '---------------------------------------------------------------------------
    Dim WS As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Dim psDB As notesdatabase
    Dim psVW As notesview
    Dim bwDB As notesdatabase
    Dim bwVW As notesview
    Dim BID As String
    Dim TID As Long
    Dim nen As String
    Dim ausgabe As String
    Dim errtext As String
    Dim trcol As notesviewentrycollection
    Dim dat As New notesdatetime(Today)
    Set uidoc = WS.CurrentDocument
    Set doc = uidoc.Document
    Set trdb = New notesdatabase("xxx02", "Traber/Trrennen.nsf")
    Set trview = trdb.getview("(Auskunft Starter)")
    'Call trview.refresh

    BID = Trim(doc.BesitzerID(0))
    Set psDB = GetKonfigDB("","pspServer","pspFile")
    If psDB Is Nothing Then Goto SilentError
    If Not(psDB.IsOpen) Then Goto SilentError
    Set psVW = psDB.GetView("(IDString)")
    If psVW Is Nothing Then Error 1001, "Suchansicht im Personensperren nicht gefunden !"
    Set psdoc = psVW.GetDocumentByKey(BID, True)
    If Not psdoc Is Nothing Then
    sperrkz = Sperre(BID, psDB, psVW)
    If sperrkz = 1 Then
    errtext = "Besitzer ist gesperrt" & Chr(13)
    ' Exit Sub
    Else
    ausgabe = ausgabe & Chr(13) & "Besitzer ist nicht gesperrt"
    End If
    Else
    ausgabe = ausgabe & Chr(13) & "Besitzer ist nicht gesperrt"
    End If


    '----------------------------------------------------------------------------
    'Prüfen ob es eine vorläufige Ausfuhr gibt, wenn ja dann darf die Ausfuhr nicht gemacht werden
    TID = Trim(doc.TraberID(0))
    Set bwDB = New notesdatabase("xxx02","Traber\Besitzwechsel.nsf")
    If bwDB Is Nothing Then Goto SilentError
    If Not(bwDB.IsOpen) Then Goto SilentError
    Set bwVW = bwDB.GetView("(IDString)")
    If bwVW Is Nothing Then Error 1001, "Suchansicht im Personensperren nicht gefunden !"
    Set bwdoc = bwVW.GetDocumentByKey(Cstr(TID), True)
    If Not bwdoc Is Nothing Then
    bw =bwkz(TID, bwDB, bwVW)
    If bw = 1 Then
    errtext = errtext & "Es gibt zu diesem Traber einen vorläufigen Besitzwechsel - keine Ausfuhrerlaubnis"
    'Exit Sub
    Else
    ausgabe = ausgabe & Chr(13) & "Keinen vorläufigen Besitzwechsel gefunden"
    End If
    Else
    ausgabe = ausgabe & Chr(13) & "Keinen vorläufigen Besitzwechsel gefunden"
    End If
    '----------------------------------------------------------------------------
    'Prüfen ob das Pferd zwischen heute und Ausfuhrdatum im genannt wurde"
    Stop
    Set trcol = trview.getallentriesbykey(Cstr(TID), True)
    If trcol.count > 0 Then
    dat.localtime = doc.AusfuhrDatumVon(0)

    nen = Nennung(trcol, dat)
    If Cstr(nen) <> "" Then
    errtext = errtext &Chr(13) & "Nennung gefunden - keine Ausfuhrerlaubnis" & Chr(13) & nen
    Else
    ausgabe = ausgabe & Chr(13) & "Keine Starter Nennung gefunden"
    End If
    Else
    ausgabe = ausgabe & Chr(13) & "Keine Starter Nennung gefunden"
    End If


    If Not errtext ="" Then
    Error 1003, errtext
    Else
    Msgbox ausgabe
    End If
    '
    Exit Sub
    ErrorHandler:

    Messagebox Error$ , 64, "Fehler:"
    SilentError:
    Continue = False
    SaveCancel = True
    Print ""
    Exit Sub
    End Sub

    • Offizieller Beitrag

    da fehlen noch die einzelen Funktionen (z.B. Sperre).


    Aber bist Du Dir sicher, dass es an dem
    Set trview = trdb.getview("(Auskunft Starter)")
    liegt?
    Geb doch mal einen Zeitstempel vor und nach diesem Set aus.

    Code
    Print Cstr(Now)
    Set trview = trdb.getview("(Auskunft Starter)")
    Print Cstr(Now)


    Wird das Script beim 2. Lauf schneller?


    Gruß
    Dirk

  • ja beim 2 aufruf wird er schneller(kaum merkliches zögern) es gibt keine zeitfunktionen in der ansicht und die anzahl der dokumente läßt sich nicht verringern...
    mit dem timestamp kann ich gerade nicht dienen da ich denn die db für die user sperren muss was leider gerade nichtr möglich ist ...
    naj auf jeden fall vielen dank für deine schnelle hilfe :)


    //EDIT: nee es ist beim aufruf der Ansicht

  • Dann wird es daran liegen, daß der Ansichtsindex neu aufgebaut werden muss.


    Wann und wie ändern sich denn die Dokumente in dieser Ansicht ?
    Kommen da nur einmal täglich neue hinzu bzw ändern sich oder kommen diese regelmäßig dazu ?

  • Es ist übrigens ehr ein Vorteil, dass die Ansicht in einer separaten Datenbank liegt, da die Geschwindigkeit stark von der Größe der Datenbank anhängt. Um die Ansicht zu beschleunigen, gibt es unter anderem diese Möglichkeiten:


    - Update auf eine Notes-Version, die die Ansicht inkrementell berechnet. ich glaube, das ist mindesten Version 6
    - Auslagern der Daten in dieser Ansicht in eine komplett eigenständige Datenbank


    oder aber auch:


    Versuche irgendwie die Suche über die Ansicht durch eine Suche per DocID in der DB zu erstzen.


    Gruss, Bernd

  • ja das mit dem index war auch meine vermutung...
    die dokumente ändern sich täglich..
    deswegen kam ich ja auch auf die eidee das das mit dem index zu tun hat...nur leider ist der praktische nutzen = 0 wenn das so lange dauert, da die user genauso schnell selbst nachgucken können, und eigentlöich sollte das nen zeitersparnis ergeben...

  • Bernd
    das mit dem update auf ne höhere version kommt demnächst ...sind gerade dabei das system umzustrukturieren und entsprechenden Ersattz für wegfallende funktionen zu schaffen ...
    mit der doc id kann ich nicht suchen da sie mir beim aufrufen nicht bekannt ist jede starternennung ist ein eigenes document und ich will ja wissen ob es da welche gibt :) naja das mit dem auslagern klingt interessant...da die db in der die ansicht ist, eine stattliche größe hat ( leider)

  • Wenn die Dokumente sich täglich ändern dann kannst du wie ich schon sagte mit dem updall Task arbeiten.


    Wenn z.B. die Dokumente bis spätestens um 5:00 Uhr drin sind, dann kannst du den updall um 5:30 auf die DB loslassen.


    Dann muss die Ansicht bei den Usern nicht mehr neuaufgebaut werden und das ganze geht auch schneller

  • Ja dann erstell doch einfach mal eine neue blanke DB mit nur der einen Ansicht drin (Copy/Paste) und kopiere alle in der unrsprünglichen Ansicht vorhandenen Dokumente dort hinein. Stelle Deinen Agent dann auf die die neue Test-DB ein und lass ihn laufen. Dann hast Du in 10 min. herausgefunden, ob das was bringt.


    Gruss, Bernd

  • Hallo Gregor,


    zwei Vorschläge:
    1) gibt's in deinen Suchansichten Spalten mit komplizierten Formeln und Sortierungen?
    Wenn ja, kannst du für die Suche jeweils eine andere (neue) Ansicht mit nur einer Spalte, wo BID bzw. TID als Feldinhalt stehen erstellen.


    2) statt


    Code
    Set trdb = New notesdatabase("xxx02", "Traber/Trrennen.nsf")


    und


    Code
    Set bwDB = New notesdatabase ("xxx02","Traber\Besitzwechsel.nsf")


    nimm


    Code
    Dim ns As New NotesSessionSet trdb = ns.GetDatabase( "xxx02", "Traber/Trrennen.nsf", False )


    und


    Code
    Set bwDB = ns.GetDatabase( "xxx02", "Traber\Besitzwechsel.nsf", False )


    Viel Erfolg!


    Gruß


    Laura

  • Ja genau, die Art der Ansicht ist natürlich entscheidend. Im Allgemeinen gilt, dass man für Lookups auf der einen Seite und für Notes-Darstellungen auf der anderen Seite immer verschiedene Ansichten erstellen soll.


    Neben den von Laura erwähnten komplizierten Spaltenformeln ist für eine gute Performance auch das zu beachten:


    - Niemals Selektionsformeln bezogen auf den aktuellen Zeitpunkt einfügen (zB. mit @now)
    - Keine Kategorien verwenden
    - Nur eine (die erste) Spalte sortieren
    - Keine zusätzlichen "Klick on the Header to sort" in anderen Spalten einbauen


    Das sollte in der Ansicht für getDocumentByKey alles der Fall sein.


    Gruss, Bernd

    • Offizieller Beitrag

    - Keine Kategorien verwenden
    Die Ansichten mit Kategorien sind aber im UI schneller aufgebaut, man sollte allerdings vermeiden, dass Dokumente in mehrere Kategorien einsortiert werden.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein