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 / 278075
Accepted
SQLing4ever
SQLing4ever
Asked: 2020-10-15 09:07:29 +0800 CST2020-10-15 09:07:29 +0800 CST 2020-10-15 09:07:29 +0800 CST

MS SQL Server - Aumente a memória alocada

  • 772

Meu problema é que o SQL Server leva muito tempo para aumentar o uso de memória para instâncias com TB de RAM, enquanto temos esperas intermitentes de MEMORY_ALLOCATION_EXT que diminuem nosso processamento até que o SQL Server atinja sua memória máxima.

Temos instâncias clusterizadas de failover (FCI) do SQL Server 2019 Enterprise Edition com terabytes de memória nos nós. Em casos de uso usuais, permitimos apenas 1 instância do SQL Server por nó e, portanto, definimos a memória máxima do servidor perto de ~ 85% da memória no nó, mas também definimos a memória mínima do servidor relativamente baixa para o caso de failover do SQL Server para outro nó e precisa ser colocado on-line com um espaço de memória reduzido para se arrastar.

  • Estou ciente de que, se eu configurar a memória mínima mais alta, o SQL Server consumirá a memória de uma só vez. Acontece que o SQL Server não aloca a memória mínima na inicialização.
  • Estou ciente de que o SQL Server consumirá dinamicamente mais memória do sistema operacional conforme necessário e que, eventualmente, atingirá a memória máxima do servidor.
  • Estou ciente de que executar uma grande consulta ou DBCC checkdb que extrai muitos dados forçará o SQL Server a consumir mais memória do sistema operacional.

Existem outras maneiras de forçar o SQL Server a aumentar seu uso de memória rapidamente?

sql-server memory
  • 2 2 respostas
  • 956 Views

2 respostas

  • Voted
  1. David Spillett
    2020-10-15T09:20:06+08:002020-10-15T09:20:06+08:00

    O SQL Server não usará memória para o pool de buffers (seu maior uso) até precisar carregar páginas do armazenamento porque elas são referenciadas. A menos que você esteja fazendo algo estranho para tornar a alocação de memória lenta [†] , é improvável que seu atraso seja isso, mas lendo os dados que estão sendo alocados para reter. Suspeito que, ao mesmo tempo que essas esperas de alocação de memória, você tem esperas relacionadas a E/S correspondentes.

    Para forçar o SQL Server a carregar coisas na memória e, portanto, alocar memória, se disponível e necessário, acesse as coisas para que elas precisem ser carregadas. Depois de iniciar sua instância SQL, execute uma carga de trabalho somente leitura para que o conjunto de trabalho comum normal do seu aplicativo seja carregado no pool de buffers.

    Não apenas SELECT * FROM HugeTableporque isso provavelmente carregará um saldo ruim de dados (não o conjunto de trabalho principal dos aplicativos), portanto, o conjunto de trabalho principal ainda precisará ser carregado do disco/rede no próximo acesso de qualquer maneira, para que você tenha o mesmo IO atrasos. Além disso, se HugeTablefor realmente grande, o SQL Server pode ver que nem tudo caberá e não se incomodará em manter uma quantidade significativa na memória de qualquer maneira [‡].

    [†] Executando em uma VM em um host sobrecarregado, então o que parece RAM real são realmente páginas em disco?!

    [‡] Em circunstâncias normais, você não deseja que uma varredura inesperada de tabela/índice em um objeto grande elimine todo o resto da memória. Um limite de quanto é mantido de um objeto para uma consulta é uma otimização para tentar impedir que isso aconteça).

    • 5
  2. Best Answer
    Shanky
    2020-10-15T23:18:49+08:002020-10-15T23:18:49+08:00

    Estou ciente de que, se eu configurar a memória mínima mais alta, o SQL Server consumirá a memória de uma só vez.

    Não, isso não está correto, a memória mínima do servidor não tem nada a ver com a rapidez com que o SQL Server a consumirá se definida. Memória mínima do servidor significa a quantidade mínima de memória, se consumida, após a qual o SQL Server não liberará memória abaixo desse valor em condições normais, se solicitado. Quando o valor mínimo do servidor for atingido, o SQL Server não cortará seus caches e liberará memória abaixo desse valor.

    Estou ciente de que o SQL Server consumirá dinamicamente mais memória do sistema operacional conforme necessário e que, eventualmente, atingirá a memória máxima do servidor.

    Sim correto, apenas para adicionar SQl Server em determinadas condições também pode consumir memória maior que o valor especificado em max server memory. Você deve ler o Guia de Gerenciamento de Memória

    Existem outras maneiras de forçar o SQL Server a aumentar seu uso de memória rapidamente?

    Existe outra maneira que força o SQL Server a reservar mais memória durante a inicialização e isso é chamado de " páginas grandes ". Este é um recurso da edição corporativa e permite que o SQL Server reserve rapidamente alguma memória livre durante a inicialização, a conta de serviço do SQL Server também deve ter páginas bloqueadas no privilégio de memória porque a alocação de páginas grandes é feita pela função VirtualAlloc() do sistema operacional Windows e o sistema operacional deve ter mais de 8 GB de RAM, se essas condições forem atendidas automaticamente A alocação de página grande está habilitada. Uma vez ativado, aparecerá como abaixo no log de erros

    2009-06-04 12:21:08.16 Server      Large Page Extensions enabled.
    2009-06-04 12:21:08.16 Server      Large Page Granularity: 2097152
    2009-06-04 12:21:08.21 Server      Large Page Allocated: 32MB
    

    O tamanho normal da página de memória é de 4 KB no sistema X64, mas quando a página grande está habilitada, o tamanho será de 2 MB. Observe também que LargePageSupport é habilitado e usado pelo mecanismo mesmo se você não habilitar o sinalizador de rastreamento 834. Mas não é usada muita memória para isso e a memória do buffer pool não é usada, a menos que o sinalizador de rastreamento 834 esteja habilitado. Veja o blog compartilhado.

    • 1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

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

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

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