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 / 113127
Accepted
msgisme
msgisme
Asked: 2015-09-04 09:48:15 +0800 CST2015-09-04 09:48:15 +0800 CST 2015-09-04 09:48:15 +0800 CST

Por que dm_os_memory_clerks tem valores MEMORYCLERK_SQLCLR em um nó NUMA?

  • 772

Estamos usando um procedimento armazenado SQLCLR para ativação do agente de serviços e desejo monitorar a memória usada pelo código CLR. Olhando para sys.dm_os_memory_clerks, vejo que apenas o nó NUMA 1 tem páginas associadas ao MEMORYCLERK_SQLCLRtipo. O servidor tem duas CPUs de 8 núcleos e está executando o SQL 2014 CU6.

Isso é esperado? Ou devo ver a memória usada em ambos os nós, como faço com MEMORYCLERK_SQLBUFFERPOOL?

Consulta:

SELECT DOMC.memory_node_id
    , DOMC.pages_kb
    , DOMC.virtual_memory_reserved_kb
    , DOMC.virtual_memory_committed_kb 
FROM sys.dm_os_memory_clerks DOMC where type = 'MEMORYCLERK_SQLCLR'

Resultados:

memory_node_id pages_kb             virtual_memory_reserved_kb virtual_memory_committed_kb
-------------- -------------------- -------------------------- ---------------------------
0              88232                12607744                   1408652
1              0                    0                          0
64             0                    0                          0
sql-server sql-server-2014
  • 1 1 respostas
  • 2073 Views

1 respostas

  • Voted
  1. Best Answer
    Solomon Rutzky
    2015-09-04T23:20:26+08:002015-09-04T23:20:26+08:00

    Infelizmente, não há muitas informações disponíveis sobre as especificidades do uso da memória SQLCLR. No entanto, achei os dois recursos a seguir úteis como ponto de partida:

    • Uso de memória no SQL CLR
    • SQL Server: esclarecendo as informações de configuração NUMA

    A partir deles e examinando vários DMVs e as páginas do MSDN explicando (bem, não é muito explicativo, mas tecnicamente é mais do que nada) como esses DMVs meio que funcionam, reuni as consultas mostradas abaixo. Ao executá-los em alguns sistemas diferentes, parece que a alocação de memória SQLCLR está concentrada em um memory_node_id, mas ainda há alguma alocação em outros nós, pelo menos em termos de Proc Cache. Portanto, por enquanto, a menos que alguém tenha evidências ou informações em contrário, o que você está vivenciando é "esperado".


    Esta consulta informa as informações básicas:

    SELECT domc.*
    FROM   sys.dm_os_memory_clerks domc
    WHERE  domc.[type] LIKE '%CLR%'
    AND    domc.[memory_node_id] <> 64;
    

    Você notará que, ao não especificar um em particular [type], há mais alguns que podem ocupar um pouco da memória. Total de 4 tipos que eu vi são:

    • MEMORYCLERK_SQLCLR,
    • MEMORYCLERK_SQLCLRASSEMBLY
    • CACHESTORE_CLRPROC
    • CACHESTORE_CLRUDTINFO

    Se você está se perguntando por que estou filtrando [memory_node_id]64, execute isto:

    SELECT * FROM sys.dm_os_nodes;
    

    e você verá que node_id de 64 é DAC (Conexão Dedicada do Administrador).

    O seguinte lhe dará os totais para os dois campos importantes. Observe que os campos foram alterados no SQL Server 2012, então você precisa escolher aquele que é apropriado para a versão do SQL Server em que está sendo usado:

    -- SQL Server 2012, 2014, and 2016:
    SELECT SUM(domc.pages_kb) AS [TotalPagesKb],
           SUM(domc.virtual_memory_committed_kb) AS [TotalVirtualMemoryKb]
    FROM   sys.dm_os_memory_clerks domc
    WHERE  domc.[type] LIKE '%CLR%'
    AND    domc.[memory_node_id] <> 64;
    
    -- SQL Server 2005, 2008, and 2008 R2:
    SELECT SUM(domc.single_pages_kb + domc.multi_pages_kb) AS [TotalPagesKb],
           SUM(domc.virtual_memory_committed_kb) AS [TotalVirtualMemoryKb]
    FROM   sys.dm_os_memory_clerks domc
    WHERE  domc.[type] LIKE '%CLR%'
    AND    domc.[memory_node_id] <> 64;
    

    A próxima consulta mostra a relação entre "memory_clerks" e "memory_objects":

    SELECT domc.*, N' █ ' AS [ █ ], domo.*
    FROM   sys.dm_os_memory_clerks domc
    LEFT JOIN sys.dm_os_memory_objects domo
            ON domo.page_allocator_address = domc.page_allocator_address
    WHERE  domc.[type] LIKE N'%CLR%'
    AND    domc.[memory_node_id] <> 64;
    

    As consultas a seguir são uma versão mais focada da primeira consulta (e mais parecida com a consulta na pergunta), mas os campos mudaram no SQL Server 2012, então você precisa escolher aquele que é apropriado para a versão do SQL Server que está sendo usado em:

    -- SQL Server 2012, 2014, and 2016:
    SELECT domc.memory_node_id,
           domc.[type],
           domc.pages_kb,
           domc.virtual_memory_committed_kb
    FROM   sys.dm_os_memory_clerks domc
    WHERE  domc.[type] LIKE '%CLR%'
    AND    domc.[memory_node_id] <> 64;
    
    -- SQL Server 2005, 2008, and 2008 R2:
    SELECT domc.memory_node_id,
           domc.[type],
           (domc.single_pages_kb + domc.multi_pages_kb) AS [pages_kb],
           domc.virtual_memory_committed_kb
    FROM   sys.dm_os_memory_clerks domc
    WHERE  domc.[type] LIKE '%CLR%'
    AND    domc.[memory_node_id] <> 64;
    

    ATUALIZAR:

    Fiz alguns testes adicionais em um sistema de processador duplo criando 2 bancos de dados e, usando uma variável estática, carreguei 80 MB em cada um dos bancos de dados. Criei dois bancos de dados em vez de um para ver se um AppDomain tinha que ficar em um nó de memória, se poderia pelo menos colocar outro AppDomain em outro nó de memória para espalhar as coisas. Os resultados:

    • Todos os 160 MB em ambos os bancos de dados (e, portanto, em ambos os AppDomains) foram para o nó de memória 0
    • Todos os 160 MB foram para a memória virtual, não para a memória física. Foi apenas o [virtual_memory_committed_kb]campo em sys.dm_os_memory_clerksque aumentou. E a coluna "Tamanho do Commit" no "Gerenciador de Tarefas" também refletiu esse aumento.
    • 4

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