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 / 84329
Accepted
RayofCommand
RayofCommand
Asked: 2014-12-05 08:16:00 +0800 CST2014-12-05 08:16:00 +0800 CST 2014-12-05 08:16:00 +0800 CST

SQL Server 2012 Standard Edition usando mais de 64 GB de memória, por que e como?

  • 772

Coloquei o SQL Server 2012 Standard em uma máquina virtual (VMWare) que possui aproximadamente 98 GB de memória.

Agora verifiquei a consulta abaixo sobre quanta memória é usada pelo SQL Server.

Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 

E veja que ele já comeu 81 GB de memória e a memória máxima está definida para ~ 90 GB.

Usando:

select (physical_memory_in_use_kb/1024)Memory_usedby_Sqlserver_MB,      
(locked_page_allocations_kb/1024 )Locked_pages_used_Sqlserver_MB, 
(total_virtual_address_space_kb/1024 ) VAS from sys. dm_os_process_memory

O SQL Server 2012 Standard deve suportar apenas 64 GB de memória.

Por que meu SQL Server come mais do que pode? Ou a informação está incorreta?

Qualquer ideia? Isso está relacionado a uma máquina virtual usando memória virtual?

Não sei se o driver de balão está ativado no VM Host...

Se precisar de mais alguma informação eu adiciono.

sql-server-2012 memory
  • 3 3 respostas
  • 9813 Views

3 respostas

  • Voted
  1. Best Answer
    Aaron Bertrand
    2014-12-06T07:13:21+08:002014-12-06T07:13:21+08:00

    O limite de 64 GB (e 128 GB em 2014) se aplica apenas ao buffer pool. O artigo da KB " Configuração de memória e considerações de dimensionamento no SQL Server 2012 " diz:

    A partir do SQL Server 2012, esses limites de memória são aplicados apenas para o cache do banco de dados (buffer pool).

    E como todos sabemos, max server memorytambém não controla toda a memória do SQL Server. A documentação oficial está em processo de atualização para fornecer as seguintes orientações sobre isso (essa redação exata foi fornecida por Bob Ward):

    A configuração no nível do servidor max server memorycontrola 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 sys.dm_os_memory_clerks). A memória para pilhas de threads, heaps de memória, 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.

    Portanto, é bastante provável que você veja sqlservr.exeusar mais de 64 GB de memória se houver alocação significativa para qualquer coisa que não seja o buffer pool, mesmo na Standard Edition (e mais de 1 GB, mesmo na Express Edition).

    Se você quiser impedir que o SQL Server use mais de 64 GB de memória, precisará definir max server memoryalgo menor que 64 GB (talvez seja necessário experimentar aqui para encontrar a combinação certa, mas entenda que a memória do pool sem buffer pode flutuar , então você ainda pode ver coisas que se aventuram além do limite de licenciamento e do limite configurado).

    Ou , você pode simplesmente deixá-lo como está e agradecer por poder usar até 64 GB para buffer pool e muito mais para outras coisas que poderiam reduzir o uso do buffer pool se o limite de 64 GB fosse um limite rígido imposto.


    Você pode ver como a memória é distribuída de várias maneiras. Entre os secretários de memória, você pode usar:

    SELECT [type], mem_MB = pages_kb/1024
     FROM sys.dm_os_memory_clerks
     ORDER BY pages_kb DESC;
    

    Na maioria dos casos, o principal consumidor será MEMORYCLERK_SQLBUFFERPOOL, mas você também deve ver um volume significativo de CACHESTORE_*entradas. Você pode agrupá-lo em um nível superior usando algo como:

    SELECT [type] = COALESCE(SUBSTRING([type],1,CHARINDEX('_',[type])-1),'-- total'),
      SUM(pages_kb/1024)
    FROM sys.dm_os_memory_clerks
    GROUP BY GROUPING SETS((),SUBSTRING([type],1,CHARINDEX('_',[type])-1));
    

    Para ver como a memória do cache/armazenamento do usuário é distribuída:

    SELECT [type], name, 
     mem_MB = CONVERT(DECIMAL(19,2),pages_kb/1024.0) 
     FROM sys.dm_os_memory_cache_counters
     ORDER BY pages_kb DESC;
    

    Atualmente, em minha humilde VM, a consulta em sua pergunta (fornecida por @Shanky) diz que o SQL Server está usando 2.085 MB de memória (com 2.004 MB bloqueados na memória). No entanto, minha consulta acima contra os funcionários de memória DMV diz que a memória total usada é de apenas 1.793 MB.

    A consulta na resposta de Chris diz que o total é 2.054 MB, com uma meta de 3.072 MB (isso ocorre porque defini explicitamente max server memorycomo 3.072 MB).

    Então, onde estão os ~ 200 MB extras? Quem sabe. (Também posso ver essa diferença se comparar total server memorycom Process > sqlservr > Private Byteso Monitor de desempenho.) Eu poderia começar a analisar a saída de DBCC MEMORYSTATUSpara tentar juntá-la (e Tim Chapman escreveu alguns PowerShell para tornar isso mais fácil ), mas vale a pena? Toda a memória é relatada lá? Não tenho 100% de certeza de que seja (ou que você deva usar a saída em um sistema NUMA), ou que qualquer DMV possa fornecer uma imagem totalmente precisa de toda a memória usada pelo SQL Server. Eu também não acredito que todos os tipos de secretários de memória estejam documentados em qualquer lugar - então, mesmo que isso forneça uma imagem completa, você ainda pode estar coçando a cabeça sobre o que os resultados realmente significam.

    O Gerenciador de Tarefas, entretanto, diz que sqlservr.exeestá usando apenas 42 MB. Faça o que fizer, pare de usar o Gerenciador de Tarefas. Para qualquer coisa, realmente. Sei que você removeu esse detalhe de sua pergunta em sua edição mais recente, mas não posso enfatizar o suficiente como é inútil para mostrar o uso de memória do SQL Server.

    • 13
  2. Kris Gruttemeyer
    2014-12-05T08:28:00+08:002014-12-05T08:28:00+08:00

    De acordo com a resposta de Aaron Bertrand ( veja rapidamente quanta RAM está alocada para o SQL Server? ). O Gerenciador de Tarefas não deve ser usado para verificar quanta memória o SQL está realmente usando.

    Prefiro usar a seguinte consulta (novamente, obrigado Aaron):

    SELECT object_name, cntr_value
      FROM sys.dm_os_performance_counters
      WHERE counter_name IN ('Total Server Memory (KB)', 'Target Server Memory (KB)');
    

    Como alternativa, usar DBCC MEMORYSTATUSfornecerá essas informações (assim como uma série de informações adicionais).

    • 3
  3. realmerl
    2016-09-22T06:42:32+08:002016-09-22T06:42:32+08:00

    Acho que esta consulta me dá uma memória real total mais precisa em uso -

    set transaction isolation level read uncommitted
    select 
        @@Servername,
        osn.node_state_desc, 
    (
    select physical_memory_in_use_kb/(1024) as SQLMEMORYINUSE_MB
    from sys.dm_os_process_memory
    ) + (omn.locked_page_allocations_kb / 1024.0 ) as Tot
    from sys.dm_os_memory_nodes omn
    inner join sys.dm_os_nodes osn on (omn.memory_node_id = osn.memory_node_id)
    where osn.node_state_desc <> 'ONLINE DAC'
    and osn.node_id = 1
    

    Eu aprecio o post é antigo, mas isso pode ser útil.

    Eu tenho uma instância de 2012 std, que está usando 120 Gb de RAM no total

    • 0

relate perguntas

  • Estou usando o mecanismo de armazenamento MEMORY, mas o MySQL ainda grava em meu disco... Por quê?

  • PostgreSQL: Força dados na memória

  • Por que as sequências Denali devem ter um desempenho melhor do que as colunas de identidade?

  • O SQL Server não deveria oferecer suporte a RANGE?

  • O que é SQL Server "Denali"? O que há de novo?

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