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 / 14006
Accepted
Haluk
Haluk
Asked: 2012-02-28 08:57:06 +0800 CST2012-02-28 08:57:06 +0800 CST 2012-02-28 08:57:06 +0800 CST

Desempenho de ATUALIZAÇÃO do Innodb

  • 772

Recentemente, mudamos uma de nossas tabelas para innodb e agora estamos experimentando tempos de execução de UPDATE muito lentos. Uma atualização que costumava levar de 0,010 a 0,030 segundos agora pode levar mais de 70 segundos. Algumas consultas são descartadas porque não podem adquirir um bloqueio dentro do limite padrão de 50 segundos (sei que podemos aumentar esse limite).

A tabela em questão possui apenas um índice, a própria chave primária que é um valor mediumint. A tabela tem cerca de 1 milhão de linhas. Todos os UPDATEs neste contexto envolvem uma única linha. Normalmente, 4-5 colunas dessa linha são afetadas em cada consulta.

O my.cnf atual é colado abaixo. Você vê algo que poderia causar um desempenho ruim de UPDATE para o innodb?

[mysqld]
set-variable=local-infile=0

datadir=/db/mysql/data
socket=/var/lib/mysql/mysql.sock
#log = /var/log/mysqld.log
log-error = /var/log/mysqld.error.log
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1


skip-locking
key_buffer = 1G
query_cache_size = 256M
thread_cache_size = 128
table_cache = 2048
max_connections = 400
query_cache_limit = 1024M
log_slow_queries = /var/log/mysql-slow.log
long_query_time = 1
skip-bdb
skip-locking
skip-name-resolve

innodb_buffer_pool_size=1G
innodb_additional_mem_pool_size=20M
innodb_flush_log_at_trx_commit=2
#innodb_log_file_size=250M
innodb_log_buffer_size=8M
innodb_lock_wait_timeout=50


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

ATUALIZAÇÃO:
innodb_log_file_size: 5242880
have_innodb: SIM A
cláusula "WHERE" sempre procura apenas uma coluna, que é a chave primária.

ATUALIZAÇÃO - 26 de julho de 2012: Atualizamos
nosso banco de dados para mysql 5.5. Agora as atualizações do innodb são bem rápidas, menos de 0,010 segundos em nosso caso específico. E a variância é bem baixa. Minha opinião sobre isso é: o innodb deve ser usado com muito cuidado no mysql 5.0.

mysql performance
  • 2 2 respostas
  • 14108 Views

2 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2012-02-28T09:54:34+08:002012-02-28T09:54:34+08:00

    PERSPECTIVA #1

    Quando você atualiza por chave primária apenas no InnoDB, há uma ocasião rara, mas possível, em que o índice clusterizado (também conhecido como gen_clust_index ) pode ser bloqueado.

    Certa vez, respondi a três postagens de um indivíduo sobre esse assunto

    • Problema ao decifrar um impasse em um log de status do innodb
    • Razões para consultas ocasionalmente lentas?
    • Essas duas consultas resultarão em um impasse se executadas em sequência?

    Por favor, leia-os cuidadosamente. O autor da pergunta encontrou sua própria solução alternativa com base no comportamento de bloqueio de índice clusterizado do InnoDB. Infelizmente, ele não postou qual era a solução alternativa.

    Além disso, quando você perceber que as consultas estão lentas, faça login no mysql e execute SHOW ENGINE INNODB STATUS\Ge comece a procurar bloqueios no índice clusterizado.

    PERSPECTIVA #2

    Vejo que você comentou innodb_log_file_size . Você tem 5 MB, o padrão. Como innodb_buffer_pool_size está definido como 1G, innodb_log_file_size precisa estar em 256M. Clique aqui para configurar innodb_log_file_size para 256M .

    PERSPECTIVA #3

    Vejo que você não está usando innodb_file_per_table . Você pode querer usá-lo para fazer atualizações de tabela especificamente para uma tabela com um milhão de linhas. Clique aqui para ver como limpar a infraestrutura InnoDB para usar innodb_file_per_table .

    • 2
  2. Stephen Senkomago Musoke
    2012-02-28T10:24:00+08:002012-02-28T10:24:00+08:00
    1. Você está atualizando o valor da chave primária?

    2. Alguma das colunas são chaves estrangeiras para outras tabelas? Como o InnoDB também atualiza as chaves estrangeiras na mesma transação por meio do CASCADE.

    3. Você pode aumentar o innodb_buffer_pool_size para mais de 1 GB para que toda a tabela caiba na memória?

    4. Quantas outras tabelas estão no schmea - pois pode haver problemas ao redimensionar o tablespace para realizar a atualização

    5. Você pode querer tentar usar o innodb_file_per_table onde um arquivo tablespace é criado para cada tabela. Depois de alterar esse parâmetro, você precisa reiniciar o servidor e criar seu banco de dados novamente para que ele entre em vigor.

    • 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

    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