2009-05-13 7 views
11

Sto conducendo test di stress sul mio database, che è ospitato su SQL Server 2008 a 64 bit in esecuzione su una macchina a 64 bit con 10 GB di RAM.SQL Server 2008 occupa molta memoria?

Ho 400 thread. Ogni thread interroga il database ogni secondo, ma il tempo di interrogazione non richiede tempo, come dice il profiler SQL, ma dopo 18 ore SQL Server utilizza 7,2 GB di RAM e 7,2 GB di memoria virtuale.

È normale? Come posso regolare SQL Server per ripulire la memoria non utilizzata?

+0

Come stai misurando queste cifre? Tieni presente che il task manager può dare cifre fuorvianti (preferirei sempre perfmon e guardare i byte privati ​​/ virtuali) –

+0

Sto monitorando sql sever utilizzando il task manager e l'applicazione dotnet separata che utilizza la classe PerformanceCounter –

risposta

27

SQL Server è progettato per utilizzare tutta la memoria di cui può disporre, per migliorare le prestazioni memorizzando nella cache molti elementi in memoria. La raccomandazione è di utilizzare macchine dedicate per SQL Server, il che rende questo approccio perfettamente valido, poiché non si aspetta che nessun altro abbia bisogno della memoria. Quindi non dovresti preoccuparti di questo; è perfettamente normale

Detto questo, se si è su una macchina di sviluppo piuttosto che su un ambiente live, si potrebbe voler limitare la quantità di memoria per impedire che la scatola venga rilevata. In questo caso, il modo più semplice è aprire SQL Server Management Studio, fare clic con il tasto destro del mouse sul server e selezionare "Proprietà", quindi nella scheda "Memoria" è possibile impostare la memoria massima del server.

1

Uscire dalla risposta di Greg, quando si configura la memoria, provare a lasciare almeno il 10% della memoria generale libera per il sistema operativo. Se SQL gira senza controllo su una lunga query, si desidera che quell'ammortizzatore sia in grado di eseguire il remote-in e comunque amministrare la casella.

4

In realtà, c'è un piccolo trucco per ottenere quello che stai cercando. Il problema/domanda è come rendere temporaneamente "temporaneamente" disponibile la memoria di SQL Server che potrebbe non essere necessaria in modo aggressivo, quindi lasciarla riconsiderare come richiesto.

A tale scopo, eseguire il seguente script:

EXEC sys.sp_configure N'show advanced options', N'1' 

RECONFIGURE WITH OVERRIDE 

GO 

EXEC sys.sp_configure N'max server memory (MB)', N'{low water mark}' 

GO 

RECONFIGURE WITH OVERRIDE 

GO 

EXEC sys.sp_configure N'max server memory (MB)', N'{High water mark}' 

GO 

RECONFIGURE WITH OVERRIDE 

GO 

EXEC sys.sp_configure N'show advanced options', N'0' 

RECONFIGURE WITH OVERRIDE 

GO 

mettere il proprio valori per {bassa water mark} e {} high water mark (in MB).

Questo imporrà la memoria ad un importo minimo, quindi lo riaprirà subito se SQL Server lo richiede/lo vuole.

L'unica cosa che rimane da fare è programmare lo script su base periodica.

Raccomandazione:

casi in cui non è molto utilizzato SQL Server, provare a eseguire questo ogni 6 ore automaticamente. Se è molto usato, esegui una volta ogni 24 ore (diciamo nel cuore della notte o poco prima che inizi il giorno). Il tuo utilizzo varierà.