Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

RAM allocata per Sql-Server

352 views
Skip to first unread message

Albe V°

unread,
Apr 22, 2003, 8:29:39 AM4/22/03
to
Da un cliente ho una installazione di MSDE1.0 SP4 su W2k Srv SP3.

Sulla stessa macchina, girano circa 7 servizi NT che reperiscono
informazioni dalla rete e da periferiche varie, e effettuano cicli di insert
e update sul database.

Ovviamente, ogni ciclo è inserito in un Begintrans-committrans (uso ADO 2.71
e Sql-OleDb1).

All'avvio di Sql-Server, la RAM allocata è circa 66MB.

Dopo alcune query 'pesanti' la RAM va a 101MB, poi sembra non muoversi più,
per quante connessioni di client di interrogazione ci possano essere.

Invece, lentamente, aumenta sempre, in corrispondenza di ciascun ciclo di
insert o update.

Tutte le transazioni sono terminate regolarmente con il relativo
committrrans.

Eppure, tempo una settimana mi ritrovo circa 500MB allocati. Riavviando
Sql-Server torno a 66MB e poi a 101MB appena qualche client inizia a
interrogare.

Effettuo un backup completo del db ogni 30'.

C'è qualche parametro di Sql-Server su cui si possa lavorare per imporre di
liberare la Ram allocata ma, a me sembra, non utilizzata?

O, quantomeno, c'è una sp che mi consenta di vedere CHI o COSA alloca tutta
questa Ram?

Ciao e grazie

Alberto


--
E non so se avrò gli amici a farmi il coro,
o se avrò soltanto volti sconosciuti,
canterò le mie canzoni a tutti loro
e alla fine della strada
potrò dire che i miei giorni li ho vissuti...


Luca Bianchi

unread,
Apr 22, 2003, 9:21:58 AM4/22/03
to
"Albe V°" <vaccariTO...@hotmail.com> wrote in message
news:TAapa.57180$iy5.1...@twister2.libero.it...

> Da un cliente ho una installazione di MSDE1.0 SP4 su W2k Srv SP3.
>
> Sulla stessa macchina, girano circa 7 servizi NT che reperiscono
> informazioni dalla rete e da periferiche varie, e effettuano cicli di
insert
> e update sul database.
>
> Ovviamente, ogni ciclo è inserito in un Begintrans-committrans (uso ADO
2.71
> e Sql-OleDb1).
>
> All'avvio di Sql-Server, la RAM allocata è circa 66MB.

Appena avviato il servizio non ci sono pagine dati o piani di esecuzione in
memoria se non quelli delle stored procedure di avvio e/o che eseguono i
controlli preliminari

> Dopo alcune query 'pesanti' la RAM va a 101MB, poi sembra non muoversi
più,
> per quante connessioni di client di interrogazione ci possano essere.

La quantità di memoria utilizzata aumenta proporzionalmente alle pagine
caricate e ai piani generati

> Invece, lentamente, aumenta sempre, in corrispondenza di ciascun ciclo di
> insert o update.

I piani vengono scaricati dalla memoria solo se divengono obsoleti e non più
utilizzabili e se vengono richieste risorse al sistema

> Tutte le transazioni sono terminate regolarmente con il relativo
> committrrans.

La chiusura di una transazione non causa il rilascio delle pagine di
memoria. La chiusura di una transazione (commit o rollback) rilascia
semplicemente i blocchi sulle risorse coinvolte ma non scarica la memoria
poichè le pagine dati già in RAM possono essere utilizzate da altre
transazioni senza che sia necessario caricare dal disco gli stessi dati.

> Eppure, tempo una settimana mi ritrovo circa 500MB allocati. Riavviando
> Sql-Server torno a 66MB e poi a 101MB appena qualche client inizia a
> interrogare.

Anche questo è un comportamento del tutto normale. Con il sistema
configurato per consentire l'allocazione dinamica della memoria, SQL Server
tende a rilasciare la RAM solo se vi è una richiesta da parte del sistema
operativo.

> Effettuo un backup completo del db ogni 30'.

Nessuna incidenza sull'allocaziona memoria.

