Lukepet
24-06-2011, 09:03
Salve, ho alcuni dubbi su un progetto che mi trovo a gestire e volevo da voi alcuni consigli in base alle vostre esperienze. Vi spiego subito la situazione.
Ho un server con 12Gb di RAM e sistema operativo Windows Server 2008 R2; su tale server risiede un'applicazione di gestione delle vendite sviluppata in WPF e che utilizza NHibernate (2.1.2) per la persistenza dei dati (il DBMS è SQL Server 2008). Al server accedono contemporaneamente via VPN dai 30 ai 40 utenti, che utilizzano l'applicazione in Desktop Remoto.
In questi giorni stavo monitorando il consumo di risorse nei momenti in cui lavorano tutti all'applicazione ed ho visto che per ogni utente la mia applicazione occupa dai 300 ai 500 mb; tale situazione sembra ridurre la memoria disponibile per SQL Server (che inizialmente ho visto essere intorno ai 2Gb, mentre nei momenti di massimo carico l'ho vista scendere a 400mb) e mi chiedevo se questo potesse incidere sulle performance nelle operazioni di lettura/scrittura dati nel db. Inoltre ho visto che praticamente il sistema raggiunge quasi 100% della memoria in uso ed ho paura che questa situazione "limite" possa portare ad ulteriori problematiche.
Ho iniziato ad analizzare la mia applicazione per rendermi conto di quale possa essere la causa di tale consumo di memoria e mi sono reso conto che in parte ciò è dovuto alla cache di NHibernate. Nell'applicazione infatti sono presenti delle manutenzioni che trattano una gran mole di dati e, nel momento in cui carico i dati, la memoria in uso per il singolo processo cresce di molto. La cosa che non mi convince è che se chiudo la form di manutenzione di tali dati la memoria rimane comunque allocata (e credo che ciò sia dovuto al fatto che i dati rimangono comunque nella cache di NHibernate), per poi essere riciclata automaticamente quando ci sono nuove richieste.
Alla luce di ciò le mie domande sono...
In una situazione del genere mi devo preoccupare del fatto che la memoria in uso del sistema sia quasi il 100%? o sarebbe oppurtuno estendere la RAM?
E' normale che la mia applicazione non rilasci immediatamente la memoria allocata in seguito al caricamento dei dati? Il riciclo della memoria è gestito automaticamente del sistema?
Sarebbe opportuno che nella configurazione di SQL Server prevedessi un limite minimo di memoria assegnata al processo?
Come faccio a rendermi conto se sono effettivamente in una situazione di criticità?
In base alle vostra esperienze personali avete dei consigli da darmi in merito?
Vi ringrazio in anticipo per informazione.
Ho un server con 12Gb di RAM e sistema operativo Windows Server 2008 R2; su tale server risiede un'applicazione di gestione delle vendite sviluppata in WPF e che utilizza NHibernate (2.1.2) per la persistenza dei dati (il DBMS è SQL Server 2008). Al server accedono contemporaneamente via VPN dai 30 ai 40 utenti, che utilizzano l'applicazione in Desktop Remoto.
In questi giorni stavo monitorando il consumo di risorse nei momenti in cui lavorano tutti all'applicazione ed ho visto che per ogni utente la mia applicazione occupa dai 300 ai 500 mb; tale situazione sembra ridurre la memoria disponibile per SQL Server (che inizialmente ho visto essere intorno ai 2Gb, mentre nei momenti di massimo carico l'ho vista scendere a 400mb) e mi chiedevo se questo potesse incidere sulle performance nelle operazioni di lettura/scrittura dati nel db. Inoltre ho visto che praticamente il sistema raggiunge quasi 100% della memoria in uso ed ho paura che questa situazione "limite" possa portare ad ulteriori problematiche.
Ho iniziato ad analizzare la mia applicazione per rendermi conto di quale possa essere la causa di tale consumo di memoria e mi sono reso conto che in parte ciò è dovuto alla cache di NHibernate. Nell'applicazione infatti sono presenti delle manutenzioni che trattano una gran mole di dati e, nel momento in cui carico i dati, la memoria in uso per il singolo processo cresce di molto. La cosa che non mi convince è che se chiudo la form di manutenzione di tali dati la memoria rimane comunque allocata (e credo che ciò sia dovuto al fatto che i dati rimangono comunque nella cache di NHibernate), per poi essere riciclata automaticamente quando ci sono nuove richieste.
Alla luce di ciò le mie domande sono...
In una situazione del genere mi devo preoccupare del fatto che la memoria in uso del sistema sia quasi il 100%? o sarebbe oppurtuno estendere la RAM?
E' normale che la mia applicazione non rilasci immediatamente la memoria allocata in seguito al caricamento dei dati? Il riciclo della memoria è gestito automaticamente del sistema?
Sarebbe opportuno che nella configurazione di SQL Server prevedessi un limite minimo di memoria assegnata al processo?
Come faccio a rendermi conto se sono effettivamente in una situazione di criticità?
In base alle vostra esperienze personali avete dei consigli da darmi in merito?
Vi ringrazio in anticipo per informazione.