Wednesday, April 15, 2009

Answer - Archiving - View indexes - Size really does matter?

I've called IBM about this post Archiving - View indexes - Size really does matter

Like Graham said, the document size does not matter, those view sizes would be the same. The view is calculated based on number of documents, columns and sorting.

I've done a test. In this example, the Inbox is 88megs and the All documents view is 102 megs.



I did a test on a smaller db. I've removed almost every documents from the Inbox with this script (keeping only the last 90 days) : Link

My inbox's size have dropped to 700ko. It was 4,5 megs before. The size of the all documents's view hasn't change which is ok.

I will do the test on the biggest db (6,3gb) . On this db, the user have more than 25000 documents in his Inbox. I know that it's not recommanded (http://www.ibm.com/developerworks/lotus/library/notes-mail-files/)

Here's the script:

CleanUp agent

' CleanupInbox – moves older documents out of inbox
Sub Initialize
Dim s As New NotesSession
Dim db As NotesDatabase
Set db = s.CurrentDatabase
Dim dr1 As notesdaterange
Dim v As notesview
Dim dc1 As NotesDocumentCollection
Dim gracedoc As NotesDocument
Dim stime1 As New NotesDateTime("0/0/0")
Dim etime1 As New NotesDateTime("Today")

Set gracedoc = db.GetProfileDocument("inboxgracedays")
Dim graceval As Variant
Dim gracedays As Integer

' if no profile doc has been prepared, default is 90 days
If gracedoc.HasItem("gracedays") Then
graceval = gracedoc.GetItemValue("gracedays")
gracedays = Cint(graceval(0))
Else
gracedays = 90
End If

etime1.AdjustDay(-1*gracedays)

' create a daterange excluding docs newer than graceperiod
Set dr1 = s.CreateDateRange()
Set dr1.StartDateTime = stime1
Set dr1.EndDateTime = etime1

'dc1: collection of 'old' documents from inbox
(before or on Today - gracedays)
Set v = db.GetView("($Inbox)")
Set dc1 = v.GetAllDocumentsByKey(dr1)

'pull out expired docs
dc1.RemoveAllFromFolder("($Inbox)")
End Sub

'SetInboxGracePeriod agent – sets the grace period for inbox

Sub Initialize
Dim s As New NotesSession
Dim db As NotesDatabase
Set db = s.CurrentDatabase
Dim gracedoc As NotesDocument
Dim gracedays As Integer
Dim inputgracedays As Integer
Dim maxdays As Integer
Dim graceval As Variant
Dim gracevar As Variant
maxdays = 1000

Set gracedoc = db.GetProfileDocument("inboxgracedays")
If gracedoc.HasItem("gracedays") Then
graceval = gracedoc.GetItemValue("gracedays")
gracedays = Cint(graceval(0))
Else
gracedays = 90
End If
getInput:
inputgracedays = -1
gracevar = Inputbox("Days to retain in Inbox? (currently " &
gracedays & ")" )
If (gracevar <> "") Then
inputgracedays = Cint(gracevar)
End If

While (inputgracedays > maxdays)
Msgbox("Maximum of " & maxdays
& " days exceeded")
Goto getInput
Wend

If inputgracedays <> -1 Then
gracedays = inputgracedays
End If

Set gracedoc = db.GetProfileDocument("inboxgracedays")
gracedoc.ReplaceItemValue "gracedays",gracedays
Call gracedoc.Save(False,False)
End Sub

1 comment:

Anonymous said...

That's cool. To see the impact of large views... it is useful to use the "debug_nif_update=1" parameter. The resulting console log output will show how long each view takes to update abd which views get updated most often. That is useful for finding the views that have the biggest performance impact.
Liam H.