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 / 88774
Accepted
KASQLDBA
KASQLDBA
Asked: 2015-01-08 11:00:48 +0800 CST2015-01-08 11:00:48 +0800 CST 2015-01-08 11:00:48 +0800 CST

Tabela com índice clusterizado consumindo memória máxima causando alertas PLE baixos

  • 772

Para um dos meus servidores com a configuração abaixo, estou continuamente recebendo alertas de baixo PLE, que varia entre 20-400 e uma média de 90-100 em um dia:

Servidor: SQL server 2008R2

Bancos de dados: sistema e 2 bancos de dados de usuário com tamanho máximo de banco de dados de 54 GB

RAM: 16GB

Memória máxima do sistema do servidor: 12,24 GB

Assim que recebi uma dica sobre a pressão da memória, usei o RAMMAP para encontrar o uso da memória e encontrei um processo privado usando 13,8 GB, indicando mais uma dúvida sobre a menor pressão da memória:

Analisei e descobri que um dos DB A do usuário estava usando 8 GB de RAM de acordo com o blog de Paul Randal: Além disso, analisei por um período de tempo e vi o tempdb usando uma média de 3-4 GB de RAM

Então, com uma investigação mais aprofundada, descobri que naquele banco de dados A havia uma tabela com um índice clusterizado consumindo em média 6-6,5 GB de memória. (A fragmentação não é um problema, pois foi verificada)

Agora, a partir daqui, não tenho certeza de como proceder? devo ir e criar os índices ausentes ou posso descartar os não utilizados? ou há algo mais que preciso investigar antes de tirar qualquer conclusão.

Por favor sugira!

sql-server-2008-r2 index-tuning
  • 1 1 respostas
  • 602 Views

