Notes database performance en local cache
Category Performance
Bookmark :
Bij een klant ben ik al geruime tijd bezig met het proberen te verbeteren van de performance van hun belangrijkste Notes applicatie. Belangrijke performance winst had ik al bereikt door het aanpassen van de subforms, het optimaliseren van views en het tunen van de server maar vandaag heb ik nog een belangrijk winstpunt gevonden: de local cache.....
Als je een database op een Domino server opent worden er diverse design elementen geladen. Om ervoor te zorgen dat niet iedere keer de design elementen van de server hoeven te worden geladen gaat Notes proberen om de design elementen op te slaan in een lokale cache database: cache.ndk. Standaard zit er echter een quota van 30 MB op de cache.ndk en dat is met een aantal flinke applicaties al snel niet meer voldoende. Als de database 30 MB is worden er geen nieuwe design elementen meer in de cache opgenomen en dus moeten die elementen bij ieder gebruik van de server worden geladen.
cache.ndk is overigens een gewone Notes database die gewoon geopend kan worden in Notes. Je ziet dan een overzicht van alle design elementen die in de cache aanwezig zijn.
Door bij deze klant de cache flink te vergroten is in de betreffende applicatie een bepaalde workflow die eerst 2 minuten in beslag nam nu in 1 minuut klaar........
Een gebruiker kan de cache zelf vergroten door op de workspace (wat! workspace.... jakkes
) rechts
te klikken, WorkSpace Properties te selecteren en vervolgens op de tweede
tab de 30 MB te verhogen.
Maar eigenlijk wil je dat natuurlijk niet door een eindgebruiker laten doen. Bij deze klant heb ik daarom gebruikers een mail gestuurd met een knop erin die de cache quota verhoogd. Dit is de code:
Sub Click(Source As Button)
Dim session As New Notessession
Dim db As NotesDatabase
Set db = session.getdatabase("", "cache.ndk")
'verhoog quota naar 300 MB
db.SizeQuota = 307200
db.SizeWarning = 0
'zet de quota size ook in de notes.ini voor als er een nieuwe cache.ndk wordt aangemaakt
Call session.SetEnvironmentVar( "InitialCacheQuota", "307200",True )
End Sub
Bookmark :
Bij een klant ben ik al geruime tijd bezig met het proberen te verbeteren van de performance van hun belangrijkste Notes applicatie. Belangrijke performance winst had ik al bereikt door het aanpassen van de subforms, het optimaliseren van views en het tunen van de server maar vandaag heb ik nog een belangrijk winstpunt gevonden: de local cache.....
Als je een database op een Domino server opent worden er diverse design elementen geladen. Om ervoor te zorgen dat niet iedere keer de design elementen van de server hoeven te worden geladen gaat Notes proberen om de design elementen op te slaan in een lokale cache database: cache.ndk. Standaard zit er echter een quota van 30 MB op de cache.ndk en dat is met een aantal flinke applicaties al snel niet meer voldoende. Als de database 30 MB is worden er geen nieuwe design elementen meer in de cache opgenomen en dus moeten die elementen bij ieder gebruik van de server worden geladen.
cache.ndk is overigens een gewone Notes database die gewoon geopend kan worden in Notes. Je ziet dan een overzicht van alle design elementen die in de cache aanwezig zijn.
Door bij deze klant de cache flink te vergroten is in de betreffende applicatie een bepaalde workflow die eerst 2 minuten in beslag nam nu in 1 minuut klaar........
Een gebruiker kan de cache zelf vergroten door op de workspace (wat! workspace.... jakkes
Maar eigenlijk wil je dat natuurlijk niet door een eindgebruiker laten doen. Bij deze klant heb ik daarom gebruikers een mail gestuurd met een knop erin die de cache quota verhoogd. Dit is de code:
Sub Click(Source As Button)
Dim session As New Notessession
Dim db As NotesDatabase
Set db = session.getdatabase("", "cache.ndk")
'verhoog quota naar 300 MB
db.SizeQuota = 307200
db.SizeWarning = 0
'zet de quota size ook in de notes.ini voor als er een nieuwe cache.ndk wordt aangemaakt
Call session.SetEnvironmentVar( "InitialCacheQuota", "307200",True )
End Sub
- 


Comments
Maar het stukje code kan geoptimaliseerd worden als je eerst de notes.ini variabele uitleest waar de cache.ndk staat ( als aanwezig ). Bij sommige bedrijven staat de cache.ndk namelijk niet in de data dir van notes maar bv in de temp dir van de user.
Posted by Bertil Reiling At 22:52:31 On 28-05-2008 | - Website - |
Posted by Almar Diehl At 08:08:22 On 29-05-2008 | - Website - |
Alleen vraag ik me af of deze code bij ons werkt. De data staat bij ons op de server onder eigengebruikersnaam. Wel een vaste locatie (H:\Notes) geen "data" map. Als je nog suggesties hebt m.b.t. een code?!
Wij werken met LN 7.0.1
Posted by Yvo Slokkers At 10:57:28 On 11-07-2008 | - Website - |
ja hoor, dt is geen probleem. Als je de volgende code gebruikt wordt er eerst gecontroleerd of de cache buiten de Notes data directory staat.
Sub Click(Source As Button)
Dim session As New Notessession
Dim db As NotesDatabase
location = session.GetEnvironmentString( "Cache",True )
If location = "" Then
Set db = session.getdatabase("", "cache.ndk")
Else
Set db = session.GetDatabase("",location)
End If
'verhoog quota naar 100 MB
db.SizeQuota = 102400
db.SizeWarning = 0
'zet de quota size ook in de notes.ini voor als er een nieuwe cache.ndk wordt aangemaakt
Call session.SetEnvironmentVar( "InitialCacheQuota", "102400",True )
End Sub
Overigens, je geeft aan dat bij jullie de cache in de home directory van de gebruikers staat. Dat is een van de grootste performance killers voor Notes!! De cache file wordt heel frequent gelezen en geschreven en die wil je eigen altijd op een lokale schijf opslaan.
Dit kun je regelen door in de notes.ini b.v. cache=c:\temp\cache.ndk op te nemen.
Posted by Almar Diehl At 08:32:01 On 12-07-2008 | - Website - |