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-5660

Alan's questions

Martin Hope
Alan
Asked: 2012-06-01 17:33:17 +0800 CST

Gravação aleatória congela

  • 3

Eu tenho um banco de dados MySQL 5.5.23 que executa cerca de 3k qps, 5% dos quais são gravações. Ultimamente, tenho tido um grande problema com congelamentos aleatórios de gravação. Tudo está indo muito bem e, de repente, qualquer gravação que chega pára no estado "atualizar" ou "Atualizando". Eles ficam nesse estado por cerca de um ou dois minutos e finalmente terminam. O problema é que com uma quantidade tão grande de conexões, quando elas congelam aleatoriamente assim, a conexão permanece aberta e inevitavelmente recebo muitos erros de conexão.

Está acontecendo em todas as tabelas durante as consultas INSERT e UPDATE.

Alguém viu isso antes? Existe algo que possa ser feito sobre isso?

Estou usando o Amazon RDS com a maior instância que eles oferecem. Terei o maior prazer em fornecer qualquer informação que vocês precisem, apenas deixe-me saber o que é.

ATUALIZAÇÃO: A tabela principal que estou inserindo é:

CREATE TABLE `mytable` (
 `hash` varchar(5) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
 `name` varchar(256) DEFAULT NULL,
 `ip` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
 `deletehash` char(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
 `datetime` datetime NOT NULL,
 `api_key` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_cs DEFAULT NULL,
 `account_id` int(10) unsigned DEFAULT NULL,
 `type` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
 `width` int(10) unsigned NOT NULL DEFAULT '0',
 `height` int(10) unsigned NOT NULL DEFAULT '0',
 `size` int(10) unsigned NOT NULL DEFAULT '0',
 `animated` tinyint(1) NOT NULL DEFAULT '0',
 `views` int(10) unsigned NOT NULL DEFAULT '0',
 `lastviewed` datetime NOT NULL,
 PRIMARY KEY (`hash`),
 UNIQUE KEY `deletehash` (`deletehash`),
 KEY `datetime` (`datetime`),
 KEY `account_id` (`account_id`),
 KEY `ip` (`ip`),
 KEY `api_key` (`api_key`),
 KEY `views` (`views`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Inserção de amostra:

insert into mytable (hash, name, ip, deletehashe, datetime, api_key, account_id, type, width, height, size, animated, views, lastviewed) values('abcde', 'file name', '127.0.0.1', 'abcdefghijklmn', '2012-05-31 00:00:00', NULL, NULL, 'mime/type', 0, 0, 0, 0, 0, '0000-00-00 00:00:00');

Exemplo de atualização:

update mytable set views = views+1, lastviewed = NOW() where hash = 'abcde';

"Atualizando"

mysql amazon-rds
  • 1 respostas
  • 832 Views
Martin Hope
Alan
Asked: 2012-01-08 18:07:54 +0800 CST

Atualizações simultâneas do MySQL travam com o InnoDB (no Amazon RDS)

  • 7

Estou enfrentando um problema em que várias atualizações do MySQL executadas ao mesmo tempo travam e levam vários minutos para serem concluídas. Estou usando o InnoDB, então estou confuso sobre por que isso pode estar acontecendo, já que cada atualização está atualizando apenas 1 linha. Também estou usando uma instância RDS m2.4xlarge (a maior que existe).

Atualização travada

Aqui está o que estou fazendo: tenho uma tabela com cerca de 100 milhões de linhas, com "visualizações" sendo uma coluna (que é indexada) e desejo atualizar as visualizações em cerca de 1 milhão de linhas. Em vários servidores diferentes, tenho um loop como este, onde cada servidor possui seu próprio conjunto de linhas a serem atualizadas (pseudo código):

mysql("set autocommit=0");
mysql("start transaction");

foreach($rows as $row) {
    mysql("update table set views=views+1 where id=$row[id]");
}

mysql("commit");

Isso percorre todas as linhas que precisam ser atualizadas. Funciona perfeitamente quando o número de servidores é pequeno, como cerca de 4, mas quando aumenta para mais de 10, as atualizações começam a travar no estado "Atualizando" de uma só vez. Nada diz que está esperando um bloqueio, é apenas "Atualizando". Isso acontece por cerca de 5 minutos, onde ele finalmente fará as atualizações e continuará no loop e, eventualmente, acontecerá novamente.

Não estou procurando maneiras alternativas de fazer as atualizações. Ter coisas como uma tabela tmp e

update table,tmp_table set table.views = table.views+tmp_table.views where
  table.id = tmp_table.id

bloqueie todas as linhas que estão sendo atualizadas até que todas terminem (o que pode levar horas), o que não funcionará para mim. Eles DEVEM estar nesses loops terríveis.

Estou me perguntando por que eles podem estar travando no estado "Atualizando" e o que posso fazer para evitar isso.

tldr; Ter mais de 10 loops de "atualização" eventualmente bloqueará todas as atualizações sendo feitas, ao mesmo tempo, por um motivo desconhecido até que eles decidam finalmente fazer atualizações e continuar pelos loops, apenas para que isso aconteça novamente segundos depois.

MOSTRAR VARIÁVEIS: http://pastebin.com/NdmAeJrz

MOSTRAR STATUS INNODB DO MOTOR: http://pastebin.com/Ubwu4F1h

mysql innodb
  • 3 respostas
  • 11816 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