1 respostas

  • Voted
  1. Best Answer
    Shanky
    2015-01-09T11:36:38+08:002015-01-09T11:36:38+08:00

    Em primeiro lugar, o SQL Server in picture é SQL Server 2008 R2 RTMque não é suportado pela Microsoft de forma alguma, aplique o SQL Server 2008 R2 SP3 para pelo menos obter suporte estendido

    Eu analisei e descobri que um dos DB A do usuário estava usando 8 GB de RAM

    Eu não acho que haja nenhum problema por causa disso, isso é totalmente normal olhando para isso você não pode tirar nenhuma conclusão.

    A havia uma tabela com um índice clusterizado consumindo em média 6-6,5 GB de memória

    Eu acho que esta tabela é a maior tabela de banco de dados que está consumindo a maior parte do buffer pool. Não posso dizer antecipadamente por que a tabela está mantendo tanta memória novamente you should first apply SP3 to rule out any possibility of leaks and then move with troubleshooting.

    Para um dos meus servidores com a configuração abaixo, estou continuamente recebendo alertas de baixo PLE, que varia entre 20-400 e uma média de 90-100 em um dia:

    Para um sistema com 12 G RAM, o PLE deve estar em torno de 900. Mas como você diz que está sempre em torno de 300-400, o que me faz pensar que o SQL Server tem que trabalhar duro e mover páginas frequentemente da memória para o disco devido à pressão da memória. Para confirmar a pressão de memória, você precisa confiar em outros contadores, não apenas no PLE, você pode abrir o perfmon e adicionar os seguintes contadores. Seria melhor criar um conjunto de coletores de dados para monitorar contadores de desempenho

    1. SQLServer:memory Manager--Target Server Memory: Esta é a quantidade de memória que o SQL Server está tentando adquirir.

    2. SQLServer:memory Manager--Total Server memory Esta é a memória atual que o SQL Server adquiriu.

      (Idealmente, o valor alvo deve ser menor ou igual ao Total)

    3. Leituras de página/s – Número de leituras de páginas físicas do banco de dados que são emitidas por segundo. Essa estatística exibe o número total de leituras de páginas físicas em todos os bancos de dados. Como a E/S física é cara, você pode minimizar o custo usando um cache de dados maior, índices inteligentes e consultas mais eficientes ou alterando o design do banco de dados

    4. Páginas Livres – Número total de páginas em todas as listas livres (as listas livres rastreiam todas as páginas no buffer pool que não estão atualmente alocadas para uma página de dados e, portanto, estão disponíveis para uso imediatamente). Sem dúvida esse valor deve ser alto

    5. Page Life Expectancy – Número de segundos que uma página permanecerá no buffer pool sem referências> se você tiver o sistema NUMA, analise o PLE para cada nó, conforme mencionado neste artigo

    6. Free List Stalls/sec – Número de solicitações por segundo que tiveram que esperar por uma página livre. Idealmente, as paradas devem ser tão zero ou mínimas quanto possível

    7. SQLServer:Gerenciador de Memória--Concessões de Memória Pendentes: Se você vir concessões de memória pendentes no pool de buffers, seu servidor está enfrentando problemas de memória do SQL Server e aumentar a memória seria uma boa ideia. Para concessões de memória, leia este artigo : Se você vir um valor diferente de zero de concessão de memória pendente com PLE baixo e paradas de lista livre alta, você definitivamente tem uma pressão de memória e deve considerar o fornecimento de mais RAM.

    Observação: o valor dos contadores acima deve ser coletado por pelo menos 3 a 4 horas e quando a carga no sistema for relativamente alta . Se possível, antes de coletar os valores, limpe o cache do buffer, embora eu não esteja dizendo para você fazer isso, sei que para o sistema Prod não seria possível. Se você produzisse os valores eu poderia analisar para você.

    Não tenho ideia sobre a carga de trabalho do sistema e apenas lhe dou a opção de como proceder. Você também deve analisar consultas caras. Procure um que envolva junções e classificações de hash.

    Uma consulta incorreta com muitas junções e varreduras em uma tabela grande tem toda a capacidade de trazer contadores como PLE, concessões de memória, paradas de lista gratuita para valor que fazem você acreditar na pressão de memória, sim, mas a causa é uma consulta ruim e índices ausentes e junção incorreta. Você também deve considerar isso.

    Editar:

    Da saída do coletor de dados de desempenho conforme solicitado para os contadores acima

    insira a descrição da imagem aqui

    Abaixo estão alguns pontos notáveis

    1. A memória do servidor de destino e a memória total do servidor permaneceram constantes there value were equaldurante todo o processo de coleta de dados (das 10h da manhã às 15h da tarde). o que aponta para o fato de que o mecanismo de banco de dados do SQL Server estava satisfeito com seu requisito de memória atual

    2. As concessões de memória pendentes eram always zero.

    3. Free List stalls/Sec era always zero. O que significa que nenhum pedido teve que esperar por páginas gratuitas

    4. Houve uma queda considerável no PLE das 14h15 às 15h18 e ao mesmo tempo as páginas lidas/seg estavam muito altas o que me faz acreditar que alguma consulta/processo começou depois das 14h00 o que exigia muitas páginas na memória e portanto, causando turbulência de atividade no buffer pool.

    Você precisa descobrir qual consulta está sendo executada depois das 14h e ainda estava em execução, então isso me faz pensar que há process.job começando às 14h. Este processo/trabalho/consulta está tentando ler muitas páginas, o que está fazendo com que o lazywriter libere muitas páginas porque a consulta está solicitando espaço para essas páginas

    Pode ser que essa consulta esteja faltando índice, pode ser que esteja criando um plano ruim devido a estatísticas distorcidas, pode ser que a consulta precise ser escrita para obter/ler apenas um subconjunto de dados, não dados inteiros.

    1. seria incorreto dizer que é uma pressão de memória, é apenas um processo específico que está criando um cenário que parece ser uma pressão de memória.
    • 4

relate perguntas

  • Propriedades de redução automática, criptografia e modelo de recuperação no SQL Server 2008 R2

  • A instalação autônoma do cluster do SQL Server 2008 R2 falha com o erro - "Caracteres ilegais no caminho".

  • Migração de banco de dados grande

  • plano de manutenção executado pelo agente

  • Randomizando o conteúdo da tabela e armazenando-o de volta na tabela

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