Il limite di memoria e CPU di SQL Server Express è per istanza?


32

Se ho 8 GB di RAM in un server ed eseguo 4 istanze di SQL Server Express, il limite di memoria totale utilizzato da SQL Server sarà 1 GB o 4 GB?

Sarebbe consigliabile eseguire più istanze come questa per consentire a ciascun database di utilizzare meglio le risorse (supponendo che il server disponga di molte risorse)?

Risposte:


27

Se ho 8 GB di RAM in un server ed eseguo 4 istanze di SQL Express, il limite di memoria totale utilizzato da SQL Server sarà 1 GB o 4 GB?

Ogni istanza può utilizzare fino a 1 GB di memoria per il pool di buffer . Ogni istanza può utilizzare un po 'più di 1 GB in totale perché non tutte le allocazioni di memoria passano attraverso il pool di buffer. Nel tuo caso, la memoria massima utilizzata dalle quattro istanze per il pool di buffer sarebbe di 4 GB.

Estratto di BOL

Per confermare, ho avviato due istanze del Motore di database di SQL Server 2008 Express, eseguito alcune attività per caricare i pool di buffer (separati), quindi ho esaminato l'utilizzo della memoria per istanza in diversi modi, ad esempio utilizzando DBCC MEMORYSTATUS o contando il numero di buffer usando il DMV sys.dm_os_buffer_descriptors .

I seguenti numeri di utilizzo della memoria fisica sono stati ottenuti utilizzando query simultanee sul sistema DMV sys.dm_os_process_memory su ciascuna istanza del motore di database:

SELECT 
    dopm.physical_memory_in_use_kb 
FROM sys.dm_os_process_memory AS dopm;

Produzione:

╔═══════════╦═══════════╗
 Instance1  Instance2 
╠═══════════╬═══════════╣
   1102872    1059812 
╚═══════════╩═══════════╝

Ognuno di questi è leggermente superiore a 1 GB in quanto l'utilizzo della memoria fisica totale include più di un semplice utilizzo del pool di buffer, come menzionato in precedenza.

Sarebbe consigliabile eseguire più istanze come questa per consentire a ciascun database di utilizzare meglio le risorse (supponendo che il server disponga di molte risorse)?

Se i database su ciascuna istanza sono funzionalmente indipendenti, è almeno fattibile eseguire più istanze di Express in questo modo, anche se è necessario prestare molta attenzione alla configurazione e la manutenzione potrebbe essere resa più complessa.

Potresti ricevere un servizio migliore utilizzando un'altra edizione, come la Developer Edition completa (e molto economica), se l'utilizzo previsto corrisponde alla licenza). Dovresti dire molto di più sulle circostanze per ottenere una risposta chiara su questo punto.


3
Da notare anche per il lettore astuto: SQL Server Database Enginesignifica A Single Instance. Ogni volta che devi cambiare il server di dialogo di connessione a cui ti stai connettendo (es. localhost\devVs localhost\test) che è una nuova "Istanza" o un nuovo "Motore". Ho pensato di chiarirlo.
jcolebrand

7

Ogni istanza conta separatamente in quanto ha un processo separato.


1
Presumo che tu sia certo che il limitatore non sia applicato a tutti i processi allora?

-8

In SQL Express, il motore di database può consumare solo 1 GB di RAM e qualsiasi DB non può essere maggiore di 10 GB.

Quindi, 4 istanze dovrebbero comunque condividere quella RAM da 1 GB.

Puoi saperne di più su http://msdn.microsoft.com/en-us/library/cc645993(v=SQL.110).aspx .

Una discussione simile qui su Stack Overflow afferma che questa è la risposta giusta BTW, quindi non è necessario effettuare il downgrade: https://stackoverflow.com/questions/1169634/limitations-of-sql-server-express

Questa pagina dice lo stesso, anche se si tratta di SQL Server Express 2005: http://www.edugeek.net/forums/windows-server-2000-2003/55183-sql-server-express-2005-memory-limit- per-instance.html


3
Non segue necessariamente: è 1 motore per server o per istanza?

1
OK, questo lo implica, ma è anche possibile che lo abbiano perso sulla linea del limite di memoria.

1
Solo perché è su Internet, deve essere vero. Non avrebbero mai lasciato che qualcosa di sbagliato fosse su Internet. ~ Detto questo per dire che il problema qui è che ci deve essere un processo di gestione o qualcosa inserito nel sistema operativo al solo scopo di limitare per sempre tutto l'Express Express. Non penso davvero che sia successo (AKA assolutamente non è successo, in base al fatto che respiro ossigeno e posso seguire la logica molto bene), quindi il fatto è che il processo stesso gestisce la quantità di RAM Usato.
jcolebrand

2
Chiedere alle persone di rimuovere i voti negativi su quella che è naturalmente una cattiva risposta è improbabile che ti dia voti, indipendentemente dalla fonte che citi. Se vuoi davvero citare l'origine, carica diverse istanze e mostra il loro carico effettivo in memoria. Questo è l'unico modo per saperlo con certezza. O quello, oppure mostraci il codice Microsoft che regola il comportamento di SQL Express. È sempre una gestione per istanza, perché ogni servizio è autonomo dall'alto verso il basso. Tutti i servizi di gestione funzionano su porte.
jcolebrand

2
Maximum memory utilized (SQL Server Database Engine)Notate come usano la stessa terminologia lì come fanno sulla linea: Maximum Compute Capacity Used by a Single Instance (SQL Server Database Engine)1(per quelli che giocano in casa, il punto è che sono la stessa misura) msdn.microsoft.com/en-us/library/… e anch'io amo come la risposta su SO a cui era collegata sia SBAGLIATA SBAGLIATA SBAGLIATA. Inizia con "1 core o 4 socket", gli editor non possono nemmeno copiare e incollare correttamente.
jcolebrand
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.