Atualmente, estou executando uma consulta alter na minha tabela (entradas de 20 milhões) para adicionar um índice. já está em execução há mais de 3 dias (preso em 'copiar para tabela tmp').
existe uma maneira de ver o progresso da consulta ou, em outras palavras, existe uma maneira de obter um tempo de conclusão da estimativa?
obrigado.
SHOW CREATE TABLE tblname\G
sobre a mesa e diga-nos o índice que você deseja criar.Respostas:
Quando o mysql altera uma tabela, ele essencialmente faz uma cópia dela e depois a troca. Dessa forma, se você cancelar a atualização no meio, a tabela ainda estará em um estado estável. Portanto, você pode procurar no diretório de dados do mysql (/ var / lib / mysql /?) Para ver o tamanho do novo arquivo, que lhe dirá qual o seu comprimento. Isso é um pouco mais difícil com o Innodb, mas há uma tabela tmp sendo criada em algum lugar.
Você pode reduzir significativamente a quantidade de tempo que um índice leva, aumentando suas variáveis de buffer de classificação (myisam_sort_buffer_size, sort_buffer_size). Faça o maior tamanho possível com a memória que você possui. Você pode reduzir alguns dias do tempo de modificação e reduzi-lo a algumas horas, dependendo da quantidade de memória que você possui. Eu fiz uma tabela de 150 milhões de registros em cerca de 3 horas.
fonte
Como innodb_fle_per_table está desativado, você não pode ver a tabela e medir o seu progresso.
Eu fiz um post anterior sobre como fazer isso no MyISAM . Você pode fazer isso no InnoDB se, e somente se, innodb_file_per_table estiver ativado, e você reprojetar a infraestrutura do InnoDB . Ainda é necessário procurar no sistema operacional os tamanhos dos arquivos em questão.
Depois de implementar totalmente a Limpeza do InnoDB e ativar o innodb_file_per_table, convém executar a atualização do índice da seguinte maneira:
EXEMPLO você tem o seguinte
db.lotsofdata
com 20 milhões de nomes:A tabela fica assim:
Suponha que você queira criar um índice de nome. Você consegue fazer isso:
Enquanto o INSERT está em execução, você entra no sistema operacional e executa o seguinte:
Isso fornecerá uma lista do tamanho atual de
lotsofdata_new.ibd
. Quando fica maior quelotsofdata.ibd
, então você sabe que está quase completo.BTW MariaDB tem um Status de Progresso implementado internamente .
fonte
Não há uma maneira confiável de ver o progresso de uma criação de índice. Se você tivesse innodb-file-per-table, poderia obter alguma indicação observando o arquivo .ibd temporário que está sendo criado no diretório de dados e compará-lo com o tamanho do arquivo atual, mas isso não é muito confiável, pois seu arquivo de dados atual pode ficar inchado devido a exclusões / fragmentação e o novo arquivo de dados terá um índice adicional que o anterior.
Parece que você está usando uma versão do MySQL sem o plugin InnoDB instalado. O plug-in do InnoDB possui criação rápida de índice, que não requer uma reconstrução completa da tabela para adições e exclusões de índice. O plugin InnoDB é ativado por padrão no MySQL 5.5 e está disponível com uma configuração em 5.1.38 e posterior.
De volta ao Percona Server, de muitas maneiras (anterior à 5.5), o InnoDB Plugin está ativado por padrão.
fonte
pt-online-schema-change da Percona mostra a estimativa de tempo restante. Por padrão, ele imprime a estimativa de tempo restante e a porcentagem de progresso a cada 30 segundos.
Ele também possui funções adicionais em comparação com apenas executar o comando ALTER por si só.
http://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html
fonte