AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 84011
Accepted
Aaroninus
Aaroninus
Asked: 2014-12-02 08:05:43 +0800 CST2014-12-02 08:05:43 +0800 CST 2014-12-02 08:05:43 +0800 CST

É possível aumentar o limite máximo de memória do SQL Server para degradar o desempenho?

  • 772

Tanto quanto eu posso dizer, aumentar o limite máximo de memória do SQL Server não tem desvantagens, desde que haja memória suficiente para o sistema operacional e outros aplicativos.

Supondo que esse seja o caso, pode haver algum efeito prejudicial em aumentar o limite máximo de memória?

A única coisa que vi é este artigo da KB da Microsoft, que afirma:

Ao configurar a opção sp_configure de memória máxima do servidor no Microsoft SQL Server para um valor grande, você pode observar que uma determinada consulta pode ser executada lentamente. Mas se você diminuir o valor dessa opção, a mesma consulta poderá ser executada muito mais rapidamente.

mas só se aplica a versões antigas do SQL Server (<=2008).

sql-server performance
  • 2 2 respostas
  • 1469 Views

2 respostas

  • Voted
  1. LowlyDBA - John M
    2014-12-02T09:59:02+08:002014-12-02T09:59:02+08:00

    De um modo geral, não, não há efeito prejudicial de maximizar a memória depois que o sistema operacional e outros aplicativos foram contabilizados. Isso é exemplificado pelas configurações padrão do SQL Server:

    A configuração padrão para memória mínima do servidor é 0 e a configuração padrão para memória máxima do servidor é 2147483647 MB.

    Configurações de memória do SQL Server (MSDN)

    Embora essa configuração permita o redimensionamento dinâmico da memória que o SQL Server adquire, ela também mostra que não há um número "demais" (além das considerações de sistema operacional/aplicativo/versão). O SQL Server usará apenas a memória necessária, embora possa reservar mais com base nas configurações min/max. Dar a ele o máximo de acesso possível simplesmente dá a ele o espaço de que precisa para operar com eficiência.

    Como Shanky mencionou, a partir de 2012, o SQL também usa essa configuração para pilhas de threads, alocações de CLR e muito mais , o que pode ter outros efeitos em cenários específicos quando se trata de otimização de memória.

    • 2
  2. Best Answer
    Shanky
    2014-12-02T12:10:53+08:002014-12-02T12:10:53+08:00

    Antes de começar, sou defensor da FIXING MAX SERVER MEMORY sempre

    1. Abordarei primeiro as versões do SQL Server anteriores ao SQL Server 2012. Isso significa que, se você estiver usando SQL Server 2005, SQL Server 2008 e SQL Server 2008 R2 (não, não incluirei o SQL Server 2000)

    Se você estiver usando a versão do SQL Server before 2012e seu sistema operacional for o Windows Server 2008 R2 updated with the latest Service Packe, claro, o sistema for um sistema dedicado para o mecanismo de banco de dados do SQL Server, então você might not need to set max server memorypode permitir que o buffer pool do SQL Server cresça dinamicamente. Consulte este link para obter uma lista de problemas documentados de corte do conjunto de trabalho com várias edições do Windows Server.

    Se você estiver usando o SQL Server 2005 no Windows Server 2003, que não foi corrigido para o Service Pack mais recente, você pode ser vítima do corte do SQL Server pelo Windows. Este link descreve o bug.

    Existem muitos drivers de terceiros aos quais o SQL Server não oferece suporte e que podem ser carregados no espaço de endereço do SQL Server. Se você estiver usando consulta de servidor vinculado, isso pode causar vazamentos de memória.

    Considerando todos esses bugs e correções, a Microsoft recomenda limitar a memória do buffer pool do SQL Server (antes de 2012) para o valor ideal.

    Uma razão muito clássica pela qual você não deve permitir que o SQL Server aumente a memória dinamicamente:

    1. Você pode ter várias instâncias. E se alguma consulta não autorizada começar a ser executada em uma instância e começar a consumir muita memória? Todos os outros aplicativos/instâncias sofreriam por causa disso, o que tenho certeza de que você não gostaria.

    2. Considere um cluster de várias instâncias de dois nós que passa por um failover e agora ambas as instâncias estão no mesmo nó e uma começa a consumir mais memória do que a outra. O outro teria que sofrer e a instância do cluster se tornaria extremamente lenta

    3. Se você não corrigir a memória máxima do servidor, poderá ser vítima do corte do conjunto de trabalho e do sistema operacional deixar de responder.

    4. Considere um cenário em que você está executando o SQL Server Enterprise, com o SQL Server sendo executado com a conta Local System ou com uma conta que tenha o privilégio Locked Pages in Memory. Você está condenado se alguma consulta pesada for executada no sistema quando já estiver sob carga. Ele tentaria consumir toda a memória e, como o LPIM não pode ser paginado, o SQL Server tentaria cortar conforme o SQLOS solicitaria. Mas se a pressão de memória for grave, pode levar algum tempo para o SQL Server reagir e, nesse caso, os processos do sistema operacional podem ser paginados e eventualmente travar, levando a uma reinicialização do sistema operacional.

    2. A partir do SQL Server 2012

    O código de memória foi alterado para que um único gerenciador de memória seja usado para alocar memória para ambos os processos que requerem páginas de memória menores que 8 KB e para processos que requerem mais de 8 KB. A memória máxima do servidor controla a alocação de memória do SQL Server, incluindo buffer pool, memória de compilação, todos os caches, concessões de memória qe, memória do gerenciador de bloqueio e memória CLR (basicamente qualquer funcionário encontrado em dm_os_memory_clerks). A memória para pilhas de threads, heaps, provedores de servidor vinculados diferentes do SQL Server ou qualquer memória alocada por uma DLL não SQL Server não é controlada pela memória máxima do servidor.

    Então, novamente, como eu disse, todos os processos carregados no espaço de endereço do SQL Server que não são monitorados pelos funcionários da memória ainda levariam a memória para fora da memória máxima do servidor. Portanto, novamente, você deve, como prática recomendada, definir o valor ideal para a memória máxima do servidor.

    • 2

relate perguntas

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve