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 / 209091
Accepted
Sybil
Sybil
Asked: 2018-06-09 03:10:29 +0800 CST2018-06-09 03:10:29 +0800 CST 2018-06-09 03:10:29 +0800 CST

WARN max_connections do pt-variable-advisor - o que configurar para DBaaS?

  • 772

Nossa configuração de VM (hospedada em VMware)

# cat /proc/cpuinfo |grep "cpu cores" | awk -F: '{ num+=$2 } END{ print "cpu cores", num }'
cpu cores 32

# free -h
             total       used       free     shared    buffers     cached
Mem:           62G        23G        39G       500K       349M        10G
-/+ buffers/cache:        12G        50G
Swap:          50G         0B        50G

Recebi do pt-variable-advisor um aviso sobre max_connections:

pt-variable-advisor h=localhost,u=root,p=Quule0juqu7aifohvo2Ahratit --socket /var/vcap/sys/run/mysql/mysqld.sock
(...)
# WARN max_connections: If the server ever really has more than a thousand threads running, then the system is likely to spend more time scheduling threads than really doing useful work.
(...)

Por quê? Algum detalhe?

Configuração em my.cnf

max_connections                 = 15360

configurações do cluster prd db (MariaDB 10.1.xe Galera)

MariaDB [(none)]> SHOW STATUS WHERE `variable_name` = 'Threads_connected';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 718   |
+-------------------+-------+
1 row in set (0.01 sec)

MariaDB [(none)]> SHOW STATUS WHERE `variable_name` = 'Max_used_connections';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 924   |
+----------------------+-------+
1 row in set (0.02 sec)

Encontrei um manual do MySQL e uma pergunta semelhante (muito) antiga .

O valor padrão é 151 para melhorar o desempenho

O número de conexões permitidas é controlado pela variável de sistema max_connections. O valor padrão é 151 para melhorar o desempenho quando o MySQL é usado com o servidor da Web Apache. (Anteriormente, o padrão era 100.) Se você precisar dar suporte a mais conexões, defina um valor maior para essa variável.

e

O número máximo de conexões que o MySQL suporta depende da qualidade da biblioteca de threads em uma determinada plataforma, da quantidade de RAM disponível, da quantidade de RAM usada para cada conexão, da carga de trabalho de cada conexão e do tempo de resposta desejado. Linux ou Solaris deve ser capaz de suportar pelo menos 500 a 1.000 conexões simultâneas rotineiramente e até 10.000 conexões

Atualmente temos 460 usuários e cada usuário pode fazer 100 max_connections. Este seria o valor máximo. O 100 max_connectionspor usuário e banco de dados é muito alto? Com o pool de conexões moderno, podemos definir isso para 20? Como devemos configurar para não correr o risco de sobrecarregar nosso servidor com troca de contexto? É possível que um aplicativo da Web use uma conexão (todas as instruções na mesma conexão)?

mariadb mariadb-10.1
  • 2 2 respostas
  • 180 Views

2 respostas

  • Voted
  1. Best Answer
    Rick James
    2018-06-09T17:34:44+08:002018-06-09T17:34:44+08:00

    Há uma diferença entre Threads_runninge Threads_connected. O primeiro implica que muitas consultas estão fazendo algo simultaneamente. Os outros estão dormindo, esperando que o usuário (ou aplicativo) apresente outra instrução SQL ao servidor.

    max_connectionsé um limite de Threads_connected. ( Max_used_connectionsé uma "marca d'água alta".)

    Um sistema ocupado típico terá apenas 1 em cada 7 threads 'conectados' realmente em execução. E Threads_connectednormalmente é muito menor que max_connections. (Como 20x)

    Mas, em tempos ruins, muitas conexões, cada uma fazendo alguma consulta lenta, leva o MySQL a tropeçar em si mesmo. A taxa de transferência (consultas/segundo) atinge o máximo e pode até diminuir; a latência passa do teto, e um DBA em pânico irá reiniciar a máquina porque ele acha que ela travou, não apenas ficou terrivelmente emaranhada.

    A solução é encontrar as consultas lentas e descobrir como acelerá-las. Ou rearquitete o aplicativo para ser mais eficiente. Ou altere o esquema e os índices. Raramente é para obter hardware maior ou alterar os ajustáveis.

    Em um servidor MySQL bem gerenciado, raramente vejo mais de 2-3 núcleos em uso. No entanto, milhares de consultas/segundo podem ser realizadas mesmo com poucos núcleos ativos.

    No DBaaS, você fica à mercê dos clientes. Qualquer um deles pode escrever um aplicativo desleixado que monopolize conexões, núcleos, E/S, largura de banda de rede, qualquer coisa.

    Considere limitar cada usuário a 10 conexões, a menos que ele explique o que precisa fazer e/ou pague mais dinheiro. Com o dinheiro extra, você pode isolá-lo em uma VM separada. Uma vez estimei, em uma loja com Apache e MySQL, que 10 threads inundariam o Apache, para o MaxChild precisava ser muito menor que o padrão. (Tínhamos páginas bastante pesadas.) Se você tem controle sobre servidores web, limite quantos threads eles têm. Isso é parar o problema antes que ele chegue ao MySQL.

    Ao colocar cada usuário em sua própria VM, você consome recursos extras, mas pode evitar que os excessos de um prejudiquem os demais.

    Aposto que muitos de seus clientes usam WordPress? Aqui está um patch de desempenho para o esquema: http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta

    • 1
  2. Vladislav Vaintroub
    2018-06-10T03:48:58+08:002018-06-10T03:48:58+08:00

    Se você quiser evitar trocas de contexto, use o pool de encadeamentos MariaDB , ignore o que o pt-advisor disser e não limite suas conexões. é claro que se você tiver muitas solicitações simultâneas longas e intensivas da CPU, isso pode não ajudar muito e, nesse caso, você precisa descobrir como corrigir as consultas longas.

    • 1

relate perguntas

  • Erro de cabeçalho do MariaDB

  • Erro 1046 Mariadb: nenhum banco de dados selecionado

  • Você ainda usa o MyISAM ou prefere o mecanismo de armazenamento Aria?

  • Como posso melhorar minha instrução SQL com resultados semanais com semana começando na quinta-feira ou em qualquer outro dia da semana?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

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