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 / 229838
Accepted
Devdatta Tengshe
Devdatta Tengshe
Asked: 2019-02-16 03:15:53 +0800 CST2019-02-16 03:15:53 +0800 CST 2019-02-16 03:15:53 +0800 CST

Como evitar consultas pesadas em um banco de dados, afetando o desempenho de outros bancos de dados no mesmo servidor?

  • 772

Eu tenho um servidor linux rodando apenas Postgres com PostGIS Extension. Existem vários bancos de dados nesta instância do Servidor Postrges.

Um dos bancos de dados tem algumas consultas computacionalmente intensivas executadas nele de tempos em tempos. Isso faz com que a utilização da CPU salte até 100% e o servidor geralmente não responde às solicitações.

Como evitar consultas pesadas em um banco de dados, afetando o desempenho de outros bancos de dados no mesmo servidor? Como posso garantir que outros bancos de dados nessa instância PostGres ainda respondam às solicitações? Existe uma maneira de evitar que um banco de dados consuma todos os ciclos da CPU?

postgresql performance
  • 1 1 respostas
  • 883 Views

1 respostas

  • Voted
  1. Best Answer
    ypercubeᵀᴹ
    2019-02-16T03:30:48+08:002019-02-16T03:30:48+08:00

    Vou citar algumas coisas do wiki do Postgres, Priorities :

    Priorizando usuários, consultas ou bancos de dados

    O PostgreSQL não possui recursos para limitar quais recursos um determinado usuário, consulta ou banco de dados consome ou, de forma correspondente, para definir prioridades de modo que um usuário/consulta/banco de dados obtenha mais recursos do que outros. É necessário usar os recursos do sistema operacional para alcançar a priorização limitada possível.

    Existem três recursos principais pelos quais os usuários, consultas e bancos de dados do PostgreSQL irão competir:

    Memória
    CPU
    Disco E/S

    Destes, a E/S de disco geralmente é um gargalo para aplicativos de banco de dados , mas nem sempre é esse o caso. Alguns designs e consultas de esquema são particularmente pesados ​​para a CPU. Outros realmente se beneficiam de ter muita memória para trabalhar, normalmente para classificação.

    Considere esta parte em particular:

    As prioridades são realmente o problema?

    Antes de se esforçar muito para priorizar suas consultas/usuários/bancos de dados, vale a pena otimizar suas consultas e ajustar seu banco de dados . Você pode descobrir que pode obter um desempenho perfeitamente aceitável sem brincar com prioridades ou tomar medidas extremas, usando técnicas como:

    • Melhorando suas consultas
    • Sintonize o autovacuum para reduzir o inchaço
    • Geralmente polindo o desempenho do seu cluster
    • Evitando o uso de VACUUM FULL. Isso consome muita memória e demora uma eternidade para escanear, desperdiçando largura de banda de E/S de disco. Consulte a página wiki em VACUUM FULLpara obter mais informações.

    E especialmente este:

    A CPU é realmente o gargalo?

    As pessoas geralmente reclamam de CPU atrelada (100%) e assumem que essa é a causa da lentidão do banco de dados. Esse não é necessariamente o caso - um sistema pode mostrar um uso aparente de 100% da CPU , mas na verdade ser limitado principalmente pela largura de banda de E/S . Considere o teste a seguir, que inicia 20 processos `dd', cada um lendo um bloco diferente de 1 GB do disco rígido (aqui: /dev/md0) em deslocamentos de 1 GB (execute o teste como root).

    ... teste segue ...

    ... o que pode ser confundido com uma CPU ocupada , mas na verdade é uma carga causada por E/S de disco . O principal sinal de alerta aqui é a presença de uma alta porcentagem de CPU iowait ("%wa"), indicando que grande parte da carga aparente é realmente causada por atrasos no subsistema de E/S. A maioria dos processos `dd' estão no estado 'D' - ou seja, suspensão ininterrupta em uma chamada de sistema - e se você marcar "wchan" com "ps" verá que eles estão dormindo esperando por E/S.

    Em vez de presumir que a contenção da CPU é o problema , é uma boa ideia usar as Ferramentas de Análise de Desempenho disponíveis para ter uma ideia melhor de onde realmente estão os gargalos do sistema.


    Então, eu diria que você deve:

    • primeiro, siga os conselhos acima, execute mais alguns testes de análise e certifique-se de que o gargalo seja do banco de dados que você suspeita e que seja causado por contenção de CPU (o que pode ser o caso se suas consultas forem tão caras computacionalmente). Ou pode ser parcialmente verdadeiro e há contenção de CPU, mas também espaço para melhorias de consulta.

    • siga o conselho do 2º parágrafo acima (melhorar as consultas, geralmente polir o cluster, verificar e otimizar as configurações de vácuo e autovacuidade.)
      Você também deve otimizar as várias configurações de memória (principalmente work_mem) com valores diferentes para os clientes que se conectam a esse banco de dados que tem carga de trabalho diferente.

    • Se depois de tudo isso, o problema persistir e ainda houver contenção de E/S de CPU ou disco ou ambos, existem algumas opções descritas na página de Prioridades vinculadas que você pode tentar ("renice", priorizar extensão etc.).

    • Uma das sugestões lá (que certamente vale a pena considerar) é separar seus bancos de dados em 2 clusters (instâncias), um para o db computacionalmente caro e outro para todo o resto, com a carga de trabalho usual. Consulte Priorizando bancos de dados separando em vários clusters , onde menciona a provável opção de limpeza:

    • Máquinas separadas

      Sua melhor opção é separar instâncias do PostgreSQL em diferentes máquinas físicas. Eles não vão competir por recursos.

    • 4

relate perguntas

  • Sequências Biológicas do UniProt no PostgreSQL

  • 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?

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

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