> C'è qualche parametro di Sql-Server su cui si possa lavorare per imporre
di
> liberare la Ram allocata ma, a me sembra, non utilizzata?
> O, quantomeno, c'è una sp che mi consenta di vedere CHI o COSA alloca
tutta
> questa Ram?

Se si tratta di una macchina dedicata a SQL Server ti suggerisco di lasciare
al sistema la gestione dinamica della memoria. Se invece sulla macchina
convivono altre applicazioni puoi limitare la quantità di memoria
utilizzabile da SQL Server configurando le opzioni "min server memory" e
"max server memory" della stored procedure sp_configure oppure accedendo in
EM alle proprietà del server (click con il tasto destro del mouse sul nome
del server -> Properties), vai nel tab Memory e configuri la quantità minima
e massima utilizzabile dall'istanza di SQL Server.
Esistono poi dei comandi DBCC che permettono di liberare la cache delle
procedure (DBCC FREEPROCCACHE e DBCC FLUSHPROCINDB) o che mostrano
l'utilizzo della memoria da parte di SQL Server (DBCC MEMORYSTATUS e DBCC
PROCCACHE) ma lo scopo di questi comandi è rivolto all'utilizzo in ambienti
di test per forzare la ricompilazione di un piano di esecuzione per evitare
che venga riutilizzato un piano già presente falsando quindi una
misurazione.

> Ciao e grazie
>
> Alberto
>


Ciao...

--
Luca Bianchi
Microsoft MVP - SQL Server

Albe V°

unread,
Apr 22, 2003, 9:59:20 AM4/22/03
to
Luca Bianchi wrote:
> Se si tratta di una macchina dedicata a SQL Server ti suggerisco di
> lasciare al sistema la gestione dinamica della memoria.

Ti ringrazio della lunga serie di spiegazioni.

Il mio problema non è l'utilizzo di RAM in sè (il server è dedicato a
Sql-Server e a una serie di servizi appartenenti alla stessa logica
applicativa, che però restano nell'ambito di un centinaio di MB di RAM, e
non si muovono da lì).

Il mio timore era che la RAM allocata potesse continuare a crescere, come ha
fatto nella prima settimana, indefinitamente, fino a raggiungere il limite
del server di 2GB.

Se mi dici che tenderà a stabilizzarsi, lascerò andare la cosa. Magari la
terrò monitorata. Se supererà il GB, eventualmente analizzerò altre strade.

Ciao e grazie

Alberto


Luca Bianchi

unread,
Apr 22, 2003, 10:47:35 AM4/22/03
to
"Albe V°" <vaccariTO...@hotmail.com> wrote in message
news:YUbpa.57431$iy5.1...@twister2.libero.it...

> Luca Bianchi wrote:
> > Se si tratta di una macchina dedicata a SQL Server ti suggerisco di
> > lasciare al sistema la gestione dinamica della memoria.
>
> Ti ringrazio della lunga serie di spiegazioni.

Di niente...

> Il mio problema non è l'utilizzo di RAM in sè (il server è dedicato a
> Sql-Server e a una serie di servizi appartenenti alla stessa logica
> applicativa, che però restano nell'ambito di un centinaio di MB di RAM, e
> non si muovono da lì).
>
> Il mio timore era che la RAM allocata potesse continuare a crescere, come
ha
> fatto nella prima settimana, indefinitamente, fino a raggiungere il limite
> del server di 2GB.

Non è improbabile che ci arrivi...

> Se mi dici che tenderà a stabilizzarsi, lascerò andare la cosa. Magari la
> terrò monitorata. Se supererà il GB, eventualmente analizzerò altre
strade.

Non ho detto che tenderà a stabilizzarsi... Ho detto che qualora a SQL
Server necessiti altra RAM (e ce ne sia di libera) se la prenderà; a cessata
esigenza verrà rilasciata SOLO se verrà richiesta dal sistema operativo per
altre applicazioni/processi. Se si tratta di una macchina dedicata a SQL
Server che attualmente "consuma" circa 500 Mb di RAM, puoi togliergli 1 Gb e
darlo a me... :-))

0 new messages