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 / user-13362

David Parks's questions

Martin Hope
David Parks
Asked: 2013-03-18 19:40:58 +0800 CST

LOAD DATA INFILE em uma tabela MyISAM bloqueia as consultas de leitura do usuário, podemos contornar isso?

  • 1

Eu tenho uma grande tabela de referência, 100 GB, em uma tabela MyISAM, carregá-la do zero vai bem (4 horas e meia) usando LOAD DATA INFILE.

Mas temos 1 GB por dia que queremos atualizar em um processo em lote usando LOAD DATA INFILE. Infelizmente, LOAD DATA INFILE impede os usuários de consultar essa tabela.

Existe uma maneira de contornar isso?

Por exemplo:

  • Posso carregar os novos dados em outra tabela e inserir a partir dessa tabela ou algo semelhante para permitir o carregamento dos dados e ler as consultas na tabela principal ao mesmo tempo?
  • Posso fazer algum tipo de particionamento com novas tabelas adicionadas diariamente, unidas por uma visão? Isso seria uma má ideia com uma mesa tão grande?
mysql performance
  • 1 respostas
  • 425 Views
Martin Hope
David Parks
Asked: 2013-01-12 19:37:08 +0800 CST

O que significa 'bloqueio do sistema' no perfil do mysql de uma instrução LOAD DATA INFILE?

  • 6

2 milhões de linhas inseridas usando LOAD DATA INFILE para innodb levam 7,5 minutos, e a criação de perfil mostra que 99% desse tempo está em "Bloqueio do sistema" .

Isso me diz algo útil?

   mysql> set profiling=1;
   Query OK, 0 rows affected (0.00 sec)

   mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load;
   Query OK, 1964807 rows affected, 8 warnings (7 min 27.35 sec)
   Records: 1964806  Deleted: 1  Skipped: 0  Warnings: 8

   mysql> show profile for query 1;
   +------------------------------+------------+
   | Status                       | Duration   |
   +------------------------------+------------+
   | starting                     |   0.000206 |
   | checking permissions         |   0.000015 |
   | Opening tables               |   0.000034 |
   | System lock                  | 447.327523 |
   | Waiting for query cache lock |   0.000352 |
   | query end                    |   0.000011 |
   | closing tables               |   0.000014 |
   | freeing items                |   0.000033 |
   | logging slow query           |   0.000007 |
   | logging slow query           |   0.000006 |
   | cleaning up                  |   0.000006 |
   +------------------------------+------------+
   11 rows in set (0.02 sec)
mysql innodb
  • 2 respostas
  • 38579 Views
Martin Hope
David Parks
Asked: 2013-01-12 01:59:24 +0800 CST

MySQL LOAD DATA INFILE diminui em 80% após alguns shows de entrada com o mecanismo InnoDB

  • 15

Estou carregando um arquivo de 100 GB via LOAD DATA INFILE. Eu tive um bom sucesso com o MyISAM, algumas horas e pronto.

Estou tentando agora usando o InnoDB. A carga começa rapidamente em mais de 10 MB/s (observando o crescimento do arquivo da tabela, file_per_tableestá ativado).

Mas depois de cerca de 5 GB de dados, ele diminui para o intervalo de 2 a 4 MB/s, quando chego a mais de 20 GB, ele diminui cerca de 2 MB/s.

O tamanho dos buffer pools do InnoDB é 8G. E eu fiz o seguinte antes de executar o comando LOAD DATA INFILE:

SET @@session.sql_log_bin=0;
SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
alter table item_load disable keys;
//Run LOAD DATA INFILE....

Não consigo ver a razão pela qual está começando bem e diminuindo ao longo do tempo.

Além disso, usando as mesmas configurações, executei o mesmo comando LOAD DATA INFILE com a tabela usando InnoDB e MyISAM e um conjunto de dados de teste de 5 GB, MyISAM foi 20x mais rápido:

InnoDB:

mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load;
Query OK, 2630886 rows affected, 6 warnings (21 min 25.38 sec)
Records: 2630886  Deleted: 0  Skipped: 0  Warnings: 6

MeuISAM:

mysql> LOAD DATA CONCURRENT LOCAL INFILE '/tmp/item' REPLACE INTO TABLE item_load;
Query OK, 2630886 rows affected, 6 warnings (1 min 2.52 sec)
Records: 2630886  Deleted: 0  Skipped: 0  Warnings: 6

Qualquer outra coisa que eu deveria considerar tentar? O mecanismo MyISAM é capaz de manter a taxa de carga muito melhor.


Detalhes adicionais:

  • Já tentei carregar os arquivos individualmente, sem diferença.

  • Aliás, tenho 150 arquivos de 500MB cada, dentro de cada arquivo as chaves são ordenadas.

  • Depois de obter 40 GB durante a noite, 12 horas depois, a taxa de carregamento caiu para 0,5 MB/s, o que significa que a operação é praticamente impossível.

  • Não encontrei outras respostas para perguntas semelhantes em outros fóruns, parece-me que o InnoDB não suporta o carregamento de grandes quantidades de dados em tabelas com alguns GB de tamanho.

mysql performance
  • 4 respostas
  • 27342 Views
Martin Hope
David Parks
Asked: 2013-01-11 18:49:02 +0800 CST

MySQL: Para usar o mecanismo MYISAM ou INNODB? (reviravolta na história incluída)

  • 1

Usamos INNODBpara todas as nossas tabelas, mas eu tenho uma tabela especial, uma tabela de referência de mais de 100 GB (somente consultas de leitura nela).

Estamos carregando alterações nesta tabela em um trabalho em lote noturno usando LOAD DATA INFILE.

MyISAMé mais compacto e eficiente para uma mesa de referência. Mas esta seria a ÚNICA tabela MyISAM que usamos.

A carga de trabalho no restante das tabelas é um aplicativo da Web típico, exceto para 1 tabela que possui uma carga de gravação pesada e carga de leitura normal.

  • Pergunta 1 - Vale a pena dedicar memória ao cache MyISAM apenas para esta tabela, quando sei que preciso de uma quantidade razoável de memória dedicada ao cache InnoDB para os outros casos de uso de carga de trabalho?
  • Questão 2 - Quando eu executar LOAD DATA INFILE 'from_nightly_batch' REPLACE INTO TABLE mytableo MyISAM irá travar a tabela para leituras? Será InnoDB? por exemplo, posso usar a tabela de referência enquanto faço a atualização noturna em qualquer mecanismo?
mysql innodb
  • 1 respostas
  • 978 Views
Martin Hope
David Parks
Asked: 2012-12-19 03:33:40 +0800 CST

Logs binários do MySQL - pule uma tabela

  • 9

Existe uma maneira de pular uma tabela específica nos logs binários?

Eu tenho logs binários configurados como minha estratégia de backup incremental entre backups noturnos. Mas temos uma enorme tabela de referência que vamos atualizar todas as noites a partir de um processo em lote (tabela de 70 GB). Esta tabela é apenas lida e é atualizada todas as noites usando mysqlimport.

Durante o processo de atualização para esta tabela apenas de referência, os logs binários estão causando um atraso bastante sério (especialmente quando faço uma atualização completa de 70 GB). Tem que fazer 70 GB duas vezes basicamente. que nojo.

A tabela de referência está atualmente usando MyISAM (eu bloqueei o InnoDB tentando carregá-lo, então tentando MyISAM).

mysql logs
  • 2 respostas
  • 12258 Views

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