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 / 209090
Accepted
Sybil
Sybil
Asked: 2018-06-09 02:58:31 +0800 CST2018-06-09 02:58:31 +0800 CST 2018-06-09 02:58:31 +0800 CST

configurações diferentes para max_heap_table_size e tmp_table_size (MariaDB 10.1.x)

  • 772

Eu corro pt-variable-advisore tenho uma nota sobre diferentes configurações para max_heap_table_sizee tmp_table_size.

Com uma pesquisa na web encontrei apenas artigos antigos (por volta de 2007).

pt-variable-advisor h=localhost,u=root,p=Quule0juqu7aifohvo2Ahratit --socket /var/vcap/sys/run/mysql/mysqld.sock
(...)
# NOTE tmp_table_size: The effective minimum size of in-memory implicit temporary tables used internally during query execution is min(tmp_table_size, max_heap_table_size), so max_heap_table_size should be at least as large as tmp_table_size.
(...)

Nossa configuração

max_heap_table_size = 16777216
tmp_table_size = 33554432

Nós não modificamos os padrões de cf-mysql-release . Vi que o MariaDB KB recomenda outros valores padrão.

  cf_mysql.mysql.tmp_table_size:
    description: 'The maximum size (in bytes) of internal in-memory temporary tables'
    default: 33554432

  cf_mysql.mysql.max_heap_table_size:
    description: 'The maximum size (in rows) to which user-created MEMORY tables are permitted to grow'
    default: 16777216

Encontrei também Optimize MySQL tmp_table_size e verifiquei nossos valores e a configuração:

MariaDB [(none)]> show global status like 'created_tmp_disk_tables';
+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Created_tmp_disk_tables | 12727901 |
+-------------------------+----------+
1 row in set (0.01 sec)

MariaDB [(none)]> show global status like 'created_tmp_tables';
+--------------------+-----------+
| Variable_name      | Value     |
+--------------------+-----------+
| Created_tmp_tables | 115714303 |
+--------------------+-----------+
1 row in set (0.01 sec)

MariaDB [(none)]> select (12727901*100)/(115714303 + 12727901) as "Created disk tmp tables ratio" from dual;
+-------------------------------+
| Created disk tmp tables ratio |
+-------------------------------+
|                        9.9094 |
+-------------------------------+
1 row in set (0.00 sec)

Há algo errado com nossa configuração (padrão)? Não sabemos nossa carga de trabalho. Executamos cerca de 500 pequenos bancos de dados para pequenos aplicativos da web com diferentes padrões de uso.

innodb mariadb
  • 1 1 respostas
  • 5352 Views

1 respostas

  • Voted
  1. Best Answer
    Rick James
    2018-06-09T16:56:01+08:002018-06-09T16:56:01+08:00

    Resposta curta: Nenhuma delas é "errada".

    Como essas configurações são usadas?

    Existem (se não me engano) exatamente 2 usos para essas duas configurações. Eles são, como aludido em alguns dos que você citou:

    • Quando você faz CREATE TABLE ... ENGINE=MEMORYisso, é dado um limite do valor atual de max_heap_table_size. Você pode, e "deve", alterar essa configuração antes de fazer isso CREATE. Um valor muito grande pode desperdiçar RAM preciosa.

    • Quando o complexo SELECTprecisa criar uma tabela temporária, como em preparação para ORDER BY, ele primeiro tenta usar uma MEMORYtabela; se isso falhar (por qualquer um dos vários motivos), ele recorre ao uso de MyISAM. O limite do MEMORYtamanho da tabela é min(max_heap_table_size, tmp_table_size).

    Eu não acredito tmp_table_sizeé cada usado por si só.

    Se você nunca criar explicitamente uma MEMORYtabela, ter essas duas configurações iguais evita confusão e discussões como essa.

    Assim, a advertência para torná-los iguais é mais fraca do que o texto que você cita. É "sorta, kinda, shoulda", e não "você DEVE!".

    Uma perspectiva diferente: deixe-me abordar sua pergunta de outro ponto de vista.

    As tabelas tmp intra-selecionadas podem acontecer com frequência -- em todas as conexões e até várias vezes em uma única seleção. Portanto, manter tmp_table_size"baixo" é importante para evitar estourar a RAM. Eu recomendo não mais que 1% de RAM, mas isso é bastante arbitrário.

    Se, entretanto, estiver a brincar com as mesas MEMORY, precisa de controlar os seus tamanhos.

    OK, cheguei a um beco sem saída. Por que eles têm o "min(...)"? Por que não deixá-los separados?

    Não sei.

    Futuro: A discussão acima se aplica a pelo menos as versões 4.0 a 5.7 do MySQL, além de todas as versões (até agora) do MariaDB. O MySQL 8.0 usa um "mecanismo de tabela temporária", o que pode fazer com que algumas das discussões acima sejam discutíveis.

    • 1

relate perguntas

  • Qual é uma boa maneira de adicionar uma PRIMARY KEY a uma grande tabela InnoDB?

  • Como converter uma tabela de 66.862.521 linhas de MyISAM para InnoDB sem ficar offline por várias horas?

  • É prática comum misturar tabelas InnoDB e MyISAM no mesmo servidor?

  • Como posso alterar o mecanismo de armazenamento padrão no phpmyadmin?

  • 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