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 / 97432
Accepted
kriegu
kriegu
Asked: 2015-04-10 07:44:08 +0800 CST2015-04-10 07:44:08 +0800 CST 2015-04-10 07:44:08 +0800 CST

Acelerando inserções de colunas longtext ou longblob

  • 772

atualmente estou migrando um banco de dados DB2 para MySQL, usando a ferramenta SQL WORKBENCH

Ele basicamente seleciona do DB2 e insere no DB2.

Funciona bem, mas nas tabelas com colunas longblob ou longtext (para armazenar xml ou imagens) leva muito tempo. (cerca de 40 horas para uma tabela de 10 milhões de linhas).

Fatos:

  • Servidor: 2CPU CORES e 8GB de RAM SO: Linux RHEL 6.5

  • Servidor MySQL 5.6.13

  • As tabelas são InnoDB.

  • O servidor MySQL e a ferramenta de migração estão no mesmo computador, portanto não há sobrecarga de rede.

  • As tabelas no MySQL possuem CHAVES PRIMÁRIAS, mas nenhum outro índice.

  • Desativei o log binário para a inserção massiva.

  • Eu configurei a ferramenta de migração para fazer uma inserção em lote de 10
    linhas e confirmar cada inserção (10 linhas).

Duas perguntas aqui:

  1. Quais são os valores recomendados para o tamanho do batch insert, considerando o tamanho das colunas (longtext, longblob)?
  2. Existe algum ajuste recomendado no my.cnf para melhorar o desempenho da inserção?

Aqui está o conteúdo do arquivo my.cnf:

[mysqld]

open_files_limit=2048
table_open_cache=1024
query_cache_type=1
query_cache_size=64M
tmp_table_size=32M
thread_cache_size=9
default-storage-engine=INNODB
back_log=80
flush_time=0
join_buffer_size=1M
max_allowed_packet=1G
max_connect_errors=100
sort_buffer_size=256K
table_definition_cache=1400
binlog_row_event_max_size=8K
log-bin
log_bin_trust_function_creators=1

#INNODB
innodb_additional_mem_pool_size=8M
innodb_flush_log_at_trx_commit=1
innodb_data_file_path = ibdata1:5G:autoextend
innodb_log_buffer_size=16M
innodb_buffer_pool_size=6144M
innodb_log_file_size=1GB
innodb_thread_concurrency=3
innodb_autoextend_increment=64
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=300
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_algorithm=0
mysql performance
  • 2 2 respostas
  • 2377 Views

2 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2015-04-10T08:19:57+08:002015-04-10T08:19:57+08:00

    Arquitetura InnoDB (de Percona CTO Vadim Tkachenko)

    Arquitetura InnoDB

    1. Quais são os valores recomendados para o tamanho do batch insert, considerando o tamanho das colunas (longtext, longblob)?
    • Aumente innodb_log_buffer_size para 256M
    • Aumentar innodb_log_file_size para 2G
    • Eu escrevi sobre aumentá-los para acomodar os campos TEXT/BLOB no passado
      • Apr 20, 2011: MySQL apresenta erro "Sem memória" ao inserir um arquivo grande. De onde vem essa limitação de tamanho de arquivo?
      • Apr 27, 2011: Alterado max_allowed_packet e ainda recebendo o erro 'Pacote muito grande'
      • Aug 01, 2011: Como max_allowed_packet afeta o backup e a restauração de um banco de dados?
    1. Existe algum ajuste recomendado my.cnfpara melhorar o desempenho da inserção?
    • Aumente os threads de E/S de gravação (para obter mais informações, consulte Configurando o número de threads de E/S do InnoDB em segundo plano )
    • Altere innodb_thread_concurrency para a configuração padrão de 0

    Alterações propostas

    [mysqld]
    innodb_log_buffer_size    = 256M
    innodb_log_file_size      = 2G
    innodb_write_io_threads   = 16
    innodb_thread_concurrency = 0
    

    DE UMA CHANCE !!!

    • 1
  2. Rick James
    2015-04-10T16:11:37+08:002015-04-10T16:11:37+08:00

    As ideias de Roland são boas. Também

    • Desligue o query_cache; é sobrecarga não utilizada. ( _type=0, _size=0)
    • O tamanho do lote de 10 provavelmente é bom. Qual o tamanho dos BLOBs/TEXTs?
    • Quantos dados existem? Parece terabytes? Simplesmente ler e gravar terabytes leva horas -- apenas para a E/S do disco. (Portanto, 40 horas podem ser razoáveis.)
    • comente log-bin(não adianta escrever um binlog; se algo travar muito, comece de novo)
    • innodb_flush_log_at_trx_commit=2-- para diminuir a frequência de gravação no log de transações
    • innodb_file_per_table = ON-- diante de você CREATEa(s) mesa(s). (Você vai me agradecer muito mais tarde.)

    Novamente, essas configurações não são necessariamente "certas" para produção.

    • 0

relate perguntas

  • 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