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 / 30922
Accepted
Mike B
Mike B
Asked: 2012-12-22 10:28:01 +0800 CST2012-12-22 10:28:01 +0800 CST 2012-12-22 10:28:01 +0800 CST

Existe um indicador de progresso para o progresso de OPTIMIZE TABLE?

  • 772

MySQL 5.1.4x (Windows) | InnodbGenericName

Recentemente, limpei os dados de um banco de dados mySQL (algumas centenas de milhares de linhas) e estou planejando usar

OPTIMIZE TABLE LOGTABLEFOO1,LOGTABLEFOO2,LOGTABLEFOO3;

para reduzir a pegada de espaço de dados, o espaço em branco vazio está ocupando no sistema de arquivos.

Minha preocupação é que, assim que iniciar este comando, não saberei quanto tempo levará ou em que ponto do processo. Existe alguma maneira que eu possa determinar esta informação? Tanto quanto eu sei, não há nenhum indicador de progresso.

mysql innodb
  • 3 3 respostas
  • 19527 Views

3 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2012-12-22T11:03:24+08:002012-12-22T11:03:24+08:00

    Não há nada que o MySQL tenha que indique o progresso do OPTIMIZE TABLE;.

    Você pode ter que acessar o sistema operacional usando o Windows Explorer e procurar uma tabela tmp crescente. Dica: Tabelas temporárias são tabelas MyISAM que não possuem uma extensão . frmarquivo com o nome #sql-9999.MYDe #sql-9999.MYI. Enquanto esses dois arquivos existirem, a consulta será considerada em andamento. Para saber até que ponto, seria preciso saber quantas linhas vezes o comprimento médio das linhas para estimar a porcentagem feita ou deixada a ser feita.

    MariaDB tem alguma medição de progresso para o seguinte :

    • ALTER TABLE
    • ADD INDEX
    • DROP INDEX
    • LOAD DATA INFILE
    • CHECK TABLE
    • REPAIR TABLE
    • ANALYZE TABLE
    • OPTIMIZE TABLE

    Eu discuti o assunto antes em termos de operações do MySQL

    • May 02, 2012: Como posso monitorar o andamento da importação de um arquivo .sql grande?
    • Jan 17, 2012: Adicionando um índice muito lento... existe um cmd do mysql para obter um ETA ou mostrar o progresso?

    Se você está tentando reduzir o tamanho de ibdata1 para InnoDB, descartar tabelas simplesmente deixa grandes lacunas em ibdata1. Você deve executar uma limpeza completa da infraestrutura InnoDB.

    • Apr 01, 2012: innodb_file_per_table é aconselhável?
    • Mar 25, 2012: Por que o InnoDB armazena todos os bancos de dados em um arquivo?
    • Mar 29, 2011: Tamanho máximo da tabela para o servidor de banco de dados MySQL em execução no Windows (NTFS) Tipo de tabela InnoDB
    • Feb 04, 2011: MySQL InnoDB - innodb_file_per_table contras?
    • Oct 29, 2010: Howto: Limpar um mecanismo de armazenamento mysql InnoDB?

    ATUALIZAÇÃO 2012-12-21 19:30 EDT

    Como esse banco de dados usa innodb, haverá uma tabela temporária crescente que posso procurar?

    Digamos que você queira correr

    OPTIMIZE TABLE mydb.mytable;
    

    Veja dois cenários envolvendo innodb_file_per_table e esteOPTIMIZE TABLE

    CENÁRIO #1: innodb_file_per_table desabilitado

    A execução OPTIMIZE TABLEfará com que todos os dados e páginas de índice mydb.mytablesejam anexados contiguamente a ibdata1. Isso deixará o espaço ocupado anteriormente para aumentar ainda mais a loucura da fragmentação.

    Nesse cenário, a tabela temporária existiria como InnoDB e se materializaria em ibdata1. Assim, não haveria nada para monitorar visualmente.

    CENÁRIO #2: innodb_file_per_table ativado

    Para cada tabela InnoDB mydb.mytable você teria

    • /var/lib/mysql/mydb/mytable.frm
    • /var/lib/mysql/mydb/mytable.ibd

    O .ibdarquivo contém os dados e as páginas de índice da tabela.

    A execução OPTIMIZE TABLEfará com que todos os dados e páginas de índice mydb.mytablesejam gravados em um .ibdarquivo externo que você pode ver no Windows Explorer.

    EMBARGO

    Ativar innodb_file_per_table e executar OPTIMIZE TABLEnunca recuperará o espaço anteriormente ocupado em ibdata1. Você terá que realizar a limpeza do InnoDB para recriar o ibdata1 de forma que os dados e índices nunca mais residam no ibdata1.

    CONCLUSÃO

    Como afirmado anteriormente, o MariaDB pode monitorarOPTIMIZE TABLE;

    Se você quiser algo que possa monitorar e tiver innodb_file_per_table ativado, poderá substituir

    OPTIMIZE TABLE LOGTABLEFOO1,LOGTABLEFOO2,LOGTABLEFOO3;
    

    com o seguinte equivalente mecânico:

    CREATE TABLE LOGTABLEFOO1_NEW LIKE LOGTABLEFOO1;
    INSERT INTO LOGTABLEFOO1_NEW SELECT * FROM LOGTABLEFOO1;
    ALTER TABLE LOGTABLEFOO1 RENAME LOGTABLEFOO1_OLD;
    ALTER TABLE LOGTABLEFOO1_NEW RENAME LOGTABLEFOO1;
    DROP TABLE LOGTABLEFOO1_OLD;
    ANALYZE TABLE LOGTABLEFOO1;
    
    CREATE TABLE LOGTABLEFOO2_NEW LIKE LOGTABLEFOO2;
    INSERT INTO LOGTABLEFOO2_NEW SELECT * FROM LOGTABLEFOO2;
    ALTER TABLE LOGTABLEFOO2 RENAME LOGTABLEFOO2_OLD;
    ALTER TABLE LOGTABLEFOO2_NEW RENAME LOGTABLEFOO2;
    DROP TABLE LOGTABLEFOO2_OLD;
    ANALYZE TABLE LOGTABLEFOO2;
    
    CREATE TABLE LOGTABLEFOO3_NEW LIKE LOGTABLEFOO3;
    INSERT INTO LOGTABLEFOO3_NEW SELECT * FROM LOGTABLEFOO3;
    ALTER TABLE LOGTABLEFOO3 RENAME LOGTABLEFOO3_OLD;
    ALTER TABLE LOGTABLEFOO3_NEW RENAME LOGTABLEFOO3;
    DROP TABLE LOGTABLEFOO3_OLD;
    ANALYZE TABLE LOGTABLEFOO3;
    

    Tenha em mente que OPTIMIZE TABLE nada mais é ALTER TABLE ... ENGINE=InnoDB;do que ANALYZE TABLE .

    Com essas etapas, você sabe com antecedência quais são as tabelas temporárias

    • LOGTABLEFOO1_NEW.ibd
    • LOGTABLEFOO2_NEW.ibd
    • LOGTABLEFOO3_NEW.ibd

    Simplesmente monitore a existência e o tamanho de cada arquivo até que ele desapareça.

    • 12
  2. Pierre-Olivier Benoit
    2019-02-20T22:47:51+08:002019-02-20T22:47:51+08:00

    Existe uma maneira mais simples, se você tiver acesso ao sistema de arquivos.

    MySQL gera um arquivo .TMD; você pode observar o tamanho do arquivo crescendo; deve atingir mais ou menos o tamanho do seu MYD existente quando terminar.

    Por exemplo, se você cd para o seu datadir, e simplesmente watch "ls -lah|grep table_name"retornará algo assim (no Linux). No meu caso, o progresso é de 287 MB de 427 MB (aproximadamente).

    -rw-rw----.  1 mysql mysql 427M Feb 19 23:45 ticket_change.MYD
    -rw-rw----.  1 mysql mysql 541M Feb 20 01:10 ticket_change.MYI
    -rw-rw----.  1 mysql mysql 287M Feb 20 01:45 ticket_change.TMD
    
    
    • 2
  3. cornernote
    2017-03-07T21:14:20+08:002017-03-07T21:14:20+08:00

    O pt-online-schema-change do Percona Toolkit faz isso para você.

    Altere mydb.LOGTABLEFOO1para InnoDB, executando efetivamente OPTIMIZE TABLEde maneira não bloqueante porque já é uma tabela InnoDB

    pt-online-schema-change --alter "ENGINE=InnoDB" D=mydb,t=LOGTABLEFOO1
    
    • 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

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

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

    Como selecionar a primeira linha de cada grupo?

    • 6 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
    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
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +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