O limite de CPU e memória do SQL Server Express é por instância?

32

Se eu tiver 8 GB de RAM em um servidor e executar 4 instâncias do SQL Server Express, o limite total de memória usado pelo SQL Server será de 1 GB ou 4 GB?

Seria aconselhável executar várias instâncias como essa para permitir que cada banco de dados faça melhor uso dos recursos (supondo que o servidor tenha muitos recursos)?

wizzardmr42
fonte

Respostas:

27

Se eu tiver 8 GB de RAM em um servidor e executar 4 instâncias do SQL Express, o limite total de memória usado pelo SQL Server será de 1 GB ou 4 GB?

Cada instância pode usar até 1 GB de memória para o buffer pool . Cada instância pode usar um pouco mais de 1 GB no total, porque nem todas as alocações de memória passam pelo buffer pool. No seu caso, a memória máxima usada pelas quatro instâncias para o buffer pool seria de 4 GB.

Extrato de BOL

Para confirmar, iniciei duas instâncias do SQL Server 2008 Express Database Engine, realizei alguma atividade para carregar os buffer pools (separados) e examinei a utilização da memória por instância de várias maneiras, por exemplo, usando o DBCC MEMORYSTATUS ou contando o número de buffers usando a DMV sys.dm_os_buffer_descriptors .

Os números de uso de memória física abaixo foram obtidos usando consultas simultâneas no DMV do sistema sys.dm_os_process_memory em cada instância do mecanismo de banco de dados:

SELECT 
    dopm.physical_memory_in_use_kb 
FROM sys.dm_os_process_memory AS dopm;

Saída:

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

Cada uma delas tem um pouco mais de 1 GB, pois o uso total de memória física inclui mais do que apenas o uso de buffer pool, conforme mencionado anteriormente.

Seria aconselhável executar várias instâncias como essa para permitir que cada banco de dados faça melhor uso dos recursos (supondo que o servidor tenha muitos recursos)?

Se os bancos de dados em cada instância forem funcionalmente independentes, é pelo menos viável executar várias instâncias do Express dessa maneira, embora você precise prestar muita atenção à configuração e manutenção, isso pode se tornar mais complexo.

Você poderá ser melhor atendido com outra edição, como a Developer Edition, com todos os recursos (e muito barata), se o uso pretendido corresponder à licença). Você precisaria dizer muito mais sobre as circunstâncias para obter uma resposta clara sobre esse ponto.

Paul White diz que a GoFundMonica
fonte
3
Também digno de nota, para o leitor astuto: SQL Server Database Enginesignifica A Single Instance. Sempre que você precisar alterar o servidor de diálogo de conexão ao qual está se conectando (por exemplo, localhost\devvs localhost\test), isso é uma nova "Instância" ou um novo "Mecanismo". Só pensei em esclarecer isso.
jcolebrand
7

Cada instância conta separada, pois possui um processo separado.

TomTom
fonte
1
Presumo que você tenha certeza de que o limitador não é aplicado a todos os processos, então?
-8

No SQL Express, o mecanismo de banco de dados pode consumir apenas 1 GB de RAM e qualquer banco de dados não pode ser maior que 10 GB.

Portanto, 4 instâncias ainda precisam compartilhar esse 1 GB de RAM.

Você pode descobrir muito mais em http://msdn.microsoft.com/en-us/library/cc645993(v=SQL.110).aspx .

Uma discussão semelhante aqui no Stack Overflow diz que esta é a resposta certa, então não há necessidade de voto negativo: https://stackoverflow.com/questions/1169634/limitations-of-sql-server-express

Esta página diz o mesmo, mesmo que seja sobre o SQL Server Express 2005: http://www.edugeek.net/forums/windows-server-2000-2003/55183-sql-server-express-2005-memory-limit- por instância.html

Comunidade
fonte
3
Não necessariamente segue - é 1 mecanismo por servidor ou por instância?
1
OK, isso implica, mas também é possível que eles tenham perdido a linha de limite de memória.
1
Só porque está na internet, tem que ser verdade. Eles nunca deixariam algo errado estar na internet. ~ Dizendo que para dizer que o problema aqui é que deve haver um processo de gerenciamento ou algo incorporado ao sistema operacional com o único objetivo de restringir todo o SQL Express para sempre. Eu realmente não acho que isso tenha acontecido (AKA, absolutamente não aconteceu, com base no fato de que eu respiro oxigênio e posso seguir a lógica muito bem), então o fato é que o próprio processo gerencia a quantidade de RAM que está sendo usada. usava.
jcolebrand
2
É improvável que implorar às pessoas para remover votos negativos sobre o que é naturalmente uma resposta ruim, independentemente de qual fonte você citar. Se você realmente deseja citar a fonte, carregue várias instâncias e mostre a carga real na memória. Essa é a única maneira de saber com certeza. Ou mostre o código da Microsoft que governa o comportamento do SQL Express. É sempre gerenciamento por instância, porque cada serviço é independente de cima para baixo. Todos os serviços de gerenciamento funcionam através de portas.
jcolebrand
2
Maximum memory utilized (SQL Server Database Engine)Observe como eles usam a mesma terminologia existente na linha: Maximum Compute Capacity Used by a Single Instance (SQL Server Database Engine)1(para aqueles que jogam em casa, o ponto é que eles têm a mesma medida) msdn.microsoft.com/en-us/library/… e eu também adoro como a resposta no SO que foi vinculada é ERRADA ERRADA ERRADA. Comece com "1 núcleo ou 4 soquetes", os editores não podem nem copiar e colar corretamente.
jcolebrand