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 / 335700
Accepted
Watson
Watson
Asked: 2024-02-10 02:15:44 +0800 CST2024-02-10 02:15:44 +0800 CST 2024-02-10 02:15:44 +0800 CST

Tabelas temporárias do Mysql 8.0.34 consomem disco inteiro

  • 772
Esta questão foi migrada do Stack Overflow porque pode ser respondida no Stack Exchange dos Administradores de Banco de Dados. Migrado há 11 dias .

Executando lsof +L1

COMANDO PID USUÁRIO TIPO FD TAMANHO DO DISPOSITIVO/DESLIGADO NOME DO NÓ NLINK

mysqld 886068 mysql 521u REG 254,1 194824503296 0 29360306 /tmp/#29360306 (excluído)

Executando o mysql 3.0.34 em um cluster innodb. Aparentemente aleatoriamente, o disco é consumido com todos os 300 GB dele em uma pasta tmp, quando fica cheio, ele é liberado.

Procurando sugestões/como limitar o tamanho da tabela tmp?

SET @sys.statement_truncate_len = 1000; selecione * em sys. statements_with_temp_tables;

Rende 1 item sinalizado como disk_tmp_tables.

consulta db exec_count total_latency memory_tmp_tables disk_tmp_tables avg_tmp_tables_per_query tmp_tables_to_disk_pct first_seen last_seen resumo SELECT TABLE_NAME FROM information_schema. INNODB_BUFFER_PAGEONDE TABLE_NAME GOSTA? LIMITE?, ... 1.439,42 ms 1 1 1.100 2024-02-09 10:14:54.800889 2024-02-09 10:14:54.800889 d24fb8e96673a518f0f536b9516781644ffb7a5079f9 5490cec24804437f34a9

mysql
  • 1 1 respostas
  • 37 Views

1 respostas

  • Voted
  1. Best Answer
    Bill Karwin
    2024-02-10T02:50:46+08:002024-02-10T02:50:46+08:00

    Não há uma boa maneira de limitar o tamanho da tabela temporária no disco no MySQL.

    As tabelas temporárias são criadas automaticamente por determinadas consultas. Consulte https://dev.mysql.com/doc/refman/8.0/en/internal-temporary-tables.html para obter uma lista de tais casos.

    Não há limite prático para o tamanho de uma tabela temporária, porque qualquer consulta pode gerar um produto cartesiano enorme ou qualquer outra operação que precise de muito espaço temporário. Depende dos conjuntos de dados que você está processando e do tipo de consulta.

    Também é comum que múltiplas sessões realizem tais operações simultaneamente. Cada um deles obtém seu próprio espaço de tabela temporário e cada um desses espaços de tabela pode crescer.

    Já vi casos como o seu, em que o espaço aumenta repentinamente em centenas de gigabytes, esgotando todo o espaço restante em disco.

    O MySQL 8.0 usa um conjunto de tablespaces temporários. À medida que o otimizador cria tabelas temporárias armazenadas no disco, ele usa esses espaços de tabela e eles são expandidos conforme necessário para armazenar as tabelas temporárias de uma determinada sessão. Esses espaços de tabela são truncados quando uma sessão é desconectada, mas caso contrário, eles poderão continuar se expandindo. Leia https://dev.mysql.com/doc/refman/8.0/en/innodb-temporary-tablespace.html para obter detalhes.

    A melhor maneira que conheço de mitigar o tamanho da tabela temporária é identificar consultas que usam tabelas temporárias e tentar otimizá-las para que não criem tabelas temporárias.

    Outro método é reduzir o tamanho dos seus conjuntos de dados para que as tabelas temporárias sejam menores. Isso pode ser feito otimizando a consulta com índices, de modo que ela examine menos dados e, portanto, a quantidade de dados que precisa entrar em uma tabela temporária seja reduzida.

    Ou, em última análise, arquive os dados e remova-os do seu banco de dados.

    Outra coisa que você pode tentar é configurar o MySQL Server para que a innodb_temp_tablespaces_diropção crie espaços de tabela temporários em um volume de disco dedicado com espaço limitado. Mas isso fará com que as consultas falhem de maneira espetacular se não conseguirem criar uma grande tabela temporária necessária.

    • 1

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

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

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

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